2012-10-17 528 views
93

Python中是否有方法列出所有已安裝的軟件包及其版本?如何在Python中列出所有已安裝的軟件包及其版本?

我知道我可以進入python/Lib/site-packages,看看有什麼文件和目錄存在,但我覺得這很尷尬。我在找什麼與npm list[1]類似的東西。

+0

可能的重複[如何獲得本地安裝的Python模塊列表?](http://stackoverflow.com/questions/739993/how-can-i-get-a-list-of-locally-installed- python-modules) – RNA

回答

146

如果你PIP安裝你想看到包已經安裝了哪些與您的安裝工具,你可以簡單地調用這個:

pip freeze 

它還將包括已安裝軟件包的版本號。

更新

PIP已經更新也通過調用產生的輸出爲pip freeze相同:

pip list 

注意

pip list的輸出格式不同,因此,如果你有一些shell腳本可以解析輸出(也許獲取版本號)freeze並且想要更改腳本以調用list,則需要更改解析代碼。

+8

恕我直言,他們應該提供'點子列表'作爲'點子凍結'的別名。它直觀地寫'pip freeze> requirements.txt',但不是'pip freeze'。 – jsalonen

+3

WOW:剛剛查看了最新版本的pip文檔,似乎他們已經添加了「pip list」:http://www.pip-installer.org/en/latest/usage.html#pip-list - 所以這是實際上已經到來的東西了! – jsalonen

+1

應該將答案更新爲@jsalonen的評論「pip list」嗎? –

28

help('modules')應該爲你做。

在IPython的

In [1]: import      #import press-TAB 
Display all 631 possibilities? (y or n) 
ANSI     audiodev    markupbase 
AptUrl     audioop    markupsafe 
ArgImagePlugin   avahi     marshal 
BaseHTTPServer   axi     math 
Bastion    base64     md5 
BdfFontFile   bdb     mhlib 
BmpImagePlugin   binascii    mimetools 
BufrStubImagePlugin binhex     mimetypes 
CDDB     bisect     mimify 
CDROM     bonobo     mmap 
CGIHTTPServer   brlapi     mmkeys 
Canvas     bsddb     modulefinder 
CommandNotFound  butterfly    multifile 
ConfigParser   bz2     multiprocessing 
ContainerIO   cPickle    musicbrainz2 
Cookie     cProfile    mutagen 
Crypto     cStringIO    mutex 
CurImagePlugin   cairo     mx 
DLFCN     calendar    netrc 
DcxImagePlugin   cdrom     new 
Dialog     cgi     nis 
DiscID     cgitb     nntplib 
DistUpgrade   checkbox    ntpath 
+1

這很方便!儘管如此,我也很樂意看到這些版本。 – jsalonen

+3

我認爲問題是沒有標準化的方式包括版本...有時它的'Package.version()'或'包.__ version__'或'package.ver'或任何數量的其他可能性 –

+0

我認爲Python的格言是「只有一種方法可以做到」)? –

4

是的!你應該使用PIP爲您的Python包管理器(http://pypi.python.org/pypi/pip

與PIP安裝的軟件包,你可以做一個

pip freeze 

,它會列出所有已安裝的軟件包。你應該也可以使用virtualenvvirtualenvwrapper。當您啓動一個新項目,你可以做

mkvirtualenv my_new_project 

,然後(即的virtualenv內),做

pip install all_your_stuff 

這樣,您就可以workon my_new_project然後pip freeze,看看哪些軟件包安裝該的virtualenv /項目。

例如:

➜ ~ mkvirtualenv yo_dude 
New python executable in yo_dude/bin/python 
Installing setuptools............done. 
Installing pip...............done. 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/predeactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postdeactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/preactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/get_env_details 

(yo_dude)➜ ~ pip install django 
Downloading/unpacking django 
    Downloading Django-1.4.1.tar.gz (7.7Mb): 7.7Mb downloaded 
    Running setup.py egg_info for package django 

Installing collected packages: django 
    Running setup.py install for django 
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755 

    changing mode of /Users/aaylward/dev/virtualenvs/yo_dude/bin/django-admin.py to 755 
Successfully installed django 
Cleaning up... 

(yo_dude)➜ ~ pip freeze 
Django==1.4.1 
wsgiref==0.1.2 

(yo_dude)➜ ~ 

,或者如果你有一個Python包與要求。PIP文件,

mkvirtualenv my_awesome_project 
pip install -r requirements.pip 
pip freeze 

會做的伎倆

+0

哦,是的,我一直在使用virtualenv一段時間。我只是不知道我怎麼沒有想到我可以像這樣使用'pip'! – jsalonen

+0

@jsalonen這是一個非常好的管理軟件包的方式! – Andbdrew

+0

關於帶有全局站點包的'virtualenv',你需要使用['pip list --local'](http://stackoverflow.com/a/24661035/1959808)。 –

2

這裏是一種使用PYTHONPATH,而不是你的Python庫目錄的絕對路徑,以做到這一點:

for d in `echo "${PYTHONPATH}" | tr ':' '\n'`; do ls "${d}"; done 

[ 10:43 [email protected] ~/xCode/Projects/Python for iOS/trunk/Python for iOS/Python for iOS ]$ for d in `echo "$PYTHONPATH" | tr ':' '\n'`; do ls "${d}"; done 
libpython2.7.dylib pkgconfig   python2.7 
BaseHTTPServer.py  _pyio.pyc    cgitb.pyo    doctest.pyo   htmlentitydefs.pyc  mimetools.pyc   plat-mac    runpy.py    stringold.pyc   traceback.pyo 
BaseHTTPServer.pyc  _pyio.pyo    chunk.py    dumbdbm.py    htmlentitydefs.pyo  mimetools.pyo   platform.py   runpy.pyc    stringold.pyo   tty.py 
BaseHTTPServer.pyo  _strptime.py   chunk.pyc    dumbdbm.pyc   htmllib.py    mimetypes.py   platform.pyc   runpy.pyo    stringprep.py   tty.pyc 
Bastion.py    _strptime.pyc   chunk.pyo    dumbdbm.pyo   htmllib.pyc   mimetypes.pyc   platform.pyo   sched.py    stringprep.pyc   tty.pyo 
Bastion.pyc   _strptime.pyo   cmd.py 
.... 
9

您可以嘗試:蛋黃

對於安裝蛋黃,嘗試:

easy_install yolk 

Yolk is a Python tool for obtaining information about installed Python packages and querying packages avilable on PyPI (Python Package Index).

You can see which packages are active, non-active or in development mode and show you which have newer versions available by querying PyPI.

+1

這也不錯 - 謝謝! – jsalonen

+0

此時我通常使用pip來完成此任務,但我有一個非常舊的項目,我還沒有準備好添加分發內容,而且我還記得那裏有一個這樣的工具。不記得它被稱爲什麼......就是這樣! – meshantz

18

如果你想獲得你安裝Python發行信息,並且不希望使用CMD控制檯或終端它,而是通過Python代碼時,可以使用下面的代碼(與Python 3.4測試):

import pip #needed to use the pip functions 
for i in pip.get_installed_distributions(local_only=True): 
    print(i) 

pip.get_installed_distributions(local_only=True)函數調用返回一個可迭代和由於for循環和打印功能包含在i中的元素可以打印出新的一行字符(\n)。 結果將(根據您所安裝的發行版)是這個樣子:

cycler 0.9.0 
decorator 4.0.4 
ipykernel 4.1.0 
ipython 4.0.0 
ipython-genutils 0.1.0 
ipywidgets 4.0.3 
Jinja2 2.8 
jsonschema 2.5.1 
jupyter 1.0.0 
jupyter-client 4.1.1 
#... and so on... 
5

命令行

python -c help('modules') 

可以用於查看所有模塊,以及特定模塊

python -c help('os') 

對於Linux下面將工作

python -c "help('os')" 
+3

這適用於Windows。在linux上它會拋出錯誤:'-bash:在意外標記附近的語法錯誤\'('' – AjayKumarBasuthkar

相關問題