如果你運行你的應用程序從main.py
僅(和關於您的問題,沒有其他相關細節缺失),那麼我會簡單地這樣做:
裏面MyFolder/main.py
,我會寫:
from Folder2.foo2 import * # Or import single functions or classes
,並從裏面MyFolder/Folder2/foo2.py
,你寫
from Folder1.foo1 import *
from Folder1.Subfolder1.subfoo1 import *
我代表處在我的文件系統上引導你的結構,我也試過了,它適用於我。
相反,如果你也跑作爲__main__
的MyFolder/Folder2/foo2.py
(如你所說的評論可能會發生),那麼這將不會是因爲在以下進口工作:
from Folder1.foo1 import *
from Folder1.Subfolder1.subfoo1 import *
的Python顯然不識貨Folder1
(及其所有子文件夾或模塊),因爲您的新根文件夾爲Folder2
,並且只有在您運行__main__
文件的文件夾(或程序包)下才能從__main__
文件導入模塊或程序包。
您可以通過附加MyFolder
到sys.path
(即做類似於你已經做了什麼事),或通過以不同的方式設置你的項目解決這個問題,這是你的包的根文件夾下有一個setup.py
文件。我想說,最後一個選項實際上是處理Python包和模塊的最嚴肅的選擇,如果你不創建玩具程序。
檢查this example我爲我的一個項目創建的setup.py
。但是如果你對這個選項感興趣(如果你有時間的話,你應該),我會鼓勵你閱讀一篇關於如何用setup.py
文件創建一個項目的體面教程,並且我會試着去理解它是如何以及爲什麼的是有用的,等等。
關於__init__.py
文件。它們可能是空文件(但可以包含可運行的代碼和註釋),您可以將它們放在項目文件夾下,以指示Python將這些文件夾視爲Python包...我會再次鼓勵您閱讀一個(或多個)教程關於這個話題。
從Python 3.3開始,您不需要在您的文件夾下放置這些__init__.py
文件,以使它們被視爲軟件包。
因此,如果您使用的是Python 3以前的版本。3,並且您的項目文件夾下沒有包含__init__.py
,我的第一個解決方案可能不會工作(但我不能確定100%)...
是您的'main.py'唯一文件將會運行(如'__main__'),對吧? – nbro
是和不是,我已經創建了一個用於數據分析的lil工具箱,其中main.py中包含主要分析。不過,我也可以使用'foo2'作爲一個獨立的工具(取決於'foo1')。 – Tim
Sry,我不得不糾正我對一個錯字的評論。 – Tim