Python从父目录导入文件报错,求无需sys.path的简洁解决方案
解决方案
方法一:将目录转为Python包(推荐)
- 在你的
mypy根目录下新建一个空的__init__.py文件,目录结构变为:
mypy ├── __init__.py ├── test_fldr │ └── test.py └── user_funcs.py
- 在
test.py中保留相对导入语句:
from .. import user_funcs
- 必须从
mypy的父目录运行脚本,比如假设mypy放在D:\code下,打开命令行进入D:\code,执行:
python -m mypy.test_fldr.test
直接在test_fldr目录下运行python test.py会再次触发相对导入错误——此时test.py被当作顶级脚本,Python无法识别它的父包上下文。
方法二:重命名根目录避免冲突
你的根目录名mypy和第三方类型检查库mypy重名,导致Python优先导入了site-packages里的官方库而非你的本地文件。
- 把
mypy文件夹改个不冲突的名字,比如my_python_project,目录结构变为:
my_python_project ├── test_fldr │ └── test.py └── user_funcs.py
- 在
test.py中使用绝对导入:
from my_python_project import user_funcs
- 运行时可以从
my_python_project的父目录执行python -m my_python_project.test_fldr.test,或者把my_python_project的父目录加入Python的环境变量PYTHONPATH,这样直接运行test.py也能生效。
错误原因说明
- 相对导入报错:直接运行
test.py时,它是作为独立脚本执行,不属于任何包结构,Python无法解析..对应的父包。 - 绝对导入报错:根目录名与第三方库重名,Python优先加载了site-packages中的官方库,而非你的本地文件。
内容的提问来源于stack exchange,提问作者user22721509
相关产品推荐
相关产品推荐

