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

如何使通过pip安装的Poetry打包脚本正常识别本地导入?

解决Poetry打包后本地导入失败的问题

问题原因

直接运行python src/scripttest.py时,Python会自动把脚本所在的src目录加入模块搜索路径,因此能直接导入同级的importantimport模块。但通过pip安装后,src目录被放到site-packages下,此时Python的模块搜索路径是site-packages,而非site-packages/src,所以直接import importantimport会找不到模块。

解决方案

方案1:修改导入语句为绝对导入

无需调整项目结构,直接修改src/scripttest.py的导入代码:

from src.importantimport import data
def main():
    print(data)

安装后,src作为顶层模块存在于site-packages中,这样的绝对导入能正确找到同级的importantimport模块。

方案2:调整为规范的Python包结构(推荐)

这种方式更符合Python包的标准结构,避免后续出现其他导入问题:

  1. 调整项目结构,将src下的文件放入以包名命名的子目录,并添加__init__.py:
├── pyproject.toml
├── README.md
└── src
    └── scripttest
        ├── __init__.py
        ├── importantimport.py
        └── scripttest.py
  1. 修改pyproject.toml的配置:
name = "scripttest"
version = "0.1.0"
description = ""
authors = []
packages = [ 
    { include = "scripttest", from = "src" }
]

[tool.poetry.dependencies]
python = "^3.10"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.poetry.scripts]
scripttest = 'scripttest.scripttest:main'
  1. 修改src/scripttest/scripttest.py的导入方式(二选一即可):
  • 相对导入:
from .importantimport import data
def main():
    print(data)
  • 绝对导入:
from scripttest.importantimport import data
def main():
    print(data)

调整完成后重新执行pip install .,运行scripttest即可正常输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:45:37