26

このようなディレクトリを持つことができるように、Python のインポートをどのように整理すればよいでしょうか。

project
|      \
|      __init__.py
|     
src
|   \
|    __init__.py
|    classes.py
|
test
    \
     __init__.py
     tests.py

そして /project/test/tests.py 内で classes.py をインポートできます

私はtests.pyでこのようなコードを持っています

from .. src.classes import(
    scheduler
    db
)

そして、エラーが発生しています

SystemError: Parent module '' not loaded, cannot perform relative import

誰が何をすべきか知っていますか?

4

1 に答える 1

36

Python は、起動したスクリプトを含むフォルダーを PYTHONPATH に追加します。

python test/tests.py

フォルダーのみがtestパスに追加されます (コマンドを実行しているベースディレクトリではありません)。

代わりに、次のようにテストを実行します。

python -m test.tests

これにより、ベースディレクトリが python パスに追加され、非相対インポートを介してクラスにアクセスできるようになります。

from src.classes import etc

本当に相対インポート スタイルを使用する場合は、3 つのディレクトリをパッケージ ディレクトリに追加する必要があります。

package
* __init__.py
* project
* src
* test

そして、パッケージディレクトリの上から実行します

python -m package.test.tests

以下も参照してください。

于 2014-07-08T01:47:23.530 に答える