0

私はこのプロジェクト構造を持っています:

スクリプト

-- A
    == AA
        ++ __init__.py
        ++ AAA.py
        ++ AAB.py
        ++ AAC.py
    == AB
        ++ __init__.py
        ++ ABA.py
        ++ ABB.py
        ++ ABC.py
-- B
    == BA
        ++ __init__.py
        ++ BAA.py
        ++ BAB.py
        ++ BAC.py
    == BB
        ++ __init__.py
        ++ BBA.py
        ++ BBB.py
        ++ BBC.py

Scripts/A/AA/AAA.py内部のクラスを にインポートしたいScripts/B/BB/BBC.py。私はいくつかの解決策を使用しました:

  1. from AAA import *私に与えますImportError: No module named AAA
  2. from Scripts.A.AA.AAA import *私に与えますImportError: No module named Scripts.A.AA.AAA
  3. from ..A.AA.AAA import *私に与えますValueError: Attempted relative import beyond toplevel package
  4. from ....A.AA.AAA import *私に与えますValueError: Attempted relative import in non-package

私は何をすべきか ?

編集1:

プロジェクトの構造を変更したところ、次のようになりました。

スクリプト

-- elements
    == A
        ++ __init__.py
        ++ AAA.py
        ++ AAB.py
        ++ AAC.py
    == B
        ++ __init__.py
        ++ BAA.py
        ++ BAB.py
        ++ BAC.py
-- general
    == imports.py
    == __init__.py
-- main.py

すべてのクラスをインポートするために、次のコードを作成しました。

elementDict = []
dirList = os.walk('elements') 
for dname in dirList:  
    fileList = dname[2]
    for fname in fileList:
        if fname != '__init__.py' and fname.endswith('.py') and (not fname.endswith('_ut.py')) and (not fname.endswith('~')):  
            path = dname[0].split(os.sep)
            path = filter(None, path[path.index('elements'):])
            dir = '.'.join(path)
            mod = importlib.import_module(dir + '.' + fname[:-3])
            for cname, obj in inspect.getmembers(mod, inspect.isclass): 
                if cname not in elementDict:  
                    elementDict[cname] = obj

これにより、次の結果が得られます。

Traceback (most recent call last):
  File "C:\Users\test\Scripts\general\imports.py", line 29, in __init__
    mod = importlib.import_module(dir + '.' + fname[:-3])
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named elements.A.AAA

何か案が?

編集2:

問題は解決しました。私は何も持っていませんでし__init__.pyelements

4

1 に答える 1