如果你运行你的应用程序从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