为了账号安全,请及时绑定邮箱和手机立即绑定

用于 pip freeze 的 subprocess.popen 不返回包列表

用于 pip freeze 的 subprocess.popen 不返回包列表

三国纷争 2021-09-02 15:42:58
我的代码似乎一直在工作,但现在我只是收到标准输出说,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 subprocessproc = subprocess.Popen(['pip', 'freeze'], stdout=subprocess.PIPE,                        stderr=subprocess.STDOUT)output, err = proc.communicate()string_file = StringIO.StringIO(output)print string_file.readlines()我的目标是获取几个不同包的版本号,并在版本号与我之前在 json 文件中为包的版本记录的版本号不同时执行一些操作。pip list 的子进程似乎也没有帮助。有谁知道可能导致这种行为的原因,或者是否有更简单的方法来执行此操作?我有大约 10 个包裹要检查。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

显而易见的事情是接受pip的建议并更新它。如果你不能这样做,错误信息应该是无害的——pip执行的检查通常不会阻止它工作。

您可以使用禁用版本检查

proc = subprocess.Popen(['pip', 'freeze', '--disable-pip-version-check'],
                         stdout=subprocess.PIPE,
                         stderr=subprocess.STDOUT)


查看完整回答
反对 回复 2021-09-02
?
倚天杖

TA贡献1828条经验 获得超3个赞

我正在使用 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)

希望这可以帮助。


查看完整回答
反对 回复 2021-09-02
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信