python从不同的文件夹导入类



我的项目有如下结构的文件夹:

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
....

相关内容

  • 没有找到相关文章