我有一個requirements.txt
文件,其中包含我的虛擬環境所需的軟件包列表。是否有可能找出文件中提到的所有軟件包是否都存在。如果缺少一些軟件包,如何找出哪些是缺失的軟件包?如何檢查我的Python是否具有所有必需的包?
回答
的Python的這樣做的方式是通過pkg_resources
API。這些需求以setuptools可理解的格式編寫。 E.g:
Werkzeug>=0.6.1
Flask
Django>=1.3
的示例代碼:
import pkg_resources
from pkg_resources import DistributionNotFound, VersionConflict
# dependencies can be any iterable with strings,
# e.g. file line-by-line iterator
dependencies = [
'Werkzeug>=0.6.1',
'Flask>=0.9',
]
# here, if a dependency is not met, a DistributionNotFound or VersionConflict
# exception is thrown.
pkg_resources.require(dependencies)
您可以運行pip freeze
以查看您已安裝的內容並將其與您的requirements.txt
文件進行比較。
如果你想安裝缺少的模塊,你可以運行pip install -r requirements.txt
,那將安裝任何缺少的模塊,並告訴你最後哪些缺失和安裝。
如果requirements.txt是這樣的:
django
oursql
sys
notexistingmodule
然後將下面的腳本會告訴你哪些模塊丟失:
#!/usr/bin/python3
fname = 'requirements.txt'
with open(fname, 'r', encoding='utf-8') as fhd:
for line in fhd:
try:
exec("import " + line)
except:
print("[ERROR] Missing module:", line)
這將打印:
[ERROR] Missing module: notexistingmodule
如果requirements.txt包含版本信息例如'django == 1.5.1' – 2013-04-30 08:10:11
確實。如果模塊也列在一行中,它會失敗。如上所述,它將工作,如果requirements.txt每行列出一個模塊。 – 2013-04-30 08:13:02
你確定包名與模塊名相同嗎? – warvariuc 2013-04-30 11:19:41
您可以創建一個與virtualenv中訪問系統的網站打包並測試檢查包裝(或其他依賴關係)是否安裝與否。這種方式包沒有真正安裝(如果你只是想檢查)。使用virtualenv wrapper一個例子是:
$ cat requirements.txt
requests
simplejson
$ mkvirtualenv --system-site-packages test
Running virtualenv with interpreter /usr/bin/python2
New python executable in test/bin/python2
Also creating executable in test/bin/python
Installing setuptools, pip...done.
$ pip install -r requirements.txt
Downloading/unpacking requests (from -r requirements.txt (line 1))
Downloading requests-2.10.0-py2.py3-none-any.whl (506kB): 506kB downloaded
Requirement already satisfied (use --upgrade to upgrade): simplejson in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 2))
Installing collected packages: requests
Successfully installed requests
Cleaning up...
$ pip install -r requirements.txt
Requirement already satisfied (use --upgrade to upgrade): requests in /home/yucer/.virtualenvs/test/lib/python2.7/site-packages (from -r requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): simplejson in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 2))
Cleaning up...
$ deactivate
$ rmvirtualenv test
Removing test...
基礎上answer by Zaur,假設你確實使用requirements.txt
文件,您可以在tests/test_requirements.py
需要一個單元測試,也許,確認包的可用性。
的一般方法是:
import pathlib
import unittest
import pip
import pkg_resources
class TestRequirements(unittest.TestCase):
def test_requirements(self): # pylint: disable=no-self-use
"""Recursively confirm that requirements are available.
This implementation is tested to be compatible with pip 9.0.1.
"""
requirements_path = pathlib.Path(__file__).parents[1]/'requirements.txt'
requirements = pip.req.parse_requirements(str(requirements_path), session=pip.download.PipSession())
requirements = [str(r.req) for r in requirements]
pkg_resources.require(requirements)
注意,這個答案使用pathlib
它可在Python 3而不是在Python 2.如果使用Python 2,先安裝它的反向移植是pathlib2
。
這確實是個好主意! – 2017-08-03 05:37:12
- 1. SQL - 對象是否具有所有必需的組件?
- 2. Python:檢查數組是否沒有所需數量的成員
- 3. 如何檢查所有元組是否在Python列表中具有特定值
- 4. ARC是否具有強大屬性所必需的self.iVar?
- 5. Java - 罐子是否自包含所有必需的功能?
- 6. 檢查是否與具有
- 7. 檢查所有項目是否具有相同的類別
- 8. 如何檢查我的數組是否具有偶數排列?
- 9. 如何使服務運行具有所有必需的代碼?
- 10. 檢查Python for循環的所有迭代中是否有錯
- 11. 如何檢查URL是否具有有效的公共TLD?
- 12. 檢查我的所有類是否具有可序列化屬性
- 13. 如何檢查我是否只刪除了所需的數據?
- 14. 如何檢查是否文本幾乎是必需的
- 15. 如何在Python中檢查對象所具有的方法?
- 16. MembershipProvider和RoleProvider - 是否需要實現所有必需的方法?
- 17. 是否有一個工具來檢查一組sql所需的最低權限?
- 18. 如何檢查所有複選框是否未經檢查
- 19. 我是否需要所有的Android SDK構建工具?
- 20. 如何檢查TR是否包含具有jQuery的特定CSS類的TD?
- 21. 是否有無論如何檢查給定的XPath在Python中是否有效?
- 22. 檢查對象是否包含數組中的所有鍵
- 23. 檢查字符串是否包含數組的所有值
- 24. 如何檢查我們是否有有效的IBM MQ許可
- 25. 有效的方法來檢查列是否具有所有特定值
- 26. 檢查文件是否具有Python格式的CSV格式
- 27. 檢查是否URL =所需的URL(PHP)
- 28. 檢查一個URL是否包含Python中列表中的所有元素
- 29. 如何自動安裝所有必需的軟件包?
- 30. QState的所有權。我是否需要刪除所有QStates?
作爲獎勵,它會自動遞歸檢測衝突的版本要求 - 這些將是不可滿足的。 – 2017-08-03 03:43:36