2

2 つの py ファイル:

./src/foo.py

def bar ():
    print 'bar!'

./tests/testfoo.py

from foo import bar
print 'testing'
bar ()

ルートフォルダー「./」で、呼び出し

python ./tests/testfoo.py

結果は

Traceback (most recent call last):
  File "./tests/testfoo.py", line 1, in <module>
    from foo import bar
ImportError: No module named foo

testfoo.py を実行していますが、当然、インタープリターはモジュール foo を見つけることができませんでした。「src」フォルダー内のモジュールをルックアップするために、インタープリターに任意のパラメーターを与えることはできますか?

編集#1

また、空のinit .py ファイルを 2 つ追加しました。

./src/__init__.py
./tests/__init__.py

それでも同じエラーが発生します。

編集#2(解決策)

新しい初期化pyファイルを追加して問題を解決しました

prep.py

import os, sys
cur = os.path.dirname (__file__)
pathtest = os.path.join (cur, 'tests')
sys.path.append (pathtest)

次に呼び出されます:

python prep.py tests/testfoo.py

出来た

4

3 に答える 3

4

これを試して:

import sys
sys.path.append('your/path')
import testfoo

./tests絶対パスを作成する必要があるかもしれません...

于 2012-09-04T19:49:11.840 に答える
4

環境変数 PYTHONPATH は、Python モジュールの検索パスを保持します。例えば

$ echo $PYTHONPATH
/home/username/lib/python2.6/site-packages:/usr/local/stsci_python/lib/python:

これを変更して、ディレクトリを追加します。

export PYTHONPATH="$PYTHONPATH:/your/new/path"

(ちなみに、これはBASH上にあります。)

于 2012-09-04T19:54:00.137 に答える
1

これらのディレクトリにa__init__.pyを配置して、それらをパッケージのように扱う必要があることを python に示します。

./src/__init__.py
./tests/__init__.py

Python は現在のディレクトリをチェックするため、これにより、実行している場所から問題が修正されます。ただし、次のようなランダムな場所から実行した場合、問題は修正されません。

/some/other/path/ $ /projects/tests/testfoo.py

必要なのは、その場所を含めるように PYTHONPATH を変更することです。

PYTHONPATH=$PYTHONPATH:/projects

これは、シェル環境に追加するか、毎回手動で行うことができます。

于 2012-09-04T19:50:07.643 に答える