Python如何不使用sys.path实现跨目录导入自定义模块
Python跨目录导入模块规范解决方案
报错的核心根源是两个:
- 直接执行
test.py时,Python默认仅将test.py所在的notebooks目录加入模块搜索路径,无法识别上层的src目录- 相对导入仅支持包内模块导入场景,直接将
test.py作为顶层脚本执行时无法识别父级包结构
以下方案均无需修改sys.path,支持生产环境使用:
方案1:以模块模式运行脚本
保持test.py内导入语句为:
from App.src import loss
运行脚本时不要直接进入notebooks目录执行python test.py,而是回到App目录的上级目录,执行以下命令:
python -m App.notebooks.test
该命令会将当前执行目录自动加入Python的模块搜索路径,且将整个App作为顶层包加载,可正常识别目录结构。
方案2:将项目安装为第三方包(生产环境推荐)
在App目录的同级目录新建pyproject.toml配置文件,写入最基础的包配置:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-project-name" version = "0.1.0" packages = ["App", "App.src", "App.notebooks"]
之后在pyproject.toml所在目录执行命令:
# 本地开发用可编辑安装,修改代码后无需重新安装 pip install -e . # 生产环境直接正常安装即可 pip install .
安装完成后,你可以在任意位置、任意脚本内直接使用from App.src import loss导入模块,无路径限制。
方案3:IDE开发场景配置
如果是本地用PyCharm、VSCode等IDE开发,可以直接将App目录标记为源根目录(Sources Root),IDE运行脚本时会自动将该目录加入模块搜索路径,直接运行test.py即可正常导入,无需调整运行命令。
内容的提问来源于stack exchange,提问作者Ashwath Shetty
相关产品推荐
相关产品推荐

