155

Python中有没有办法列出所有已安装的包及其版本?

我知道我可以进去python/Lib/site-packages看看存在哪些文件和目录,但我觉得这很尴尬。我正在寻找类似于npm listie npm-ls的东西。

4

12 回答 12

223

如果你有 pip install 并且你想看看你的安装工具安装了哪些软件包,你可以简单地调用它:

pip freeze

它还将包括已安装软件包的版本号。

更新

pip 已更新为也产生与pip freeze调用相同的输出:

pip list

笔记

from 的输出pip list格式不同,因此如果您有一些 shell 脚本可以解析的输出(可能是为了获取版本号)freeze并且想要将脚本更改为 call list,则需要更改解析代码。

于 2012-10-17T17:31:30.653 回答
56

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
于 2012-10-17T17:31:21.150 回答
32

如果您想获取有关已安装的 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 循环和打印函数,可迭代对象中包含的元素被打印出来,并由换行符 ( \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...
于 2015-10-31T22:42:20.590 回答
11

从命令行

python -c help('modules')

可用于查看所有模块,以及针对特定模块

python -c help('os')

对于下面的 Linux 将工作

python -c "help('os')"
于 2016-02-24T12:22:48.453 回答
11

要在更高版本的 pip(在 上测试pip==10.0.1)中运行它,请使用以下命令:

from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
    print(requirement)
于 2018-06-27T07:00:13.157 回答
10

我的看法:

#!/usr/bin/env python3

import pkg_resources

dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
    print(i)
于 2019-03-08T00:07:41.803 回答
9

你可以试试:蛋黄

要安装蛋黄,请尝试:

easy_install yolk

Yolk 是一个 Python 工具,用于获取有关已安装 Python 包的信息并查询 PyPI(Python 包索引)上可用的包。

您可以查看哪些包是活动的、非活动的或处于开发模式,并通过查询 PyPI 向您显示哪些有更新的版本可用。

于 2012-12-09T05:50:48.687 回答
5

是的!你应该使用 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)➜  ~  

或者如果你有一个带有 requirements.pip 文件的 python 包,

mkvirtualenv my_awesome_project
pip install -r requirements.pip
pip freeze

会成功的

于 2012-10-17T17:31:53.737 回答
3

如果您使用的是蟒蛇:

conda list

会做的!请参阅:https ://conda.io/docs/_downloads/conda-cheatsheet.pdf

于 2018-04-19T11:07:59.503 回答
2

这是一种使用PYTHONPATH而不是 python libs 目录的绝对路径的方法:

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

[ 10:43 Jonathan@MacBookPro-2 ~/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
....
于 2012-10-17T17:44:28.830 回答
1

如果需要从 python 中运行,您可以调用 subprocess

from subprocess import PIPE, Popen

pip_process = Popen(["pip freeze"], stdout=PIPE,
                   stderr=PIPE, shell=True)
stdout, stderr = pip_process.communicate()
print(stdout.decode("utf-8"))
于 2020-01-03T21:49:42.137 回答
1

用于使用代码,例如检查 Hackerrank 等中的哪些模块:

import os
os.system("pip list")
于 2020-10-22T03:26:06.157 回答