使用pipx安装含入口点的Python包时遇ModuleNotFoundError问题
问题原因及解决方案
核心原因1:包搜索路径配置错误
你在[tool.setuptools.packages.find]里设置的where = ["energymonitor"]是错误的。这个参数的作用是告诉setuptools去哪里搜索Python包,而非指定要包含的包名。你的energymonitor包本身就在项目根目录下,应该让setuptools从项目根目录(.)开始搜索;否则setuptools只会去energymonitor目录下找子包,不会把energymonitor本身作为顶层包打包进去,最终导致安装后系统找不到该模块。
核心原因2:静态资源文件配置错误
[tool.setuptools.package-data]下的键必须是包名,而非目录名。你写的data = ["data/*"]无法正确关联到energymonitor包下的data目录,正确写法应该用包名energymonitor作为键。
修正后的project.toml关键配置
[build-system] requires = ["setuptools>=68.0"] build-backend = "setuptools.build_meta" [project] name = "energy-monitor" version = "0.0.1" ... [tool.setuptools.packages.find] where = ["."] # 改为从项目根目录搜索包 [tool.setuptools.package-data] energymonitor = ["data/*"] # 键改为包名 [project.scripts] energy-monitor = "energymonitor.main:main"
验证步骤
- 保存修改后的
project.toml - 清理之前的构建产物:删除
dist/目录(如果存在) - 重新构建包:
python -m build - 卸载已安装的错误版本:
pipx uninstall energy-monitor - 重新安装修正后的包:
pipx install path/to/energy-monitor-0.0.1.tar.gz - 终端执行
energy-monitor测试是否正常运行
你也可以先检查构建后的归档文件内容,确认energymonitor包已被正确包含:
tar tf dist/energy-monitor-0.0.1.tar.gz
输出里应该能看到energymonitor/__init__.py、energymonitor/main.py以及energymonitor/data/下的文件。
内容的提问来源于stack exchange,提问作者Mattia Silvestri
相关产品推荐
相关产品推荐

