Setuptools 安装库而不是它的包

Setuptools installing library instead of its packages

这是我的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(由于字符非法而无法导入),而不是我想要的包,models。我究竟做错了什么?已阅读设置工具 Quickstart 和各种相关问题,但仍然感到困惑。

Minimal reproducible example

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

setup.py/setup.cfg中定义的distribution name为整体包名,会保存在你环境的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(我想要的行为)。