2

これは他のいくつかの質問と重複する質問と見なされる可能性があることを認識していますが、1時間以上かけてさまざまなページやドキュメントを読んでいて、ここで何が起こっているのかまだわかりません。

複数のディレクトリにあるPythonファイルを操作しようとしています。私は本質的にこれを持っています:

myproject/
    __init__.py
    some_file.py
    some_data.dat
    tests/
        __init__.py
        test_some_file.py

test_some_file.py名前が示すように、コマンドラインから実行され、に含まれるコードを実行することを目的としておりsome_file.py、それをインポートする必要があります。しかし、私はそうすることができないようです。

私はもう試した:

from myproject import some_file

そしてまた

from .. import some_file

私はそれを使用して実行することができましたが、それsys.pathは私が読んだものに基づいて物事を行うための正しい方法ではないようです。

次に、を使用して実行させたときに、が使用されているものsys.pathが見つからないというエラーが発生しました。some_data.datsome_file.py

4

2 に答える 2

2

これは、Python プログラマーからの長年の質問です。問題は、Python がパッケージ内のスクリプトをうまく処理できないことです。ここ数回のリリースで状況は少し改善されましたが、それでも多くの場合、正しいことをしているとは言えません。

最良の答えは、どこtest_some_file.pyから実行するかを制限し、Python インタープリターの-mパラメーターを使用することだと思います。つまり、上記のディレクトリに移動してmyprojectから、 を実行しpython -m myproject.tests.test_some_fileます。これは、いじらずに機能する唯一の方法ですsys.path

これにより、インポート行のいずれかが正しく機能するようになります。PEP 8 は現在、常に絶対インポートを使用することを推奨しているため、最初のバージョンは、...

于 2013-02-23T06:54:03.677 に答える
1

あなたのような場合、(一時的に)のディレクトリsome_file.pyを追加します。sys.path

コード:

import sys, os
dirname = os.path.dirname(                 # going up by 1 directory
                   os.path.dirname(        # going up by 2 directories
                            sys.argv[0]))
sys.path.append(dirname)
import some_test
于 2013-02-23T10:53:51.640 に答える