こんにちは私はPythonには新しく、私が構築したプログラム構造に問題があると思います。ImportErrorsを解決するための構造に関する助言
これは私が考えた構造の抽出物です。
.
└── asd
├── asd.py
├── __init__.py
├── Framework
│ ├── importer.py
│ └── __init__.py
├── Library
│ ├── libraryManager.py
│ └── __init__.py
実際にはasd
の下にさらに多くのパッケージがあります。 asd.py
は「メイン」を意味します。他のパッケージに含まれる異なるクラスの多くのオブジェクトをインスタンス化します。たとえば、いくつかのlibraryManagerオブジェクトがあります。インポータは、ライブラリファイルをインポートするだけでなく、インポートすることもできます。
私の主な欠陥は次のとおりです。異なるパッケージ内のクラスがasd
の各インスタンスにアクセスできるようにするには、メインasd
への参照をパラメータとして取得します。 これらは、問題のファイルです:
asd.py
:
from asd.Framework.importer import importer
from asd.Library.libraryManager import libraryManager
class asd(object):
def __init__(self):
# instantiate several objects
self.nodeLibMng = libraryManager("DbNodeLibrary.txt")
self.importer = importer(self)
importer.py
:私はasd.pyを実行したい場合は
from asd.asd import asd
class importer(object):
def __init__(self, asdRef : asd):
self.asdRef = asdRef
def importNode (self,item):
# The following line shows why I want this reference construct.
self.asdRef.nodeLibMng.appendItemToLibraryDB(item)
は今、私は次のエラーを取得する:
ImportError: No module named 'asd.Framework'; 'asd' is not a package
私がimporter.py I内でテストコードを実行するとこのエラーが出る:ImportError: Cannot import name Xよう
ImportError: cannot import name 'asd'
他のトピックは、私は、円形の依存輸入を持っていることを示唆しています。
どのように私はこれを解決することができますが、すべてのクラスはasd
のインスタンスと通信することができますか?
EDIT 0: 私は同じ問題を持っている誰のために
if __name__ == '__main__':
asd=asd()
あなたは、あなたのパスに 'asd'のではない*親ディレクトリの*を' asd'ディレクトリを持っています。したがって、 'asd.py'はディレクトリではなくトップレベルのモジュールとして見つけられます。 –
'asd.py'をスクリプトとして使用していますか?もしそうなら、しないでください。パッケージ内の単一のファイルをスクリプトとして実行することはできません。これは、すぐにパス上の最上位ディレクトリになるためです。スクリプト*外部パッケージを置くか、 'python -m'スイッチを使ってモジュールをスクリプトとして実行します(' __main __。py'モジュールを持つパッケージはそのメソッドを使って実行できます)。 –
ここには "asd"と呼ばれるものが非常にたくさんあります。 –