Poetry本地包导入失败:Module not found问题求助
解决Poetry导入本地包ModuleNotFoundError问题
问题复现
项目结构
MyProject结构:
MyProject myproject __init__.py tests __init__.py import_test.py poetry.lock pyproject.toml
待导入的My_Package结构:
My_Package my_package __init__.py tests __init__.py my_package.py # sum函数存放于此 poetry.lock pyproject.toml
操作与报错
通过poetry add --editable ../My_Package添加本地依赖后,以下两种导入方式均失败:
from my_package.tests import sum sum(1+1)
import My_Package My_Package.tests.sum(1+1)
核心问题与修复步骤
1. 修正包的代码结构(关键)
tests目录是测试专用目录,不会被Poetry打包到安装的包中,业务代码不能放在这里。调整My_Package结构:
My_Package my_package __init__.py utils.py # 将sum函数移至此处 tests __init__.py test_utils.py # 测试代码保留在tests目录 poetry.lock pyproject.toml
在my_package/utils.py中编写sum函数:
def sum(a, b): return a + b
2. 检查My_Package的pyproject.toml配置
确保pyproject.toml中的包名称和路径配置正确,示例:
[tool.poetry] name = "my_package" # 必须与实际包目录名一致 version = "0.1.0" description = "" authors = ["Your Name <your@email.com>"] # 确保packages字段正确指向代码目录(无此配置则添加) packages = [{ include = "my_package" }] [tool.poetry.dependencies] python = "^3.8" [tool.poetry.dev-dependencies] pytest = "^7.0" [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"
3. 正确导入包
在MyProject的tests/import_test.py中,使用正确的导入路径:
# 方式1:直接导入函数 from my_package.utils import sum print(sum(1, 1)) # 注意传入两个独立参数,而非1+1 # 方式2:先导入模块再调用 import my_package.utils print(my_package.utils.sum(1, 1))
4. 验证虚拟环境与安装状态
- 进入MyProject的虚拟环境:
poetry shell - 检查包是否正确安装:
pip list | grep my_package,确认路径指向本地../My_Package - 运行测试脚本:
python tests/import_test.py
额外注意事项
- 导入时不要使用包的根目录名
My_Package,Poetry安装后识别的是pyproject.toml中name字段指定的名称(即my_package) - 修改My_Package结构后,重新运行
poetry install更新依赖
内容的提问来源于stack exchange,提问作者TenukiPy
相关产品推荐
相关产品推荐

