Python 包在调用入口点时引发 ModuleNotFoundError,除非以可编辑模式安装
Python package raises ModuleNotFoundError on calling an entry-point except if installed in editable mode
我有一个 Python 包,起初看起来安装得很好,但是当调用其中一个入口点时会引发 ModuleNotFoundException
。该模块在其他方面被发现与来自交互式解释器的 import package
以及 python -m package.etc
都很好。 但是 如果我尝试直接调用入口点(类似 python -m package.etc.main
),它会引发一个 AttributeError
说模块没有属性 __path__
.
我可以看到包裹pip list
。
该项目目前使用“模板”pyproject.toml
并且仅 setup.cfg
设置,但行为基本相同(回溯看起来略有不同但错误相同)在 pyproject.toml
上使用 setup.py
,既使用 pip
,也使用 setup.py
直接调用。项目结构为:
package
├── __init__.py
├── cli
│ ├── __init__.py
│ ├── entry.py
├── file.py
如果在虚拟环境中执行此操作,我会得到与在用户空间 (--user
) 安装时执行此操作相同的行为。
修改环境变量${PYTHONPATH}
解决了问题,在可编辑模式下安装包就可以了。
原来问题是我遇到了类似的问题:
[options]
packages = find:
[options.packages.find]
include =
README.md
在我的 setup.cfg
中,似乎 include
的声明是独占的,这导致该包未包含在安装中,但在以可编辑模式安装时仍然有效(大概因为可编辑模式只会设置某种链接或将源代码目录附加到某些路径。
我有一个 Python 包,起初看起来安装得很好,但是当调用其中一个入口点时会引发 ModuleNotFoundException
。该模块在其他方面被发现与来自交互式解释器的 import package
以及 python -m package.etc
都很好。 但是 如果我尝试直接调用入口点(类似 python -m package.etc.main
),它会引发一个 AttributeError
说模块没有属性 __path__
.
我可以看到包裹pip list
。
该项目目前使用“模板”pyproject.toml
并且仅 setup.cfg
设置,但行为基本相同(回溯看起来略有不同但错误相同)在 pyproject.toml
上使用 setup.py
,既使用 pip
,也使用 setup.py
直接调用。项目结构为:
package
├── __init__.py
├── cli
│ ├── __init__.py
│ ├── entry.py
├── file.py
如果在虚拟环境中执行此操作,我会得到与在用户空间 (--user
) 安装时执行此操作相同的行为。
修改环境变量${PYTHONPATH}
解决了问题,在可编辑模式下安装包就可以了。
原来问题是我遇到了类似的问题:
[options]
packages = find:
[options.packages.find]
include =
README.md
在我的 setup.cfg
中,似乎 include
的声明是独占的,这导致该包未包含在安装中,但在以可编辑模式安装时仍然有效(大概因为可编辑模式只会设置某种链接或将源代码目录附加到某些路径。