Python包名称与setup.py中的pip名称的区别

7
当我在一个 setup.py 文件的 install_requires 条目中列出依赖项时,如何指定为了安装给定的包,必须传递不同的名称给 pip 而不是包名称?
例如,我可以使用 pip 安装 PyPI 上的 pyinterval,然后通过执行 from interval import interval, inf, imath 或类似的代码在我的代码中使用它。有没有一种方法告诉 SetupTools,pyinterval 实体“提供”了 interval 包或其他东西? 编辑: 我找到了 打包术语表,它为我澄清了“分发包”和“导入包”之间的术语差异。在我的情况下,pyinterval 是分发包,它提供了导入包 interval

相关:https://dev59.com/9l4d5IYBdhLWcg3wAOZw。在PyPI上,`django-emoji`和`emoji`都提供了一个名为`emoji`的包可供导入,就像`pyinterval`和`interval`在PyPI上都提供了一个名为`interval`的包可供导入。 - Ken Williams
1个回答

0

你不需要告诉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


1
我不清楚你使用“package”的含义。在我的例子中,是pyinterval还是interval?很多来源(例如http://www.learnpython.org/en/Modules_and_Packages)似乎将其混淆为至少两个不同的含义:https://pypi.python.org/pypi说“pip install package”,可以是PyPI中的对象,也可以是包含我们可以使用“import”加载的代码的目录。 - Ken Williams
我更新了答案,以澄清在您的情况下包是pyintervalinterval是由pyinterval包提供的入口点。正如您提供的链接(http://www.learnpython.org/en/Modules_and_Packages)中详细说明的那样,包是带有扭曲的目录。 Pip安装软件包时会从PyPI(压缩目录)获取软件包并执行其setup.py。您可以在此处阅读更多信息:https://pip.pypa.io/en/latest/reference/pip_install/#overview - Enrique Saez
谢谢澄清。也许我困惑的部分是,在PyCharm中,如果我在install_requires条目中有pyinterval,并且我的一个代码文件中有from interval import interval,它仍然抱怨“未在项目要求中列出包'interval'。”所以我以为我做错了,但也许这只是PyCharm中的一个bug,没有注意到它已经被满足了。 - Ken Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接