如何在非Poetry管理的脚本中导入Poetry项目内的模块?
临时从外部脚本导入Poetry项目内模块的最简方案
针对你的场景,不需要额外创建Poetry项目或安装模块,只需要在script.py里临时调整Python的模块搜索路径,就能直接导入目标模块。以下是具体实现:
1. 修改script.py的导入代码
替换你原来的错误导入代码,添加路径处理逻辑后再导入目标模块:
import sys from pathlib import Path # 定位到modules-project的根目录(scripts与modules-project为同级目录) modules_project_root = Path(__file__).parent.parent / "modules-project" # 将该目录添加到Python的模块搜索路径 sys.path.append(str(modules_project_root)) # 现在可以正常导入目标模块 from modules.some_client import YourClass, your_function # 替换为你需要的类/函数
关键说明:
- 你原来的
import modules-project.modules.some_client.py存在两处错误:模块名不能包含横杠,且导入时不需要加.py后缀 - 通过
sys.path.append把Poetry项目根目录加入搜索路径后,Python就能识别到里面的modules包(该目录下的__init__.py已标记为Python包)
2. 确保依赖生效
如果some_client.py依赖Poetry管理的第三方包,运行script.py时要使用Poetry的虚拟环境解释器:
# 方式1:进入modules-project目录用poetry run执行 cd modules-project poetry run python ../scripts/script.py # 方式2:直接指定虚拟环境的Python路径(虚拟环境默认在modules-project/.venv下) ./modules-project/.venv/bin/python ./scripts/script.py
这个方案是纯临时过渡用的,等后续完成代码迁移后,直接删掉sys.path相关的代码即可。
内容的提问来源于stack exchange,提问作者bmitc
相关产品推荐
相关产品推荐

