2017-03-09 100 views
1

當我在setup.py文件的install_requires條目中列出依賴關係時,如何指定爲了安裝給定包,必須將其他名稱傳遞給pip包裹名字?Python包名稱與setup.py中的pip名稱

例如,我可以使用pip來安裝pyinterval from PyPI,然後我可以在我的代碼中使用from interval import interval, inf, imath或類似的代碼。有沒有辦法告訴SetupTools pyinterval實體「提供」interval包或什麼?

編輯:我找到了packaging glossary,這爲我澄清了「分發包」和「導入包」之間的術語差異。在我的情況下,pyinterval是分發包,它提供了interval導入包。

+0

相關:http://stackoverflow.com/questions/27308293/how-to-install-python-package-with-a-different-name-using-pip。 PyPI上的'django-emoji'和'emoji'都提供了一個'emoji'包來導入,就像PyPI中的'pyinterval'和'interval'一樣,它們都提供了一個'interval'包來導入。 –

回答

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

檢查例如瓶的: https://github.com/pallets/flask/blob/master/setup.py

+0

我不清楚你使用的「軟件包」的含義。在我的例子中,包是'pyinterval'還是'interval'?許多來源(例如http://www.learnpython.org/en/Modules_and_Packages)似乎將它混淆至少意味着2種不同的東西:https://pypi.python.org/pypi說'pip install package',或者PyPI中的對象,或者包含我們可以使用'import'加載的代碼的目錄。 –

+0

我更新了答案,以澄清在你的情況下,軟件包是'pyinterval'。 'interval'是'pyinterval'包提供的入口點。軟件包如您提供的鏈接(http://www.learnpython.org/en/Modules_and_Packages)中詳細介紹的那樣,帶有扭曲的目錄。 pip安裝一個包的過程是從PyPI(一個壓縮目錄)中取出一個包並執行它的'setup.py'。您可以在這裏閱讀更多信息:https://pip.pypa.io/en/latest/reference/pip_install/#overview –

+0

感謝您的澄清。也許我的一些疑惑是,在PyCharm中,如果我的'install_requires'條目中有'pyinterval',並且我的一個代碼文件有'from interval import interval',它仍然會抱怨'Package'interval'沒有列出項目要求「。所以我認爲我做錯了,但也許這只是PyCharm中的一個錯誤,沒有注意到它已經滿足了。 –