Quantcast
Channel: How do I get a list of locally installed Python modules? - Stack Overflow
Viewing all articles
Browse latest Browse all 35

Answer by Adam Matan for How do I get a list of locally installed Python modules?

$
0
0

Solution

Do not use with pip > 10.0!

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

import pipinstalled_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

This solution applies to the system scope or to a virtual environment scope, and covers packages installed by setuptools, pip and (god forbid) 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_envNew python executable in test_env/bin/pythonInstalling setuptools, pip...done.$ source test_env/bin/activate(test_env) $

Clone a Git repository with setup.py

(test_env) $ git clone https://github.com/behave/behave.gitCloning 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 repository

(test_env) $ cd /tmp/behave && pip install .running install...Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.eggFinished 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.


Viewing all articles
Browse latest Browse all 35

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>