【问题标题】:ModuleNotFoundError: No module named in python 3 even after hacking sys.path()ModuleNotFoundError:即使在破解 sys.path() 之后,python 3 中也没有命名模块
【发布时间】: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