使用Poetry安装脚本后出现ModuleNotFoundError及执行异常问题问询
问题1:执行project命令自动进入内层project目录是否符合预期
原因
该行为不符合Poetry项目脚本的默认预期,核心原因是你当前执行的project命令并非当前Poetry项目生成的启动脚本:
你在pyproject.toml中配置的脚本名为algoex,Poetry只会生成名为algoex的可执行命令,不会生成project命令。你能执行project命令说明你的Shell环境中存在提前定义的同名别名/函数,功能就是进入名为project的目录,和当前Python项目完全无关。
解决方案
- 检查你的Shell配置文件(如
.bashrc/.zshrc),删除名为project的别名或函数 - 直接使用配置的正确脚本名
algoex启动项目,不会出现自动切换目录的问题 - 如果确实需要用
project作为启动命令,可将pyproject.toml中[tool.poetry.scripts]下的algoex改为project,重新执行poetry install即可。
问题2:内层project目录执行命令抛出ModuleNotFoundError: No module named 'db'
原因
报错核心有两点:
- 你使用的
project命令本身是错误的Shell别名/函数,不是项目的Python启动脚本 - 即使使用正确的
algoex命令启动,你main.py中的导入写法不符合Python包的导入规则:from db import DB会将db作为顶层模块搜索,不会主动搜索project包下的db模块,因此无法找到对应文件。
解决方案
- 先修正
main.py的导入写法,二选一即可:- 推荐使用绝对导入:
from project.db import DB - 也可以使用包内相对导入:
from .db import DB
- 推荐使用绝对导入:
- 统一使用
algoex命令启动项目,无论在根目录还是内层project目录下执行均可正常加载模块。
内容的提问来源于stack exchange,提问作者edmamerto
相关产品推荐
相关产品推荐

