2

私はいつもPythonパッケージのインポートに苦労していました。ウェブを検索しましたが、適切な答えを見つけることができませんでした。

私は次のディレクトリ構造を持っています:

.
./__init__.py
./packages/
./packages/__init__.py
./packages/package
./packages/package/__init__.py
./packages/package/module.py

module.pyソースには次の1行しか含まれていません。

import package

「packages」ディレクトリに移動すると、パッケージをインポートできます。

>>> import python
>>>

「。」に行けば ディレクトリ、次のようにモジュール(またはパッケージ)をインポートしたいと思います:

>>> import packages.package.module as module

しかし、私はエラーが発生しています:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "vendor/package/module.py", line 1, in <module>
    import package
ImportError: No module named package

上記のインポートを実行できるように、__ init __。pyファイルに何を入れる必要がありますか?さらに、./ __ init __。pyファイルに何を入れる必要があるので、.. /ディレクトリからプロジェクトをインポートできますか?

可能であれば、sys.path変数を変更せずにこの問題を解決したいと思います。

4

2 に答える 2

2

import packagein module.py が成功するためには、python パッケージがpackage検出可能である必要があります。これは、上にある必要があることを意味しPYTHONPATHます。デフォルトでは、このパスには(またはsite-packagesで Python パッケージが配置されるディレクトリ) が含まれます。さらに、PYTHONPATH には現在の作業ディレクトリも含まれます。easy_installpip

にいる場合..PYTHONPATH の先頭に置かれます。このディレクトリには という python パッケージが含まれていないpackageため、import package失敗します。

./packagesPython インタープリターを開始する前に移動するか、パッケージをインストールすることができます。後者を行うには、setup.py が必要です。

于 2012-11-14T10:02:07.633 に答える
1

からプログラムを実行する場合。すべてのインポートは、そのディレクトリに対して相対的でなければなりません。あなたのmodule.pyファイルの場合、それはあなたがしなければならないことを意味します

import packages.package

それ以外の

import package

これは、python が を使用するためです。プログラムで行うすべてのインポートのベースとして。多くの魔法がなければ、親ディレクトリから何かをインポートすることはできないため、上記のように絶対インポートを行う必要があります。

于 2012-11-14T09:47:18.823 に答える