Python项目无法使用绝对路径导入模块问题求助
解决Python绝对导入ModuleNotFoundError的问题
咱先搞清楚为啥你用from test.b import *会报错:当你直接运行a.py的时候,Python会把**当前脚本所在的目录(也就是test目录)**添加到sys.path里,而不是test的父目录。这时候Python找不到名为test的包——因为它不在搜索路径里呀!
下面给你几个靠谱的解决方案,按推荐程度排序:
1. 从项目根目录用-m参数运行脚本(最推荐)
假设你的项目结构是这样的:
your_project/ └── test/ ├── __init__.py ├── a.py └── b.py
你需要先进入your_project目录,然后执行:
python -m test.a
这个命令会让Python把your_project目录加入到sys.path,这样test就会被识别成一个合法的包,你的绝对导入语句from test.b import *就能正常工作了。这也是Python官方推荐的包运行方式,完全符合模块化的最佳实践。
2. 手动添加项目根目录到sys.path(应急用,不推荐长期用)
如果暂时没法从根目录运行,可以在a.py的最顶部加上这段代码:
import sys import os # 获取当前脚本的绝对路径,再往上跳一级(找到test的父目录) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 现在再执行绝对导入就没问题了 from test.b import *
不过这种方法有点“硬编码”的味道,移植性差——如果项目目录结构变了,这段代码可能就失效了,所以只适合临时应急。
3. 设置PYTHONPATH环境变量
你可以通过设置环境变量PYTHONPATH,把项目根目录添加到Python的搜索路径里:
Linux/macOS终端
export PYTHONPATH=/path/to/your_project python test/a.py
Windows命令提示符(cmd)
set PYTHONPATH=C:\path\to\your_project python test\a.py
Windows PowerShell
$env:PYTHONPATH = "C:\path\to\your_project" python test\a.py
设置完之后,Python会自动把PYTHONPATH里的目录加入sys.path,同样能识别test包。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

