Setuptools 安装库而不是它的包

问题描述

这是我的 tree(简化版):

└── internal_models
    ├── models
    │   ├── __init__.py
    │   └── api
    │       ├── my_code.py
    └── setup.py

还有我的setup.py

from setuptools import setup

setup(name='internal-models',version='0.0.2',description='models package',packages=["models"],zip_safe=False,install_requires=[])

当我使用 pip install .python setup.py build 安装时,Setuptools 会安装 internal-models(由于非法字符而无法导入),而不是我想要的包,{{1} }.我究竟做错了什么?已阅读 setuptools Quickstart 和各种相关问题,但仍然感到困惑。

Minimal reproducible example

解决方法

所以这个问题只是由于我的误解,但我想我会在答案中澄清它,因为这里有一个区别,从 Setuptools 文档中(对我来说)不太清楚。

>

setup.py/setup.cfg 中定义的发行版名称是整个包的名称,它将保存在您环境的site-packages目录中,由pip freeze。它不可导入。有效名称在 PEP 508 中定义。例如,它们可能包含破折号,在导入包中虽然不违法,但 PEP 8 不鼓励这样做。(它 can't be imported in the standard way,因为 Python 将破折号解释为减号.)

setup.py/setup.cfg 中定义的导入包(或模块)是您可以在 Python 中导入的内容。因此,就我而言,internals-models 正在安装,但我使用 models 包的方式是通过 import models(我想要的行为)。