【问题标题】:Setuptools installing library instead of its packagesSetuptools 安装库而不是其包
【发布时间】:2021-05-10 13:16:04
【问题描述】:

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

Minimal reproducible example

【问题讨论】:

  • 尝试将 setup.py 文件移动到模型文件中?
  • 不,没有帮助
  • 能否请您提供一个 Github minimal reproducible example repo 进行实验?
  • @phd 完成。将 setup.py 更改为 setup.cfg 以简化但其他方面相同。提前感谢您的帮助!
  • git clone https://github.com/lordgrenville/internal-models.git; pip install -e internal_models/ 对我有用。将编辑 repo 以包含 setup.py

标签: python setuptools setup.py


【解决方案1】:

所以这个问题只是由于我的误解,但我想我会在答案中澄清它,因为这里有一个区别(对我来说)与 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 中定义的import packages(或modules)是您可以在 Python 中导入的。所以在我的例子中,internals-models 正在安装,但我使用models 包的方式是通过import models(我想要的行为)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 2014-06-28
    • 2014-01-25
    • 2019-08-05
    • 2010-12-31
    • 2018-07-09
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多