Python3.9存在__init__.py仍找不到模块,如何配置根路径导入规则
问题原因
Python搜索导入模块时会依次遍历sys.path中的所有路径,你直接运行boo/boo2/main.py时,Python默认会把当前执行脚本的所在目录/Users/okoo/Code/projectRoot/boo/boo2加入sys.path首位,项目根目录/Users/okoo/Code/projectRoot不在sys.path搜索范围内,因此无法识别boo作为顶层包,哪怕对应目录下存在__init__.py也无法完成导入。
根目录相对导入配置方法
以下是不同场景下的可行方案:
临时测试场景:手动指定PYTHONPATH环境变量
运行脚本前在命令行添加项目根目录到PYTHONPATH,示例命令(在项目根目录下执行):PYTHONPATH=$(pwd) python boo/boo2/main.py
该方案无需修改代码,仅单次运行生效。入口脚本适配场景:动态添加根目录到sys.path
在main.py所有导入语句的最开头添加以下代码,自动计算项目根目录并加入搜索路径:import sys from pathlib import Path # 按脚本所在层级向上跳转至项目根目录,此处main.py在boo/boo2下,向上跳3层到达根目录 project_root = Path(__file__).parent.parent.parent.resolve() sys.path.insert(0, str(project_root))配置完成后即可正常使用根目录相对路径导入。
开发环境长期使用方案:安装为开发模式包
- 在项目根目录下新建
pyproject.toml配置文件,写入基础配置:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your_project" version = "0.1.0"- 在项目根目录下执行命令:
pip install -e .
该命令会将项目根目录永久加入Python的可搜索路径,所有项目内的Python文件都可以直接使用根目录相对路径导入,无需额外配置。
- 在项目根目录下新建
IDE开发适配:标记源码根目录
如果你使用PyCharm/VSCode等IDE开发,可以直接将项目根目录标记为「Sources Root」(PyCharm),或在VSCode的settings.json中配置python.analysis.extraPaths参数添加项目根目录,IDE运行代码时会自动将根目录加入sys.path,消除导入报错提示。
内容的提问来源于stack exchange,提问作者OLIVER.KOO
相关产品推荐
相关产品推荐

