5

私は python を試しており、主に他の人のコードのトラブルシューティングを行っています。プログラムを実行しようとしています " path\folderA\program.py"。

私はからプログラムを実行していますpath\folderA

エラーが発生します:

ImportError: No module named fff.ggg.ppp

program.py にはインポートが含まれています。

from fff.ggg.ppp import mmm

フォルダ "path\folderB" には次のものがあります: " path\folderB\fff\__init__.py" " path\folderB\fff\ggg"

フォルダーgggには __init__.py、プログラムだけでなく、ppp.py

Python エラー "ImportError: No module named"のような他の投稿を読んで、フォルダを「パッケージ」にして、そこからのインポートを可能にすることを理解してい__init__.pyますが、エラーが発生しているため、機能しません。

これは、これらのプロジェクトで働いていた他の人々のために働いていたので、私の設定に何か問題があります.

ディレクトリがsys.pathにある必要があることについて何かを読みました。それは、それらを環境変数パスに追加する必要があるということですか? ただし、それは多くのディレクトリを PATH に追加することを意味するため、それはできません。

それで、次のことも見つけました。

import sys
sys.path.append( <path to FolderB> )

しかし、それはコードを変更することを意味し (これは他の人にとっては必要ありませんでした)、ローカル マシン上のパスをハード コーディングする必要があります。

私はそれを視覚化することはできません-明らかに、コードを変更してインポートモジュールへの物理パスをハードコードすることは想定されていません-それで、 folderA のプログラムが folderB で import を探すことをどのように知ることができますか?

魔法の仕組みは__init__.py

4

2 に答える 2

1

私はそれを視覚化することはできません-明らかに、コードを変更してインポートモジュールへの物理パスをハードコードすることは想定されていません-では、 folderA のプログラムが folderB で import を探すことをどのように知ることができますか?

あなたは正しいです。どういうわけか、python に folderB でインポートされたモジュールを探すように指示する必要があります。__init__.pyハード ドライブ上の他のフォルダからインポートできる魔法はありません。

通常、そのようなさまざまな python パッケージがある場合は、それらを python のライブラリにインストールすることで機能します。そうすれば、どこからでもインポートできます。これは通常、setup.pyスクリプトによって実行されます。あるかどうかを確認folderBします。で実行しpython setup.py installます。

それでも問題が解決しない場合は、このコードの構造に関する詳細情報が必要になります。

于 2012-07-13T19:09:16.977 に答える
0

フォルダー B は sys.path にある必要があるため、mmm を A に移動するか、A 内から sys.path を変更する必要があります (それが機能するかどうかはわかりません)。 フォルダーがパッケージであることを python に伝えるため、フォルダー内にフォルダーを__init__.py持つことができ、python は内部のフォルダーを親フォルダーの一部として扱います。sympy やほとんどすべての大規模な Python ライブラリを調べてみると、そのような構造が見つかります。インポート時に実行するコードを含めることもできますが、空にすることもできます。__init__.py__init__.py

于 2012-07-13T19:01:44.360 に答える