一些有用的Python軟件包在pypi上被打破,唯一可接受的版本是版本控制系統中的特定版本。可以在setup.py
e.gPython包可以依賴於另一個Python包的特定版本控制修訂版嗎?
requires = 'svn://example.org/useful.package/[email protected]'
來表達?
一些有用的Python軟件包在pypi上被打破,唯一可接受的版本是版本控制系統中的特定版本。可以在setup.py
e.gPython包可以依賴於另一個Python包的特定版本控制修訂版嗎?
requires = 'svn://example.org/useful.package/[email protected]'
來表達?
你需要做兩件事情。首先,需要你想確切的版本,例如:
install_requires = "useful.package==1.9dev-r1234"
,然後包括dependency_links
設置指定在哪裏可以找到它:
dependency_links = ["svn://example.org/useful.package/[email protected]#egg=useful.package-1.9dev-r1234"]
注意,dependency_links
URL的版本#egg=
部分必須準確與您在install_requires
中指定的內容相符;這是將兩部分連接在一起的原因。
會發生什麼事是看到setuptools的鏈路上的#egg標籤並保存URL作爲封裝件的精確版本可用的下載網址。然後,當它稍後嘗試解決該需求時,它應該下載該精確的SVN URL。 (注意,然而,對於這個到真的工作,有針對性的SVN修訂版必須實際上建立一個名稱和版本的蛋,否則,你的依賴將在運行時失敗!所以,這真的只適用於你這取決於包使用在其默認的內部版本號SVN版本標記。)
如果你真的需要另一個包的一個不起眼的版本,而且也沒有辦法讓不與其他版本中,你可能想簡單地分發版本的包與自己的。如有必要,請將它放在您自己的名稱空間中,以確保您的版本是使用的版本。
可以釋放特定版本的包,但你必須在一起分發。沒有辦法用標準的Python自動下載它們。
但是,您可以使用擴建,並創建一個buildout.cfg,使得它能夠複製的環境。如果您使用擴展名如mr.developer,它可以檢出並安裝特定的修訂版。
http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer
我還沒有想出如何從setup.py
參考這一點,但pip
可以檢查出Python包的特定版本用一個簡單的需求文件。通過一個名爲requires.txt
的需求文件,pip install -r requires.txt
將安裝該文件中列出的所有軟件包(及其依賴關係)。
這是我的需求文件的一部分。以-e
開頭的行檢查版本控制(git,svn或mercurial)中包的特定版本(包括我的項目),並將它們安裝在可編輯的表單中。 pip freeze
以此格式列出所有已安裝的軟件包。
requires.txt
:
-e hg+file:///home/me/my-private-project#egg=myproject
-e hg+http://bitbucket.org/ianb/[email protected]#egg=WebOb
-e svn+http://svn.sqlalchemy.org/sqlalchemy/[email protected]#egg=SQLAlchemy
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/[email protected]#egg=z3c.saconfig
## The following requirements were added by pip --freeze:
APScheduler==1.01
simplejson==2.0.9
... (many more)
你真的想擁有你的依賴的編輯形式? – 2012-06-01 19:06:53
有時候我會的。 – joeforker 2012-06-04 15:11:49
是的,它沒有/真的/在普通情況下工作......我現在只是使用點子。 – joeforker 2010-03-15 20:55:18
不應該「find_links」實際上是「dependency_links」嗎? – 2010-12-19 12:58:39
謝謝,加百列。我修復了它。 – 2010-12-20 21:22:09