Léo*_* 준영 934 python module pip
我想获得一个Python模块列表,这些模块在我的Python安装(UNIX服务器)中.
如何获得计算机中安装的Python模块列表?
Chr*_*heD 981
help('modules')
Run Code Online (Sandbox Code Playgroud)
在Python shell /提示符下.
Ada*_*tan 578
pip freeze从Python脚本中获取类似列表的50美分:
import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
Run Code Online (Sandbox Code Playgroud)
作为(太长)一个班轮:
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
Run Code Online (Sandbox Code Playgroud)
赠送:
['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24',
'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3',
'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1',
'werkzeug==0.9.4']
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于系统范围或虚拟环境范围,并涵盖由setuptools(pip和上帝禁止)安装的软件包easy_install.
我将这个调用的结果添加到我的烧瓶服务器,所以当我调用它时,http://example.com/exampleServer/environment我得到服务器的virtualenv上安装的软件包列表.它使调试变得更加容易.
我注意到这种技术的奇怪行为 - 当Python解释器在与setup.py文件相同的目录中调用时,它不会列出安装的包setup.py.
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $
Run Code Online (Sandbox Code Playgroud)
克隆一个git repo setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.
Run Code Online (Sandbox Code Playgroud)
我们必须表现的setup.py在/tmp/behave:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Run Code Online (Sandbox Code Playgroud)
从git repo安装python包
(test_env) $ cd /tmp/behave && pip install .
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1
Run Code Online (Sandbox Code Playgroud)
/tmp>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'
Run Code Online (Sandbox Code Playgroud)
/tmp/behave>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'
Run Code Online (Sandbox Code Playgroud)
behave==1.2.5a1在第二个示例中缺少,因为工作目录包含behave的setup.py文件.
我在文档中找不到任何对此问题的引用.也许我会为它打开一个错误.
chi*_*gsy 271
现在,我尝试了这些方法,并且我得到了所宣传的内容:所有模块.
唉,你真的不太关心stdlib,你知道你用python安装得到了什么.
真的,我想要我安装的东西.
实际上,令人惊讶的是,工作得很好的是:
pip freeze
Run Code Online (Sandbox Code Playgroud)
返回的是:
Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21
Run Code Online (Sandbox Code Playgroud)
我说"令人惊讶",因为软件包安装工具是人们期望找到这个功能的确切位置,虽然不是名为'freeze',但python包装是如此奇怪,我很惊讶这个工具是有道理的.Pip 0.8.2,Python 2.7.
Joh*_*web 87
在ipython你可以输入" importTab".
在标准Python解释器中,您可以键入" help('modules')".
在命令行,您可以使用.pydoc modules
在脚本中,调用pkgutil.iter_modules().
Bry*_*yce 85
从pip 1.3版开始,您就可以访问:
pip list
Run Code Online (Sandbox Code Playgroud)
这似乎是"pip冻结"的语法糖.它将列出特定于您的安装或virtualenv的所有模块及其版本号.不幸的是,它没有显示任何模块的当前版本号,也没有洗碗或擦鞋.
Dan*_*ans 68
我只是用它来查看当前使用的模块:
import sys as s
s.modules.keys()
Run Code Online (Sandbox Code Playgroud)
它显示了在python上运行的所有模块.
对于所有内置模块,请使用:
s.modules
Run Code Online (Sandbox Code Playgroud)
哪个是包含所有模块和导入对象的dict.
小智 64
在正常的shell中使用
pydoc modules
Run Code Online (Sandbox Code Playgroud)
Big*_*_Tx 34
从第10点开始,接受的答案将不再适用.开发团队已删除对get_installed_distributions例程的访问权限.在setuptools做同样的事情中还有一个替代功能.这是与pip 10一起使用的替代版本:
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
Run Code Online (Sandbox Code Playgroud)
如果它在以前版本的pip中有效或不可用,请告诉我.
jab*_*cky 30
在您的 Python 编辑器或 IPython 中运行以下命令:
import pkg_resources
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)
Run Code Online (Sandbox Code Playgroud)
阅读其他答案并将这个组合组合在一起,这是Python 中最快和最简单的。
方便地,您可以轻松地从您的 dict 中获取项目,即
installed_packages['pandas'] >> '1.16.4'
!pip list如果在那里工作,将在您的 jupyter 笔记本内运行,简化“快速检查”结合其他实用程序,如 grep(如果您已安装)
pip list | grep pandas 将获得您当前的熊猫版本
小智 26
如果我们需要在Python shell中列出已安装的软件包,我们可以help按如下方式使用该命令
>>help('modules package')
Run Code Online (Sandbox Code Playgroud)
小智 17
在终端或 IPython 中,键入:
help('modules')
Run Code Online (Sandbox Code Playgroud)
然后
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
Run Code Online (Sandbox Code Playgroud)
小智 12
使用pkgutil.iter_modules进行非常简单的搜索
from pkgutil import iter_modules
a=iter_modules()
while True:
try: x=a.next()
except: break
if 'searchstr' in x[1]: print x[1]
Run Code Online (Sandbox Code Playgroud)
Qia*_*iau 12
我在OS X上遇到了一个自定义安装的python 2.7.它需要X11来列出安装的模块(使用help和pydoc).
为了能够在不安装X11的情况下列出所有模块,我将pydoc作为http-server运行,即:
pydoc -p 12345
Run Code Online (Sandbox Code Playgroud)
然后可以指示Safari http://localhost:12345/查看所有模块.
Sau*_*abh 11
在Windows上,在cmd中输入
c:\python\libs>python -m pip freeze
Run Code Online (Sandbox Code Playgroud)
Man*_*era 10
我正在比较五种检索已安装“模块”的方法,所有这些方法我都在这个线程中看到过
\n| 迭代模块 | 帮助(“模块”) | 内置模块名称 | 点值列表 | 工作集 | |
|---|---|---|---|---|---|
| 包括发行版 | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 包括模块(无内置) | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c |
| 包括内置模块 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9d\x8c |
| 包括冷冻 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c |
| 包括 venv | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 包括全球 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 包括可编辑的安装 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 包括 PyCharm 助手 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c |
| 降低大写字母 | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 花费的时间(总共 665 个模块) | 53.7 毫秒 | 1.03秒 | 577纳秒 | 284 毫秒 | 36.2 微秒 |
pip list和working_set适用于发行版,而不是模块。iter_modules和help("modules")很相似,最大的区别就是iter_modules不包含内置。pip list和working_set非常相似,唯一的区别是working_set所有大写字母都变小了。help("modules")和中builtin_module_names。importlib.util.find_spec用于模块并且区分大小写。sys.modules仅列出导入的模块。我说的是分发而不是打包,因为我认为这会减少误解。一个发行版/包中可以包含多个包/模块。
\n已安装的发行版并不总是可以用相同的名称导入。例如pip install Pillow使用 导入import PIL。有时,一个发行版甚至可以导入多个模块。
import pkgutil\n{module.name for module in pkgutil.iter_modules()}\nRun Code Online (Sandbox Code Playgroud)\nhelp("modules")\nRun Code Online (Sandbox Code Playgroud)\nimport sys\nset(sys.builtin_module_names)\nRun Code Online (Sandbox Code Playgroud)\npip list在终端
import pkg_resources\n{pkg.key for pkg in pkg_resources.working_set}\nRun Code Online (Sandbox Code Playgroud)\nhelp("modules")或python -c "help(\'modules\')"。\niter_modules+ builtin_module_names。\nimport sys\nimport pkgutil\n\ndef get_installed_modules_names():\n iter_modules = {module.name for module in pkgutil.iter_modules()}\n builtin = sys.builtin_module_names\n return set.union(iter_modules, builtin)\nRun Code Online (Sandbox Code Playgroud)\n
这是受到亚当·马坦(Adam Matan)的回答(公认的)的启发:
import tabulate
try:
from pip import get_installed_distributions
except:
from pip._internal.utils.misc import get_installed_distributions
tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
tabpackages.append([package.location, package.key, package.version])
print(tabulate.tabulate(tabpackages))
Run Code Online (Sandbox Code Playgroud)
然后以以下形式打印出表格
19:33 pi@rpi-v3 [iot-wifi-2] ~/python$ python installed_packages.py
------------------------------------------- -------------- ------
/home/pi/.local/lib/python2.7/site-packages enum-compat 0.0.2
/home/pi/.local/lib/python2.7/site-packages enum34 1.1.6
/home/pi/.local/lib/python2.7/site-packages pexpect 4.2.1
/home/pi/.local/lib/python2.7/site-packages ptyprocess 0.5.2
/home/pi/.local/lib/python2.7/site-packages pygatt 3.2.0
/home/pi/.local/lib/python2.7/site-packages pyserial 3.4
/usr/local/lib/python2.7/dist-packages bluepy 1.1.1
/usr/local/lib/python2.7/dist-packages click 6.7
/usr/local/lib/python2.7/dist-packages click-datetime 0.2
/usr/local/lib/python2.7/dist-packages construct 2.8.21
/usr/local/lib/python2.7/dist-packages pyaudio 0.2.11
/usr/local/lib/python2.7/dist-packages tabulate 0.8.2
------------------------------------------- -------------- ------
Run Code Online (Sandbox Code Playgroud)
这样一来,您便可以轻松辨别使用和不安装时安装的软件包sudo。
撇开笔记:我注意到,当我一次安装一个数据包而一次安装一次数据包时sudo,一个优先,因此不会列出另一个数据包(仅显示一个位置)。我相信只会列出本地目录中的一个。这可以改善。
sys.modulespip),您可以查看pip.get_installed_distributions()为了第二个目的,示例代码:
import pip
for package in pip.get_installed_distributions():
name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
key = package.key # sqlalchemy, django, flask-oauthlib
module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
location = package.location # virtualenv lib directory etc.
version = package.version # version number
Run Code Online (Sandbox Code Playgroud)
此解决方案主要基于模块importlib,pkgutil并与CPython 3.4和CPython 3.5一起使用,但不支持CPython 2.
说明
sys.builtin_module_names- 命名所有内置模块(在这里查看我的答案)pkgutil.iter_modules() - 返回有关所有可用模块的信息importlib.util.find_spec() - 返回有关导入模块的信息(如果存在)BuiltinImporter- 内置模块的导入器(docs)SourceFileLoader- 标准Python模块的导入程序(默认情况下具有扩展名*.py)(docs)ExtensionFileLoader- 作为共享库的模块的导入程序(在C或C++上编写)完整代码
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major == 2:
raise NotImplementedError('CPython 2 is not supported yet')
def main():
# name this file (module)
this_module_name = os.path.basename(__file__).rsplit('.')[0]
# dict for loaders with their modules
loaders = collections.OrderedDict()
# names`s of build-in modules
for module_name in sys.builtin_module_names:
# find an information about a module by name
module = importlib.util.find_spec(module_name)
# add a key about a loader in the dict, if not exists yet
if module.loader not in loaders:
loaders[module.loader] = []
# add a name and a location about imported module in the dict
loaders[module.loader].append((module.name, module.origin))
# all available non-build-in modules
for module_name in pkgutil.iter_modules():
# ignore this module
if this_module_name == module_name[1]:
continue
# find an information about a module by name
module = importlib.util.find_spec(module_name[1])
# add a key about a loader in the dict, if not exists yet
loader = type(module.loader)
if loader not in loaders:
loaders[loader] = []
# add a name and a location about imported module in the dict
loaders[loader].append((module.name, module.origin))
# pretty print
line = '-' * shutil.get_terminal_size().columns
for loader, modules in loaders.items():
print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))
for module in modules:
print('{0:30} | {1}'.format(module[0], module[1]))
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
用法
对于CPython3.5(截断)
$ python3.5 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast | built-in
_codecs | built-in
_collections | built-in
_functools | built-in
_imp | None
_io | built-in
_locale | built-in
_operator | built-in
_signal | built-in
_sre | built-in
_stat | built-in
_string | built-in
_symtable | built-in
_thread | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
227: <class '_frozen_importlib_external.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__ | /usr/local/lib/python3.5/__future__.py
_bootlocale | /usr/local/lib/python3.5/_bootlocale.py
_collections_abc | /usr/local/lib/python3.5/_collections_abc.py
_compat_pickle | /usr/local/lib/python3.5/_compat_pickle.py
_compression | /usr/local/lib/python3.5/_compression.py
_dummy_thread | /usr/local/lib/python3.5/_dummy_thread.py
_markupbase | /usr/local/lib/python3.5/_markupbase.py
_osx_support | /usr/local/lib/python3.5/_osx_support.py
_pydecimal | /usr/local/lib/python3.5/_pydecimal.py
_pyio | /usr/local/lib/python3.5/_pyio.py
_sitebuiltins | /usr/local/lib/python3.5/_sitebuiltins.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
64: <class '_frozen_importlib_external.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bisect | /usr/local/lib/python3.5/lib-dynload/_bisect.cpython-35m-x86_64-linux-gnu.so
_bz2 | /usr/local/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
_codecs_cn | /usr/local/lib/python3.5/lib-dynload/_codecs_cn.cpython-35m-x86_64-linux-gnu.so
_codecs_hk | /usr/local/lib/python3.5/lib-dynload/_codecs_hk.cpython-35m-x86_64-linux-gnu.so
_codecs_iso2022 | /usr/local/lib/python3.5/lib-dynload/_codecs_iso2022.cpython-35m-x86_64-linux-gnu.so
(****************************truncated*******************************)
Run Code Online (Sandbox Code Playgroud)
对于CPython3.4(截断)
$ python3.4 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
54: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast | built-in
_bisect | built-in
_codecs | built-in
_collections | built-in
_datetime | built-in
_elementtree | built-in
_functools | built-in
_heapq | built-in
_imp | None
_io | built-in
_locale | built-in
_md5 | built-in
_operator | built-in
_pickle | built-in
_posixsubprocess | built-in
_random | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246: <class '_frozen_importlib.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__ | /usr/lib/python3.4/__future__.py
_bootlocale | /usr/lib/python3.4/_bootlocale.py
_collections_abc | /usr/lib/python3.4/_collections_abc.py
_compat_pickle | /usr/lib/python3.4/_compat_pickle.py
_dummy_thread | /usr/lib/python3.4/_dummy_thread.py
_markupbase | /usr/lib/python3.4/_markupbase.py
_osx_support | /usr/lib/python3.4/_osx_support.py
_pyio | /usr/lib/python3.4/_pyio.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44: <class '_frozen_importlib.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bz2 | /usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so
_codecs_cn | /usr/lib/python3.4/lib-dynload/_codecs_cn.cpython-34m-x86_64-linux-gnu.so
_codecs_hk | /usr/lib/python3.4/lib-dynload/_codecs_hk.cpython-34m-x86_64-linux-gnu.so
_codecs_iso2022 | /usr/lib/python3.4/lib-dynload/_codecs_iso2022.cpython-34m-x86_64-linux-gnu.so
_codecs_jp | /usr/lib/python3.4/lib-dynload/_codecs_jp.cpython-34m-x86_64-linux-gnu.so
_codecs_kr | /usr/lib/python3.4/lib-dynload/_codecs_kr.cpython-34m-x86_64-linux-gnu.so
_codecs_tw | /usr/lib/python3.4/lib-dynload/_codecs_tw.cpython-34m-x86_64-linux-gnu.so
_crypt | /usr/lib/python3.4/lib-dynload/_crypt.cpython-34m-x86_64-linux-gnu.so
(****************************truncated*******************************)
Run Code Online (Sandbox Code Playgroud)
试试这些
pip list
Run Code Online (Sandbox Code Playgroud)
要么
pip freeze
Run Code Online (Sandbox Code Playgroud)
pip freeze可以完成所有工作,查找包。然而,我们可以简单地编写以下命令来列出 Python 包所在的所有路径。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1174577 次 |
| 最近记录: |