我有一个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