How can I get a list of locally installed Python modules

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

I would like to get a list of Python modules, which are in my Python installation (UNIX server).

  How can you get a list of Python modules installed in your computer?   

Answers

Solution

My 50 cents for getting a pip freeze-like list from a Python script:

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)

As a (too long) one liner:

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

Giving:

[ 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 ]

Scope

http://stackoverflow.com/questions/3220404/why-use-pip-over-easy-install http://stackoverflow.com/questions/3220404/why-use-pip-over-easy-install

My use case

I added the result of this call to my flask server, so when I call it with http://example.com/exampleServer/environment I get the list of packages installed on the server s virtualenv. It makes debugging a whole lot easier.

Caveats

I have noticed a strange behaviour of this technique - when the Python interpreter is invoked in the same directory as a setup.py file, it does not list the package installed by setup.py.

Steps to reproduce:

Create a virtual environment

$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 

Clone a git repo with 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.

We have behave s setup.py in /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py

Install the python package from the git repo

(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

If we run the aforementioned solution from /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 

If we run the aforementioned solution from /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 is missing from the second example, because the working directory contains behave s setup.py file.

I could not find any reference to this issue in the documentation. Perhaps I shall open a bug for it.

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/739993/how-can-i-get-a-list-of-locally-installed-python-modules

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils