setup.py 中的 Python 包名称与 pip 名称
Posted
技术标签:
【中文标题】setup.py 中的 Python 包名称与 pip 名称【英文标题】:Python package name vs. pip name in setup.py 【发布时间】:2017-07-31 00:34:24 【问题描述】:当我在 setup.py
文件的 install_requires
条目中列出依赖项时,如何指定要安装给定的包,必须将不同的名称传递给 pip
而不是包名称?
例如,我可以使用pip
安装pyinterval
from PyPI,然后我可以通过from interval import interval, inf, imath
或类似方法在我的代码中使用它。有没有办法告诉 SetupTools pyinterval
实体“提供”interval
包或其他东西?
编辑:我找到了packaging glossary,它为我阐明了“分发包”和“导入包”之间的术语区别。在我的例子中,pyinterval
是分发包,它提供了interval
导入包。
【问题讨论】:
相关:***.com/questions/27308293/…。 PyPI 上的django-emoji
和 emoji
都提供要导入的 emoji
包,就像 PyPI 上的 pyinterval
和 interval
都提供要导入的 interval
包一样。
【参考方案1】:
您不需要告诉 setuptools 每个依赖项提供的“命令”是什么。您只需要按其名称安装软件包,即pyinterval
。由您决定哪个包提供哪个“命令”,在这种情况下,pyinterval
包提供了实际上是一个入口点的interval
“命令”(如下一段中详述)。
这个关于包注册其他包可以查询和使用的键的功能通常是通过入口点来实现的,你可以在下面的链接中阅读更多关于它的例子: http://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/creation.html#entry-points
总结一下,告诉 setuptools 你的库需要哪些包,你可以在 GitHub 中找到很多示例:
https://github.com/search?l=Python&o=asc&p=6&q=install_requires&ref=searchresults&s=indexed&type=Code&utf8=%E2%9C%93
检查例如 Flask 的: https://github.com/pallets/flask/blob/master/setup.py
【讨论】:
我不清楚您使用的“包”是什么意思。在我的示例中,包是pyinterval
,还是interval
?许多来源(例如learnpython.org/en/Modules_and_Packages)似乎将它混为一谈,至少表示两种不同的东西:pypi.python.org/pypi 表示pip install package
,要么是 PyPI 中的对象,要么是包含我们可以使用 import
加载的代码的目录。
我更新了答案以澄清在您的情况下,包是pyinterval
。 interval
是pyinterval
包提供的入口点。正如您提供的链接 (learnpython.org/en/Modules_and_Packages) 中所详述的那样,软件包是一个带有扭曲的目录。 pip 安装包的作用是从 PyPI(压缩目录)获取包并执行其setup.py
。你可以在这里阅读更多信息:pip.pypa.io/en/latest/reference/pip_install/#overview
感谢您的澄清。也许我的部分困惑是,在 PyCharm 中,如果我的 install_requires
条目中有 pyinterval
,并且我的一个代码文件有 from interval import interval
,它仍然会抱怨“项目要求中没有列出包'间隔'。 "所以我以为我做错了,但也许这只是 PyCharm 中的一个错误,没有注意到它已经满足了。以上是关于setup.py 中的 Python 包名称与 pip 名称的主要内容,如果未能解决你的问题,请参考以下文章
使用setup.py安装python包和卸载python包的方法
“python setup.py install”和“pip install”之间的区别
在 CMake 中使用 setup.py 构建 python 包