当前位置: 首页 > 面试题库 >

如何获取本地安装的Python模块列表?

马泰
2023-03-14
问题内容

我想要获取Python模块的列表,这些模块在我的Python安装(UNIX服务器)中。

如何获得计算机中安装的Python模块的列表?


问题答案:

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)

作为(太长)一行:

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

给予:

['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']

范围

该解决方案适用于系统范围或到虚拟环境范围,和封面封装安装通过setuptools,pip以及(但愿)easy_install

我的用例

我将此调用的结果添加到了我的Flask服务器中,因此,当我用它调用它时,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) $ 
克隆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.

我们的行为的setup.py/tmp/behave

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py

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

如果我们从 /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'

如果我们从 /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'

behave==1.2.5a1第二个示例中缺少,因为工作目录包含behave的setup.py文件。

我在文档中找不到对此问题的任何引用。也许我会为此打开一个错误。



 类似资料:
  • 问题内容: 我想获取python中内置模块名称的列表,以便可以测试函数的命名约定(下划线,CamelCase或mixedCase)的流行程度。 我知道有一个全局模块索引,但我想知道是否有一个字符串列表,它更易于使用:) 更新: 问题答案: 编译的模块名称在中。有关所有可导入模块,请参见。 干净地运行它们,以(仅)获取Python本身随附的模块。 请注意,“人气调查”将必然包括使用旧的,不鼓励使用的

  • 问题内容: 我有一个下载的模块库,我想在本地安装它,而不是在另一个目录中全局安装? 有什么简单的方法可以做到这一点? 问题答案: 您只需为提供一个参数,则该参数应指向本地文件夹而不是包名称:

  • 问题内容: 我想检测模块是否已更改。现在,使用inotify很简单,您只需要知道要从中获取通知的目录即可。 如何在python中检索模块的路径? 问题答案: 实际上,至少在Mac OS X上,将为你提供已加载的.pyc文件的路径。因此,我想你可以这样做: 你也可以尝试: 获取模块的目录。

  • 问题内容: 假设我具有以下文件结构: data.py core.py 我需要获取data.py文件中定义的所有变量。我该如何实现?我可以使用,但是它返回模块的所有属性,包括等等。 问题答案: 通常是这样做的秘诀,但这引出了问题。

  • 问题内容: 除了标准库,我想要类似的东西。其他无效的东西: -仅显示已加载的模块 -包含非标准库模块EDIT的路径,并且似乎在virtualenv中不起作用。 我想要此列表的原因是可以将其传递给http://docs.python.org/library/trace.html的或命令行选项 因此,最终,我想知道在使用或时如何忽略所有标准库模块。 编辑:我希望它在virtualenv内部工作。htt

  • 我正在尝试在我的计算机上安装新的python模块,我知道如何通过终端安装,但我想知道是否有办法直接通过VSCode安装新模块(就像在PyCharm上一样)? 我已经通过终端安装了,这不成问题,但是我想在我处理VSCode的时候不需要打开终端就可以安装。