问题:如何在Python中列出所有已安装的软件包及其版本?
Python中是否有办法列出所有已安装的软件包及其版本?
我知道我可以进入python/Lib/site-packages
并查看存在哪些文件和目录,但是我觉得这很尴尬。我正在寻找的东西类似于npm list
即NPM-LS。
回答 0
如果您已经进行了pip安装,并且想查看安装程序工具已安装了哪些软件包,则可以简单地调用以下命令:
pip freeze
它还将包含已安装软件包的版本号。
更新资料
pip已更新,可以产生与pip freeze
调用相同的输出:
pip list
注意
的输出pip list
格式不同,因此,如果您有一些shell脚本来解析(可能是获取版本号)的输出,freeze
并且想要将脚本更改为call list
,则需要更改解析代码。
回答 1
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
回答 2
如果要获取有关已安装的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...
回答 3
可以尝试:蛋黄
对于安装蛋黄,请尝试:
easy_install yolk
Yolk是一个Python工具,用于获取有关已安装的Python软件包的信息并查询可在PyPI(Python软件包索引)上使用的软件包。
您可以通过查询PyPI查看哪些软件包处于活动状态,非活动状态或处于开发模式,并向您显示哪些软件包可用。
回答 4
要在更高版本的pip(在上测试)上运行此命令,请pip==10.0.1
使用以下命令:
from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
print(requirement)
回答 5
从命令行
python -c help('modules')
可用于查看所有模块以及特定模块
python -c help('os')
对于Linux,以下版本适用
python -c "help('os')"
回答 6
是!您应该将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
查看为该virtualenv / project安装了哪些软件包。
例如:
➜ ~ 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
会成功的
回答 7
我的看法:
#!/usr/bin/env python3
import pkg_resources
dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
print(i)
回答 8
这是一种使用方法来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
....
回答 9
回答 10
如果需要从python内部运行,则可以调用子进程
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"))