我的代码似乎一直在工作,但是现在我只是收到标准输出说,
You are using pip version 9.0.1, however version 18.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
这是我的代码
import subprocess
proc = subprocess.Popen(['pip', 'freeze'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
output, err = proc.communicate()
string_file = StringIO.StringIO(output)
print string_file.readlines()
我的目标是获取几个不同软件包的版本号,如果该版本号与我先前在json文件中为该软件包的版本记录的版本号不同,请执行一些操作。点子列表的子过程似乎也无济于事。
有人知道什么可能导致此行为,或者是否有更简单的方法让我执行此操作?我有大约10个包裹要检查。
答案 0 :(得分:1)
显而易见的事情是听取pip
的建议并对其进行更新。如果您无法执行此操作,则错误消息应该是无害的-pip
执行的检查通常不会使其停止工作。
您可以使用禁用版本检查
proc = subprocess.Popen(['pip', 'freeze', '--disable-pip-version-check'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
答案 1 :(得分:0)
我正在使用pkg_resources模块来获取以下信息:
import pkg_resources
from subprocess import call
# If you want to skip some packages
exception = ['scipy', 'numpy']
# List comprehension to get the packages
pack_names = [d for d in pkg_resources.working_set
if d.project_name not in exception]
# print the package names and versions
for dist in pack_names:
print('PACKAGE: {}'.format(dist))
# And if you want to upgrade this package:
call('pip install --upgrade --no-cache-dir ' + dist.project_name, shell=True)
希望这会有所帮助。