【发布时间】:2023-04-03 09:45:02
【问题描述】:
我有这个文件结构:
/home/test
├── dirA
│ └── ClassA.py
└── dirB
└── Main.py
文件中包含以下内容:
ClassA.py:
class ClassA:
def __str__(self):
return 'Hi'
Main.py:
from dirA.ClassA import ClassA
class Main:
def main():
a = ClassA()
if __name__ == '__main__':
Main.main()
我把当前目录改成:
$ cd /home/test/dirB
这行得通:
$ PYTHONPATH=/home/test python Main.py
这不是:
$ python Main.py
Traceback (most recent call last):
File "Main.py", line 1, in <module>
from dirA.ClassA import ClassA
ModuleNotFoundError: No module named 'dirA'
在 Main.py 中添加这行没有效果:
import os, sys
# Get the top level dir.
path = os.path.dirname(os.path.dirname(__file__))
sys.path.append(path)
模块仍然找不到!有很多类似的问题,但我无法以编程方式完成这项工作(跳过PYTHONPATH
env var。)我知道目录不是模块,文件是,但这在 PyCharm 中有效(IDE 修复了PYTHONPATH
?)
【问题讨论】:
-
您是在拨打
from dirA.ClassA import ClassA
之前还是之后添加os.path.append(path)
? -
之前。我将它插入到
if
和对Main.main()
的调用之间。 -
哦,我知道你的问题了。你是说
from ...
甚至在 Class 实例调用之前就被调用了? -
是的。您需要更改您的
sys.path
在您尝试导入可能依赖于该路径的任何内容。您是否从导入的文件中调用某些内容是无关紧要的 - 导入本身在此之前会失败很多。 -
我试图把它放在上面并检查它在
from
导入之前是否被调试器调用。还是不行。
标签:
python-3.x
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ModuleNotFoundError:即使在破解 sys.path() 之后,python 3 中也没有命名模块 - Python技术站