python-3.x 尝试导入另一个文件夹中的类时,(工作)包中的文件出现ModuleNotFoundError

cig3rfwq  于 2022-11-19  发布在  Python
关注(0)|答案(1)|浏览(112)

摘要:
导入类时(在下面的示例中为c2)(folder1),其中导入的类(c2)导入类(c1)来自同一软件包(folder1),则程序(file2)会在c2上导入c1时引发ModuleNotFoundError,即使导入已在包中运行。
延伸:
该示例具有以下文件结构

project/
├── folder1/
│   └── __init__.py
│   └── file1.py
│   └── file2.py
└── folder2/
    └── file3.py

其中folder1中的文件包含以下类。
__init__.py保留为空。
(请注意,file2.py上没有导入错误)
第一次
folder2中的文件导入类c2

# file3.py
import sys
sys.path.append('../')  # to recognize folder1 as a package

from folder1.file2 import c2

但当我尝试运行file3.py时,在file2.py中导入c1会引发ModuleNotFoundError

$ python3 file3.py 
Traceback (most recent call last):
  File "/home/user/project/folder2/file3.py", line 4, in <module>
    from folder1.file2 import c2
  File "/home/user/project/folder2/../folder1/file2.py", line 1, in <module>
    from file1 import c1
ModuleNotFoundError: No module named 'file1'

请注意,我可以使用类似的导入from folder1.file1 import c1file3.py上导入c1,但不能使用c2
(Of当然,这是我发现这个问题的实际类的抽象,实际的文件夹布局很重要,但问题是一样的。)
如何在folder2/file3.py上导入c2
我尝试在file3上的c2之前导入c1,还尝试导入c1(和/或c2)在folder1/__init__.py中但没有工作,我也试着把folder2/做成一个包,并在它的__init__.py中导入,但是没有成功。(可能)可以简单地连接file1file2,或者尝试为file1创建一个包,但我相信我在导入上做错了什么,必须有一个简单的方法来解决这个问题。

fnx2tebb

fnx2tebb1#

将相同的正确完整路径添加到file2.py中的file1.py

from folder1.file1 import c1

file2.py试图导入file1.py时,它试图从('../')导入,其中没有file1.py,只有/folder1/folder2
如果你使用的是python 3.3+,你可以删除__init__.py

相关问题