【发布时间】:2012-10-08 01:04:40
【问题描述】:
在 Python 中有没有办法列出所有已安装的包及其版本?
我知道我可以进入python/Lib/site-packages 并查看存在哪些文件和目录,但我觉得这很尴尬。我正在寻找类似于npm list 的东西,即npm-ls。
【问题讨论】:
标签: python installation packages
在 Python 中有没有办法列出所有已安装的包及其版本?
我知道我可以进入python/Lib/site-packages 并查看存在哪些文件和目录,但我觉得这很尴尬。我正在寻找类似于npm list 的东西,即npm-ls。
【问题讨论】:
标签: python installation packages
如果你有 pip install 并且你想看看你的安装工具安装了哪些包,你可以简单地调用这个:
pip freeze
它还将包括已安装软件包的版本号。
更新
pip 已更新为通过调用产生与pip freeze 相同的输出:
pip list
注意
pip list 的输出格式不同,所以如果你有一些 shell 脚本可以解析freeze 的输出(可能是为了获取版本号)并且想要更改你的脚本来调用list,你'将需要更改您的解析代码。
【讨论】:
pip list 作为pip freeze 的别名。写 pip freeze > requirements.txt 很直观,但不是 pip freeze。
pip list:pip-installer.org/en/latest/usage.html#pip-list - 所以这实际上已经出现了!
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
【讨论】:
Package.version() 或 package.__version__ 或 package.ver 或任何数量的其他可能性
如果您想获取有关已安装的 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) 函数调用返回一个 iterable,并且由于 for 循环和 print 函数,包含在 iterable 中的元素被打印出来,并用换行符分隔 (\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...
【讨论】:
pkg_resources 的状态如何? AFAICR 这是setuptools 的一部分。不是pip。我们能否安全地假设setuptools 将始终可用,仅取决于pip?
从命令行
python -c help('modules')
可用于查看所有模块,以及针对特定模块
python -c help('os')
对于下面的 Linux 将有效
python -c "help('os')"
【讨论】:
-bash: syntax error near unexpected token `('
python -c "help('modules')"
要在更高版本的 pip(在 pip==10.0.1 上测试)中运行它,请使用以下命令:
from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
print(requirement)
【讨论】:
pydoc pip._internal,但我在help(pip._internal)、pip.__builtins_ 等下无法访问它。pip 参考指南也是空白的。
_internal。该功能似乎没有正式公开。所以你应该小心处理!
我的看法:
#!/usr/bin/env python3
import pkg_resources
dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
print(i)
【讨论】:
[d.project_name for d in pkg_resources.working_set]吗?
你可以试试:蛋黄
要安装蛋黄,请尝试:
easy_install yolk
Yolk 是一个 Python 工具,用于获取有关已安装 Python 的信息 PyPI 上可用的包和查询包(Python 包 索引)。
您可以查看哪些软件包处于活动状态、非活动状态或正在开发中 模式并通过查询向您显示哪些有更新的版本可用 PyPI。
【讨论】:
是的!你应该使用 pip 作为你的 python 包管理器(http://pypi.python.org/pypi/pip)
用 pip 安装包,你可以做一个
pip freeze
它会列出所有已安装的软件包。您可能还应该使用virtualenv 和virtualenvwrapper。当你开始一个新项目时,你可以这样做
mkvirtualenv my_new_project
然后(在那个 virtualenv 中),做
pip install all_your_stuff
这样,您可以workon my_new_project 然后pip freeze 来查看为该虚拟环境/项目安装了哪些软件包。
例如:
➜ ~ 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
会成功的
【讨论】:
pip!
virtualenv与全局站点包,则需要使用pip list --local。
virtualenv 中根本不存在该选项。我不知道有什么理由不使用它们,如果你愿意,没有人阻止你限制为孤立的virtualenv。
这是一种使用 PYTHONPATH 而不是 python 库目录的绝对路径的方法:
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
....
【讨论】:
【讨论】:
pip list
如果需要在 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")
【讨论】: