python绝对导入包ModuleNotFoundError错误?

python ModuleNotFoundError error in absolute import package?

我有这样的文件结构。

.
└── E:\test
    ├
    ├── M2
    │   └── demo.py
    |       
    │       
    └── MA
    │    └── MA1
    │    │   ├── __init__.py
    │    │   │
    │    │   └── ma1.py
    │    ​│__ __init__.py

ma1.py

def foo():
    print("I am here")

demo.py

from MA.MA1.ma1 import foo
print(foo())

我用的是python3.8和win10系统
在 cmd 中,我尝试 cd test 目录和 python .\M2\demo.py,它显示错误?

PS E:\test> python .\M2\demo.py    
Traceback (most recent call last):
  File ".\M2\demo.py", line 1, in <module>
    from MA.MA1.ma1 import foo
ModuleNotFoundError: No module named 'MA'

python 解释器不会在 test\ 目录中搜索模块,因为您从 test\M2\ 执行脚本。您可以通过将目录“test”添加到 PYTHONPATH 变量来告诉 python 从 test\ 开始搜索。 对于 windows 命令行:

set PYTHONPATH=%PYTHONPATH%;E:\test

对于linux终端:

export PYTHONPATH=path_to_test_dir

记住两件事:

1- Python 搜索 sys.path 以查找模块和包。

2- 当您 运行 您的脚本时,只有 它的目录将被添加到 sys.path。所以你必须手动添加MA所在的目录。在 demo.py:

中执行以下操作
import sys
sys.path.insert(0, r'E:\test')

from MA.MA1.ma1 import foo
print(foo())

或者您可以设置 PYTHONPATH 变量。