获取所有已加载的python软件包和版本以及变量的列表

时间:2019-05-31 23:04:01

标签: python

我来自R背景,很容易为我找出我正在使用的所有已加载软件包。我可以查看我的rstudio选项卡的“程序包”,并在程序包名称和版本旁边看到对勾标记,以显示我已加载/可用的内容。

我可以跑步:

library(dplyr)
x=3;
y=4;

然后运行以找出我已加载的软件包('dplyr):  sessionInfo() 如果不想查看加载的变量痛苦(x,y),就可以找出环境中存在哪些变量

ls() 

我正在尝试找出一种在python中执行此操作的方法。例如,是否有一条命令会:

  1. 告诉我一切我可以导入的python软件包及相应的版本?
  2. 告诉我到目前为止我在会话中已经加载的软件包及其对应的版本?
  3. 告诉我我已定义的所有变量及其类型(例如熊猫数据框,列表,字典,函数等)

我敢肯定这很简单,但是我似乎找不到从R来的简单方法。

3 个答案:

答案 0 :(得分:1)

  

告诉我一切我可以导入的python包和对应的版本?

help('modules')

注意:您也可以在命令行上输入pip freeze,以查看使用pip安装了哪些第三方模块。 (如果您有多个Python版本,并希望确保列出与python -m pip freeze相同版本的软件包,请使用python。)但是,此列表并不完整,因为它不包含内置的模块和您自己的模块。

  

告诉我到目前为止我在会话中已经加载的软件包及其对应的版本?

我认为这不可能,但请参见下一个问题:

  

告诉我我已经定义的所有变量及其类型(例如熊猫数据框,列表,字典,函数等)

globals()

这还包括所有已加载的模块。您可以根据需要过滤掉“模块”。

答案 1 :(得分:1)

1。通常不可能。导入语句在执行该行时会动态处理,因此结果取决于当时文件系统上的内容。

通过查看site-packages dir,您可以对可用的内容有一个不错的了解,该目录的位置取决于平台,但可以在下面的代码段中找到:

>>> import sysconfig
>>> sysconfig.get_paths()['purelib']
'/usr/local/lib/python3.7/site-packages'

标准库始终可用。以下库文档中提供了stdlib模块的完整列表:https://docs.python.org/3/library/

pkgutil.walk_packages()中有一个辅助函数,该函数实际上将遍历sys路径并查找可访问的模块。我相信其他答案中列出的pydoc的help("modules")实际上在内部使用了此帮助程序。

pip freeze将显示安装在虚拟环境中的发行版。

2。只需查看sys.modules 。模块的版本号不是必需的,甚至可能不存在,但是通用约定是顶级模块具有__version__属性。

3。这是内置函数vars只需不带任何参数调用vars(),它将返回名称和对象的映射。您只需使用type(obj)就可以看到对象的类型。

答案 2 :(得分:0)

您可以使用sys.modules获取当前已加载的模块。这意味着您可以使用以下代码来打印当前加载的模块及其版本:

import sys

for module in sys.modules.values():
    if hasattr(module, "__version__"):
        print(module.__name__, module.__version__)
    else:
        print(module.__name__)

模块不是必须提供__version__属性,因此在使用它之前必须检查它是否存在。标准库中的大多数模块都没有提供版本,尽管有趣的是,有些模块提供的版本与当前的Python版本不同。

一个警告是,您可以使用importlib加载模块而不将其添加到sys.modules中,因此不能保证sys.modules在100%的时间内都是准确的。