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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:10