私のプロジェクトの輸入に問題があります。
私のディレクトリ構造は次のとおりです。
base_directory
- examples
- src
- folder_1
- __init__.py
- file.py
- folder_2
- __init__.py
- class1.py
- class2.py
- class3.py
- class4.py
_
の file.py
私はしようとしています: from ..folder2.class1 import Class1
それでは、エラーが発生します。
ImportError:既知の親パッケージのない相対インポートを試みました
の folder2/__init__.py
私はPythonでパッケージを作成するためのチュートリアルで見たことをしました:
from class1 import Class1
my_class_1 = Class1()
_
これまでのところ、何も働いています。私は何をすべきか?私はPython 3.7.5)を使います
ありがとう。
例では、folder_1とfolder_2は2つの別々のパッケージと一意のパッケージです。それらの間の相対的なインポートはありません。それを仕事にするために単一の外側のパッケージに置く
_base_directory
- examples
- src
- mypackage
- __init__.py
- folder_1
- __init__.py
- file.py
print("imported", __file__)
from ..folder_2.class1 import Class1
print("file.py found", Class1)
- folder_2
- __init__.py
- class1.py
print("imported", __file__)
class Class1:
def __init__(self):
print("Created Class1 instance")
- class2.py
- class3.py
- class4.py
- test.py
import myproject.folder_1.file
_
実行Test.pyスクリプトを実行します
_~/tmp/base_directory/src$ python test.py
imported /home/td/tmp/base_directory/src/myproject/folder_1/file.py
imported /home/td/tmp/base_directory/src/myproject/folder_2/class1.py
file.py found <class 'myproject.folder_2.class1.Class1'>
_
ただし、 "-m"オプションを使用してモジュールを呼び出すことができる回避策があります。しかし、myproject
がpythonパスにある場合にのみ彼の専用の機能。私がそれを呼び出すときに私はMyProjectの親にいるのでここで動作します。
_~/tmp/base_directory/src$ python -m myproject.folder_1.file
imported /home/td/tmp/base_directory/src/myproject/folder_1/file.py
imported /home/td/tmp/base_directory/src/myproject/folder_2/class1.py
file.py found <class 'myproject.folder_2.class1.Class1'>
_