Setuptools安装库而不是其软件包

2024-06-25 23:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的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。我做错了什么?已经阅读了setuptoolsQuickstart和各种相关问题,但仍然感到困惑

Minimal reproducible example


Tags: installnamefrompyimportapitreeinit
1条回答
网友
1楼 · 发布于 2024-06-25 23:30:45

所以这个问题只是因为我的误解,但我想我应该在回答中澄清一下,因为这里有一个区别(对我来说)与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(我想要的行为)

相关问题 更多 >