Poetry项目中子文件夹脚本无法导入本地包的问题
解决Poetry项目中子文件夹脚本导入本地包的问题
问题场景
你的run.py代码如下:
from abc import module1
当脚本和本地包处于同一根目录层级时(目录结构如下),从根目录执行python run.py能正常运行:
abc/ pyproject.toml abc/ module1.py __init__.py run.py
但把脚本移到scripts子文件夹后(目录结构如下),从根目录执行python scripts/run.py会报错No module named 'module1':
abc/ pyproject.toml abc/ module1.py __init__.py scripts/ run.py
解决方案
方法1:用Poetry管理环境运行脚本
在项目根目录执行以下命令,把本地包安装到Poetry虚拟环境:
poetry install
之后通过Poetry运行脚本,就能自动识别本地包路径:
poetry run python scripts/run.py
方法2:在脚本中手动添加项目路径
在scripts/run.py开头加入代码,把项目根目录添加到Python模块搜索路径:
import sys from pathlib import Path # 获取项目根目录(当前脚本所在文件夹的上级目录) project_root = Path(__file__).parent.parent sys.path.append(str(project_root)) # 之后正常导入本地包 from abc import module1
方法3:临时设置PYTHONPATH环境变量
运行脚本前,先把项目根目录添加到环境变量:
- Linux/macOS终端:
export PYTHONPATH=/你的项目绝对路径/abc python scripts/run.py
- Windows PowerShell:
$env:PYTHONPATH = "C:\你的项目绝对路径\abc" python scripts/run.py
内容的提问来源于stack exchange,提问作者Harry Stuart
相关产品推荐
相关产品推荐

