如何在 Python 中列出所有已安装的软件包及其版本?

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

我知道我可以进入 python/Lib/site-packages并查看存在哪些文件和目录,但我发现这非常尴尬。我在寻找类似于 npm list的东西,也就是 Npm-ls

341462 次浏览

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

如果你有 pip 安装,你想看看你的安装工具安装了什么软件包,你可以简单地调用这个:

pip freeze

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

更新

Pip 已经更新,通过调用以下命令也可以产生与 pip freeze相同的输出:

pip list

注意

pip list的输出格式不同,所以如果您有一些 shell 脚本来解析 freeze的输出(可能是为了获取版本号) ,并且想要更改脚本来调用 list,那么您需要更改解析代码。

是的! 您应该使用 pip 作为您的 python 包管理器(http://pypi.python.org/pypi/pip)

在安装了 pip 软件包后,您可以使用

pip freeze

它会列出所有已安装的软件包。您可能还应该使用 虚拟世界虚拟包装器。当你开始一个新的项目,你可以做

mkvirtualenv my_new_project

然后(在那个 viralenv 中) ,做

pip install all_your_stuff

通过这种方式,您可以先安装 workon my_new_project,然后再安装 pip freeze,以查看为该 viralenv/项目安装了哪些包。

例如:

➜  ~  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)➜  ~

或者,如果您有一个包含 Requments.pip 文件的 python 包,

mkvirtualenv my_awesome_project
pip install -r requirements.pip
pip freeze

会有用的

下面是一种使用 PYTHONPATH代替 python libs dir 的绝对路径的方法:

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
....

对于 Easy _ install(不推荐使用 Python < = v2.7,不要使用它,而是使用 pip; 仅在仍然使用 easy _ install 的旧项目中使用它)

你可以试试: 蛋黄

要安装蛋黄,请尝试:

easy_install yolk

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

您可以看到哪些包是活动的、非活动的或正在开发中 模式,并通过查询显示哪些版本更新 PyPI.

如果您希望获得有关已安装的 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 循环和 print 函数,迭代器中包含的元素被打印出来,并用新的行字符(\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...

从命令行

python -c help('modules')

可用于查看所有模块和特定模块

python -c help('os')

对于 Linux 来说,以下内容将会起作用

python -c "help('os')"

如果你正在使用水蟒:

conda list

会做到这一点! 见: https://conda.io/docs/_downloads/conda-cheatsheet.pdf

要在 pip 的后续版本(在 pip==10.0.1上测试)中运行这个命令,请使用以下代码:

from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
print(requirement)

我的看法是:

#!/usr/bin/env python3


import pkg_resources


dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
print(i)

如果需要从 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"))

使用代码,例如在 Hackerrank 检查什么模块等:

import os
os.system("pip list")

对于 Windows10,我认为这就是您正在寻找的可用安装 Python 列表。这与您在下面可以看到的包列表不同。另外,在 Ubuntu 20.04上,我认为命令是 Python3 -0 list。 是的,这与节点版本管理器类似。

c:\Users\user\AppData\Local\Programs\Python>py -0 list


Python 0 not found!


Installed Pythons found by py Launcher for Windows


-3.10-64 *
-3.9-64
-3.7-64
-3.6-64
-2.7-64


Requested Python version (0) not installed, use -0 for available pythons


c:\Users\user\AppData\Local\Programs\Python>py -0p
Installed Pythons found by py Launcher for Windows


-3.10-64       C:\Python310\python.exe *


-3.9-64        C:\Users\user\AppData\Local\Programs\Python\Python39\python.exe


-3.7-64        C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\python.exe


-3.6-64        C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\python.exe


-2.7-64        C:\Python27amd64\python.exe

见: https://www.infoworld.com/article/3617292/how-to-use-pythons-py-launcher-for-windows.html

参见: https://www.freecodecamp.org/news/manage-multiple-python-versions-and-virtual-environments-venv-pyenv-pyvenv-a29fb00c296f/

从上面的链接可以看出,“如果您希望在一台机器上使用多个版本的 Python,那么 pyenv 是一个常用的工具,用于安装和在不同版本之间切换。这不要与前面提到的折旧的 pyvenv 脚本混淆。它不与 Python 捆绑在一起,必须单独安装。”注意: 这与使用 Node.js 和 NPM 版本的 Node Version Manager 类似。

参见: https://github.com/pyenv-win/pyenv-win#installation

操作: 打开 PowerShell 并输入以下 web 请求。上面的链接也提供了其他方法,但这似乎是最简单的方法。运行时输出文件的名称不是类似于“ pyenv-win”的名称变体,而是实际上的“ pyenv”,正如最初预期的那样。

PS C:\Users\user> Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"


pyenv-win 2.64.11 installed.
No updates available.
PS C:\Users\user>

使用 Python 的版本管理器‘ pyenv’的示例输出。

C:\Users\user>pyenv --version
pyenv 2.64.11


C:\Users\name>pyenv
pyenv 2.64.11
Usage: pyenv <command> [<args>]


Some useful pyenv commands are:
commands     List all available pyenv commands
duplicate    Creates a duplicate python environment
local        Set or show the local application-specific Python version
global       Set or show the global Python version
shell        Set or show the shell-specific Python version
install      Install a Python version using python-build
uninstall    Uninstall a specific Python version
update       Update the cached version DB
rehash       Rehash pyenv shims (run this after installing executables)
vname        Show the current Python version
version      Show the current Python version and its origin
version-name Show the current Python version
versions     List all Python versions available to pyenv
exec         Runs an executable by first preparing PATH so that the selected Python
which        Display the full path to an executable
whence       List all Python versions that contain the given executable


See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv-win/pyenv-win#readme


C:\Users\name>pyenv commands
--version
commands
duplicate
exec
export
global
help
install
local
rehash
shell
shims
uninstall
update
version-name
version
versions
vname
whence
which


C:\Users\name>pyenv version
No global python version has been set yet. Please set the global version by typing:
pyenv global 3.7.2


C:\Users\user>pyenv local
no local version configured for this directory


C:\Users\user>pyenv global
no global version configured


C:\Users\user>pyenv local 3.9-64
pyenv specific python requisite didn't meet. Project is using different version of python.
Install python '3.9-64' by typing: 'pyenv install 3.9-64'

我的注意: “ https://www.python.org/downloads/”的版本名称与“ pyenv”的版本名称不同。这个版本已经在本地安装,但是它不在这个 Python 版本管理器的控制范围之内,因此它对于管理器是不可见的。

C:\Users\user>pyenv install 3.8.10-64
:: [Info] ::  Mirror: https://www.python.org/ftp/python
pyenv-install: definition not found: local

我的注意: 这个 Python 版本不在托管列表中,尽管这个版本存在于“ https://www.Python.org/downloads/”中。因此,您必须查看经理提供的列表。查看所有可用的‘ pyenv install —— list’版本。

C:\Users\user>pyenv install --list
Note: Review the list from this call and make your selection.


C:\Users\user>pyenv install 3.8.10
:: [Info] ::  Mirror: https://www.python.org/ftp/python
:: [Downloading] ::  3.8.10 ...
:: [Downloading] ::  From https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64-webinstall.exe
:: [Downloading] ::  To   C:\Users\user\.pyenv\pyenv-win\install_cache\python-3.8.10-amd64-webinstall.exe
:: [Installing] ::  3.8.10 ...
:: [Info] :: completed! 3.8.10

我的注意: 使用这个 Python 版本管理器‘ pyenv’,在安装之后,似乎必须在安装之后将版本指定为‘ local’或‘ global’,这将遵循与 Node.js 版本管理器(NVM)相同的范例。同样,在我看来,Python 版本管理器只能看到管理器安装的 Python 版本; 并且它只能卸载它在 Python 版本管理器中安装的版本。

C:\Users\user>pyenv local 3.8.10


C:\Users\user>pyenv local
3.8.10


C:\Users\user>pyenv version
3.8.10 (set by C:\Users\user\.python-version)


C:\Users\user>pyenv versions
* 3.8.10 (set by C:\Users\user\.python-version)


C:\Users\user>pyenv vname
3.8.10


C:\Users\user>pyenv global
no global version configured

下面是使用软件包的方法。

参见: https://www.freecodecamp.org/news/manage-multiple-python-versions-and-virtual-environments-venv-pyenv-pyvenv-a29fb00c296f/

在上面的链接中,“当环境处于活动状态时,任何软件包都可以像平常一样通过 pip 安装到环境中。默认情况下,新创建的环境将不包括已经安装在计算机上的任何包。因为 pip 本身不一定安装在机器上。建议首先将 pip 升级到最新版本,使用‘ pip install-update pip’。”——我在进行这两个调用之前执行了 pip 升级,以便在下面列出软件包及其版本。

c:\Users\user\AppData\Local\Programs\Python>pip list


Package    Version
---------- -------
pip        22.1
setuptools 62.2.0
wheel      0.37.1


c:\Users\user\AppData\Local\Programs\Python>pip list --local


Package    Version
---------- -------
pip        22.1
setuptools 62.2.0
wheel      0.37.1