因此,我在整個地方看到了很多有關__init__.py
文件的答案,而且說實話,這對我來說都非常混亂,我並沒有真正瞭解它,所以我希望得到一些幫助/基本解釋。Python包中__init__.py層次結構的正確結構
我有一個包設置如下:
top_package/
├── __init__.py
└── mid_package/
├── __init__.py
├── first_import.py
└── bottom_package/
├── __init__.py
└── second_import.py
所以我這裏有幾個問題...
如何導入second_import.py
first_import.py
?
接下來,如何在first_import.py
中導入second_import.py
?
最後,如果我有這樣的整個層次的外部的腳本,這樣說:
docs/
├── scripts
| └── test_script.py
└── top_package/
我怎麼會導入first_import.py
和test_script.py
second_import.py
?
我的Python版本是3.4.5(64位Anaconda),而且我在Windows上運行,如果這有所幫助。
因此,與這些問題的出路,我將提供什麼我到目前爲止已經試過一點背景知識:
(1)我初始化每個__init.py
以其「水平」,比如這「頂部」 __init__.py
:
import sys
sys.path.append("C:\Path\To\top_package")
(2)I加入__all__
線和一切的上水平的陣列,例如:
__all__ = ['mid_package']
(3)然後,我添加相對導入如:
from .mid_package import first_import
或者:
from .. import first_import
(4)然後,我將設法在文件正常加載這些像這樣在second_import.py
:
import first_import
(5)接着,在test_script.py
,我會嘗試加載爲:
import sys
sys.path.append('../top_package/')
import first_import
這將導致ImportError: No module named 'first_import'
。
我爲任何和所有的想法,我一直在這個工作了幾個小時,現在似乎無法破解它。非常感謝!
使用絕對導入。 '從top_package.mid_package import first_import'和'from top_package.mid_package.bottom_package import second_import' – Sraw
@Sraw在__init __。py'文件中還是在外部文件中? – user3684314
@Sraw對外部文件做這樣的操作不管用或不用'sys.path.append('../ top_package /')'(如果沒有對當前'__init__進行編輯。 py'文件如上所述 – user3684314