我想製作一個包以取決於特定的版本範圍,例如>= 0.5.0, < 0.7.0
。是否有可能在install_requires
選項中,如果是這樣的話應該如何?如何在install_requires(setuptools,distribute)中指定版本範圍
回答
根據the documentation,您的語法應該正常工作。該文件指出:
setuptools
和pkg_resources
使用共同的語法,用於指定項目的需要的依賴。此語法由一個項目的PyPI名稱組成,可選地在方括號後跟隨逗號分隔的「extras」列表,可選地後跟逗號分隔的版本說明符列表。版本說明符是其中一個運算符<,>,< =,> =,==或!=,後跟版本標識符。
的文件給出了一個簡單的例子是這樣的:
docutils >= 0.3
# comment lines and \ continuations are allowed in requirement strings
BazSpam ==1.1, ==1.2, ==1.3, ==1.4, ==1.5, \
==1.6, ==1.7 # and so are line-end comments
擴大後,如果你希望你的包需要一個版本的docutils
大於0.3的版本,但低於0.5的版本,如代碼這將工作:
docutils >= 0.3, <=0.5
兩個額外的筆記。
- 該文檔還指出冗餘/重疊的相關性規範將在內部結合,使
docutils >= 0.3, >=0.2
將被組合成docutils >= 0.3
。 - 另外,請注意指定相沖突的版本號,其中"is meaningless and may therefore produce bizarre results."例如,我不知道你爲什麼會,但不要使用這個:
docutils >= 0.3, <=0.2
,因爲這是不可能的。
好的答案,但讓我困惑的是,逗號有時候意味着**或**,有時**和**:精確版本規範清單中明確指出「1.1或1.2或...」,並且結合了> = 0.3 ,> = 0。2'只是'> = 0.2'只有這個意義。但是'> = 0.3,<= 0.5'或者你的關於矛盾版本規範的段落需要用逗號來表示**和**。 – zpea 2012-07-21 22:34:58
建立在@zpea的問題上:有沒有什麼辦法來定義多個版本的範圍?例如'(> = 1.0 AND <2) OR (> = 2.7 AND <2.9) OR (> = 4)' – stefanfoulis 2015-08-04 13:41:31
文檔說,> 1,> 2會變成> 1,但如您所說,變爲> 2會更有意義。有人知道爲什麼 – 2017-07-18 08:33:53
對非自願的β測試謹慎。程序包維護人員有時會在不發出警告的情況下向普通用戶發佈不兼容,不完整或破壞的a,b和c版本。下一次在新的virtualenv中運行setup.py時,您可能會拉下其中一個有毒雞蛋,突然您的程序將會中斷。
爲了減輕這種風險,不要使用樣式聲明,它具有純數字上限。 <0.4
仍然承認版本0.4a0,0.4a1,0.4b0,0.4c3等。相反,當您編寫install_requires時,請使用<0.4a0
的上限,如foo >=0.3, <0.4a0
。
當setuptools的做什麼意外,使用verlib你的版本比較建模嘗試。只要你的版本正常化並且沒有矛盾,Verlib是一個很好的選擇。下面是一個說明標準化版本的潛在反直覺的排序爲例:
#!/usr/bin/env python
from verlib import NormalizedVersion as V
assert (V("0.7.9") < V("0.8a0") < V("0.8a1") < V("0.8b0") < V("0.8b1")
< V("0.8b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1") < V("0.9")
< V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0") < V("1.0")
< V("1.0.1"))
assert (V("0.7.9") < V("0.8.0a0") < V("0.8.0a1") < V("0.8.0b0")
< V("0.8.0b1") < V("0.8.0b2") < V("0.8.0") < V("0.8.1a0") < V("0.8.1")
< V("0.9") < V("1.0a3") < V("1.0b2") < V("1.0b20") < V("1.0c0")
< V("1.0") < V("1.0.1"))
print "Version comparisons are sane."
如何在setup.py文件('install_requires')中使用verlib? – 2014-04-05 15:51:07
- 1. 如何使用setuptools指定python版本?
- 2. 在setuptools/pip中排除某些依賴版本範圍
- 3. 如何在YAML中指定範圍?
- 4. 如何在find()中指定範圍cakephp
- 5. 如何在公式中指定範圍?
- 6. install_requires基於python版本
- 7. 如何爲setuptools,distribute等工作的twistd/twisted插件編寫setup.py?
- 8. 的Python的setuptools:如何列出下install_requires私人倉庫?
- 9. 使用distribute/setuptools創建符號鏈接(或運行腳本)?
- 10. 在install_requires(Python setuptools的setup.py)中提供一個複雜的條件
- 11. 默認範圍在舊版rails版本
- 12. 如何在Perl中指定包版本?
- 13. 如何在SWFC中指定Actionscript版本?
- 14. NSAttributedString指定範圍?
- 15. 如何將自定義構建步驟添加到我的setuptools/distribute setup.py?
- 16. 如何在numpy.piecewise中指定一個範圍(每個範圍2個條件)
- 17. 如何更改指定範圍的RefersTo?
- 18. 如何給html元素指定範圍
- 19. 如何進一步指定範圍?
- 20. 我如何指定矢量的範圍?
- 21. 如何指定隨機數的範圍?
- 22. 如何遍歷指定的範圍
- 23. 如何在MVVM中指定命令綁定範圍?
- 24. 如何指定djangorecipe版本
- 25. 如何指定Kotlin版本?
- 26. 如何在Gradle版本中指定所需的Java版本
- 27. OSGI有效版本範圍
- 28. 任何原因setup.py install_requires應該包括setuptools?
- 29. 在Swift中指定全局範圍
- 30. 在JavaScript中指定eval()的範圍?
你嘗試過什麼? [文檔](http://peak.telecommunity.com/DevCenter/setuptools#declaring-dependencies)似乎表明,就像你在你的問題中的語法將工作。 – Blckknght 2012-07-15 18:49:08