这是我的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和各种相关问题,但仍然感到困惑。
最小可复制示例
所以这个问题只是由于我的误解,但我想我应该在回答中澄清它,因为这里有一个区别(对我来说(与Setuptools
文档不太清楚。
setup.py
/setup.cfg
中定义的分发名称是整个包名称,它将保存在环境的site-packages
目录中,并由pip freeze
输出。它不可进口。有效名称在PEP 508中定义。例如,它们可能包含破折号,这在进口包装中虽然不违法,但受到PEP 8的劝阻。(不能以标准方式导入,因为Python将破折号解释为减号。(
setup.py
/setup.cfg
中定义的导入包(或模块(可以在Python中导入。因此,在我的案例中,安装了internals-models
,但我使用models
包的方式是通过import models
(我想要的行为(。