Python3: программный список всех установленных пакетов и версий в виртуальной среде

Я использую pipenv для создания виртуальной среды, и я пишу сценарий, который извлекает все установленные пакеты и помещает в словарь их имена и версии, точно так же, как список pip, если бы он был вызван из virutualenv:

> C:\Users\my_project > pipenv shell
>(.venv) C:\Users\my_project > pip list
Package         Version
--------------- ---------
argcomplete     0.8.1
bottle          0.12.4
certifi         2020.6.20
colorama        0.4.3
cx-Oracle       7.3.0
cycler          0.10.0
...

person Ahadu Tsegaye Abebe    schedule 02.10.2020    source источник
comment
os.system('pip list') не работает, потому что в нем перечислены пакеты в глобальном окружении, а не в виртуальном окружении.   -  person Ahadu Tsegaye Abebe    schedule 02.10.2020
comment
@jabberwocky уже ответил на аналогичный вопрос. Это решение мне подходит. import pkg_resources installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}   -  person Ahadu Tsegaye Abebe    schedule 02.10.2020


Ответы (1)


Можно использовать что-то вроде следующего

import subprocess
out = subprocess.Popen(['pip', 'list'],
           stdout=subprocess.PIPE,
           stderr=subprocess.STDOUT)
stdout,stderr = out.communicate()

print(stdout)

Затем вы можете проанализировать стандартный вывод в желаемом формате

person Md Johirul Islam    schedule 02.10.2020