簡體   English   中英

從同一級別的另一個模塊導入Python模塊

[英]Importing Python module from another module in the same level

我正在使用下面列出的基本結構處理Python程序包,並在大括號中包含每個Python文件包含的內容的示例。

MAIN_PACKAGE/
    setup.py
    main_package/
        __init__.py 
        { 
        import package1
        import package2
        __all__=['main_package']
        }
        package1/
            __init__.py
            {
            import module1
            import module2
            __all__=['package1']
            }
            module1/
                __init__.py
                {
                from script1 import Class1A, Class1B
                __all__ = ['script1']
                }
                script1.py
                {contains 2 classes: Class1A and Class1B}

            module2/
                __init__.py
                {
                from script2 import Class2A, Class2B
                __all__ = ['script2']
                }
                script2.py
                {contains 2 classes: Class2A, Class2B}

            module3/
                __init__.py
                {
                from script3 import Class3A, Class3B
                __all__ = ['script3'] 
                }
                script3.py
                {contains 2 classes: Class3A, Class3B}

        package2/
                executable_script.py

到目前為止,它並沒有給我帶來麻煩。 但是,我最近添加了一個無法正確導入的新模塊(module3)。 我發現了一些相關的線程,但是沒有任何這種特殊的味道。

我可以使用setup.py成功安裝此程序,然后從命令行(任何目錄)正確導入以下內容:

python
>>> from main_package.package1.module3.script3 import Class3A, Class3B

但是,當我在同一行復制到SCRIPT2並重新運行setup.py文件(無誤差),我收到以下錯誤,當我運行executable_script

ImportError: cannot import name Class3A

然后,當我嘗試通過命令行導入python時,我也遇到了同樣的錯誤。 但是,僅當我嘗試將Class3A從script3導入到script2時才遇到此問題,而不是將類似的類從script1導入到script2中的時候。 我可以看到的唯一區別是script3是比script1更新的模塊。 為了使我將這個新模塊/類導入到舊腳本中,是否有可能無法更新的內容? 還是注定要趕上我的結構有問題?

另一個細節是僅當線以相同的水平加入到另一個模塊發生此錯誤,但在錯誤起源 executable_script.py在包裝2。 例如錯誤消息的第一行是

/usr/bin/executable_script, line 9, in <module>load_entry_point('MAIN_PACKAGE==0.1.0','console_scripts','executable_script')()

可執行腳本的第9行是doc字符串的一部分。 我正在使用Python 2.7。

可能您是循環進口。 在ClassA導入ClassB中以及在ClassB導入ClassA或包含更多文件的地方,例如在ClassA導入Class B中,在ClassC中導入ClassB和ClassA。

嘗試使用絕對導入:

from .script3 import Class3A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM