我的项目有如下结构的文件夹:
main
-folder 1
-file1.py
-folder 2
-file2.py
file1和file2都有类。当我尝试from main.folder1.file1 import class1
时,它失败了,说"没有名为main的模块"。我做错了什么,我应该如何导入它?
您必须首先通过包含__init__.py
来创建模块在主文件夹的层次结构相同的根目录中,并在其他子文件夹中创建__init__.py
,使它们作为模块可访问。下面是官方文档中的一个示例结构。请注意,在每个级别上,您必须以类似的方式包含__init__.py
。
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
你的结构可以像这样:
main/
__init__.py
folder1/
__init__.py
file1.py
folder2/
__init__.py
file2.py
然后你可以像下面这样把路径附加到顶层的模块。您可以在根目录的__init__.py
中设置它。
sys.path.append (path.dirname (path.dirname (path.abspath (文件))))
然后尝试访问from folder1.file1 import class1
。这应该能解决你的问题。
要进一步了解您的问题,请阅读modules
以及如何通过参考文档包含relative imports
。
在python中,你必须通过在每个目录(包括根目录)中添加一个名为__init__.py
的文件来声明每个文件夹为一个模块。该文件可以为空。
如果上面有一个级别,则可以这样做。
import sys
sys.path.insert(0,'../folder1')
sys.path.insert(0,'../folder2')
import function1
import function2
....
运行前3行后,将这些文件夹添加到工作目录中。然后,您可以在这些文件中导入函数,就像它们已经在文件中一样。
如果文件夹在同一层,执行
import sys
sys.path.insert(0,'folder1')
sys.path.insert(0,'folder2')
import function1
import function2
....