You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Poetry管理的Python项目中按工作目录路径导入模块

解决Poetry项目中导入模块的ModuleNotFoundError问题

针对你的场景,有几种可行的解决方案,按推荐程度排序:

方法1:使用Poetry可编辑安装+run命令(推荐)

这是最符合Poetry工作流的方式,能让Python自动识别你的项目模块:

  1. 先以可编辑模式安装项目:
poetry install --editable
  1. 用Poetry的run命令执行脚本:
poetry run python scripts/main.py

原理:poetry install --editable会把项目根目录加入虚拟环境的Python路径,poetry run会确保执行脚本时使用这个配置好的环境。

方法2:手动添加项目根目录到sys.path

如果不想调整项目结构,可在scripts/main.py开头添加代码,手动让Python找到上层目录:

import sys
from pathlib import Path

# 将项目根目录(scripts的父目录)添加到Python搜索路径
sys.path.append(str(Path(__file__).parent.parent))

from module import my_function

原理:Path(__file__).parent.parent定位到my_project/目录,把它加入sys.path后,Python就能找到module.py了。

方法3:调整为Poetry标准项目结构(适合长期维护)

规范的Poetry项目会把业务代码放在与项目同名的子包中,调整后的结构如下:

my_project/
├── pyproject.toml
├── my_project/
│   ├── __init__.py
│   └── module.py
└── scripts/
    └── main.py

然后修改scripts/main.py的导入语句:

from my_project.module import my_function

执行poetry install后,用poetry run python scripts/main.py即可正常导入。这种结构更利于后续扩展模块、打包发布。

为什么原来的方法失败?

当你直接运行python scripts/main.py时,Python会自动将scripts/目录加入搜索路径(sys.path),但项目根目录my_project/不在其中,所以找不到module.py。添加__init__.py只是将目录标记为Python包,但不会自动让Python向上搜索父目录。

内容的提问来源于stack exchange,提问作者Matt Peng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:50:17