web-dev-qa-db-ja.com

Python並列ディレクトリからモジュールをインポートする

このようなディレクトリを持つことができるように、python importsをどのように整理しますか。

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

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

14
Zack

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

python test/tests.py

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

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

python -m test.tests

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

from src.classes import etc

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

package
* __init__.py
* project
* src
* test

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

python -m package.test.tests

参照:

20
Peter Gibson