Решение
Мои 50 центов за получение pip freeze
-подобного списка из скрипта Python:
import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
Как (слишком длинный) один вкладыш:
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
Предоставление:
['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24',
'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3',
'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1',
'werkzeug==0.9.4']
Область
Это решение применяется к области системы или к области виртуальной среды и охватывает пакеты, установленные с помощью setuptools
, pip
и ( боже упаси ) easy_install
.
Мой вариант использования
Я добавил результат этого вызова на свой флеш-сервер, поэтому, когда я вызываю его с помощью http://example.com/exampleServer/environment
, я получаю список пакетов, установленных на сервере virtualenv. Это значительно упрощает отладку.
Предостережения
Я заметил странное поведение этой техники - когда интерпретатор Python вызывается в том же каталоге, что и файл setup.py
, он не перечисляет пакет, установленный setup.py
.
Шаги для воспроизведения:
Создать виртуальную среду
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $
Клонировать git-репо с
setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.
Мы ведем себя setup.py
в /tmp/behave
:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Установите пакет python из репозитория git
(test_env) $ cd /tmp/behave && python setup.py install
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1
Если мы запустим вышеупомянутое решение с /tmp
>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'
Если мы запустим вышеупомянутое решение с /tmp/behave
>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'
behave==1.2.5a1
отсутствует во втором примере, поскольку рабочий каталог содержит файл behave
setup.py
.
Я не смог найти ссылки на этот вопрос в документации. Возможно, я открою для этого ошибку.