Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get a list of locally installed Python modules?

Tags:

python

module

pip

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?

like image 951
Léo Léopold Hertz 준영 Avatar asked Apr 11 '09 12:04

Léo Léopold Hertz 준영


People also ask

How can I get a list of installed modules?

To see all modules installed on the system, use the Get-Module -ListAvailable command.

How do I see a list of Python modules?

You can go to the python prompt by running python3. 6 command as you can see below. Then you can run help("modules") to list all the installed python modules. If you do not have python3 installed then you can use yum install python3 -y command to install on RHEL/CentOS Based Servers and sudo apt-get install python3.

Where are Python packages installed locally?

Locally installed Python and all packages will be installed under a directory similar to ~/. local/bin/ for a Unix-based system, or \Users\Username\AppData\Local\Programs\ for Windows.


2 Answers

help('modules') 

in a Python shell/prompt.

like image 85
ChristopheD Avatar answered Oct 03 '22 04:10

ChristopheD


Solution

Do not use with pip > 10.0!

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

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_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 && pip 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.

like image 31
Adam Matan Avatar answered Oct 03 '22 04:10

Adam Matan