ModuleNotFoundError:即使在破解 sys.path() 之后,也没有在 python 3 中命名的模块

Lau*_*ent 5 python-3.x

我有这个文件结构:

/home/test
         ??? dirA
         ?   ??? ClassA.py
         ??? dirB
             ??? Main.py
Run Code Online (Sandbox Code Playgroud)

文件中有以下内容:

类A.py

class ClassA:
    def __str__(self):
        return 'Hi'
Run Code Online (Sandbox Code Playgroud)

主要.py

from dirA.ClassA import ClassA

class Main:

    def main():
        a = ClassA()

if __name__ == '__main__':
    Main.main()
Run Code Online (Sandbox Code Playgroud)

我将当前目录更改为:

$ cd /home/test/dirB
Run Code Online (Sandbox Code Playgroud)

这有效:

$ PYTHONPATH=/home/test python Main.py
Run Code Online (Sandbox Code Playgroud)

这不会:

$ 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'
Run Code Online (Sandbox Code Playgroud)

在 Main.py 中添加此行无效:

import os, sys
# Get the top level dir.
path = os.path.dirname(os.path.dirname(__file__)) 
sys.path.append(path)
Run Code Online (Sandbox Code Playgroud)

模块还是找不到!有很多类似的问题,但我无法以编程方式完成这项工作(跳过PYTHONPATHenv var。)我知道目录不是模块,文件是,但这在 PyCharm 中有效(IDE 是否正在修复PYTHONPATH?)

zwe*_*wer 5

sys.path在尝试加载可能依赖于更改路径的任何包之前,您需要确保已经更改了您的程序包 - 否则您的脚本将在遇到 和import语句时失败。换句话说,请确保您的Main.py开头为:

import os
import sys

path = os.path.join(os.path.dirname(__file__), os.pardir)
sys.path.append(path)

from dirA.ClassA import ClassA
Run Code Online (Sandbox Code Playgroud)

确保最后一个 import 语句在更改后的路径上运行。