簡體   English   中英

如何讓setuptools安裝一個不在PyPI上的軟件包?

[英]How can I make setuptools install a package that's not on PyPI?

我剛剛開始使用setuptools和virtualenv。 我的包需要最新的python-gearman,只能從GitHub獲得。 PyPI上的python-gearman版本是舊版本。 Github源代碼是setuptools兼容的,即有setup.py等。有沒有辦法讓setuptools下載並安裝新版本,而不是在PyPI上查找並安裝舊版本?

僅供參考,新的python-gearman是http://github.com/mtai/python-gearman

關鍵是告訴easy_install可以下載包的位置。 在這種特殊情況下,可以在網址http://github.com/mtai/python-gearman/tarball/master找到它。 但是,該鏈接本身不起作用,因為easy_install只能通過查看URL將會得到什么。

通過將其更改為http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta,easy_install將能夠識別包名稱及其版本。

最后一步是將URL添加到包的dependency_links中,例如:

setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

現在,當您的軟件包正在安裝時,easy_install將發現可以從該URL下載“gearman 2.0.0beta”,並且如果您指定“gearman> = 2.0.0beta”,請高興地通過PyPI上的那個選擇它在你的依賴..

(通常情況下,完成此類操作的方法是在一個PyPI頁面上包含一個鏈接到可下載源;在這種情況下,如果gearman包的作者包含了如上所述的鏈接,那么你已經設置好了通常,人們使用'myproject-dev'標記開發版本然后人們使用'myproject> = somever,== dev'的要求,這樣如果沒有某個或更高的包,easy_install將嘗試檢查或下載該版本。)

使用pip時,您需要指定--process-dependency-links 請注意,已棄用依賴關系鏈接處理,將在以后的版本中將其刪除。

您可以使用pip install protocol+location[@tag][#egg=Dependency]格式直接從源代碼使用pip進行安裝。

混帳

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

水銀

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

BZR

pip install bzr+http://bzr.myproject.org/MyProject/trunk

支持以下協議: [+git, +svn, +hg, +bzr]

版本

@tag允許您指定要簽出的特定版本/標簽。

#egg=name允許您指定項目作為其他人的依賴項。

訂單必須始終為@tag#egg=name

私人存儲庫

您還可以通過將協議更改為SSH( ssh:// )並添加適當的用戶( git@ )來從私有存儲庫進行安裝:

git+ssh://git@github.com/username/my_private_repo

您還可以使用用戶名/密碼從私有存儲庫進行安裝。

git+https://<username>:<password>@github.com/<user>/<repo>.git

Github提供了創建可以循環的個人OAuth令牌的功能

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

requirements.txt用於指定項目依賴項:

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

這些不會隨包自動安裝,必須使用命令pip -r requirements.txt進行安裝。

包括需求文件

需求文件可以包含其他需求文件:

要求-Docs.txt的

sphinx
-r requirements-dev.txt

要求-dev.txt

some-dev-tool
-r requirements.txt

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

需求文件可以使用以下命令安裝setup.py指定的依賴項:

-e .

setup.py也可以使用與上面相同的語法從存儲庫安裝,但使用本答案中提到的dependency_links值。

參考文獻:

https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html

因為我不得不做同樣的事情,我找到了另一種方法來執行此操作,因為根據此評論pip--process-dependency-links計划在pip 19.0中刪除。

pip 18.1包括以下功能

允許將PEP 508 URL要求用作依賴項。

從PEP 508 的描述中,此類URL依賴關系的語法如下所示:

基於URL的最小查找:

pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686

所以在你的setup.py它看起來像

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

請注意,該鏈接是一個存檔文件,也可以是存儲庫的特定版本或分支,如本答案中所述 另外,請參閱與其他存儲庫主機一起使用的答案。

據我所知,更新依賴關系的最簡單方法是使用pip install -I . 從其目錄安裝包時。

Vanilla setuptools不支持直接從git存儲庫下載,但您可以使用該頁面中的一個Download Source鏈接,例如:

easy_install http://github.com/mtai/python-gearman/tarball/master

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM