【问题标题】:Is there a sessionInfo() equivalent in Python?Python 中是否有 sessionInfo() 等价物?
【发布时间】:2014-01-09 08:04:40
【问题描述】:

我通常使用 R,并且经常在想要使事情可重复时使用sessionInfo()。这样做的原因是我喜欢让人们知道我正在使用的所有内容的版本,我安装/加载的软件包以及我正在使用的操作系统等,这样就很清楚了。

sessionInfo 返回 R 的版本、处理器类型(例如 32/64 位 x86)、操作系统、区域设置详细信息以及已加载的包。

我是 python 新手,想知道是否有 Python 的等价物?我希望在 iPython Notebook 中使用它...

【问题讨论】:

标签: python r ipython


【解决方案1】:

Conda 相关答案

由于我经常使用 conda(而不是 pip)安装和运行 jupyter-notebooks,因此我将把它留在这里,以防它对其他人有帮助。在我的笔记本末尾,我通常有一个单元格:

!conda list

# packages in environment at /path/to/my/conda_env:
#
# Name                    Version                   Build  Channel
_r-mutex                  1.0.1               anacondar_1    conda-forge
appnope                   0.1.2            py39h6e9494a_1    conda-forge
argon2-cffi               20.1.0           py39hcbf5805_2    conda-forge
async_generator           1.10                       py_0    conda-forge
attrs                     21.2.0             pyhd8ed1ab_0    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
...

import IPython; print(IPython.sys_info()) 一起知道该会话中运行了什么就足够了。

【讨论】:

    【解决方案2】:

    2019-03-14 更新

    我最终为此自己构建了一个名为 session_info 的包,以便在输出中具有更大的灵活性(例如,显示通过其他模块间接导入的模块)并可以在笔记本之外访问此功能。它可以通过pip install session-info 安装并像这样使用:

    # Some sample imported modules
    import math
    
    import natsort
    import pandas
    import session_info
    
    
    session_info.show()
    

    它为您提供类似于

    的输出
    Session information:
    -----
    natsort             7.1.1
    pandas              1.2.2
    session_info        1.0.0
    -----
    IPython             7.23.0
    jupyter_client      6.1.12
    jupyter_core        4.7.1
    -----
    Python 3.9.2 | packaged by conda-forge | (default, Feb 21 2021, 05:02:46) [GCC 9.3.0]
    Linux-5.11.13-arch1-1-x86_64-with-glibc2.33
    -----
    Session information updated at 2021-05-06 09:59
    

    原答案

    有一个名为version_information 的魔术包可以完成此任务。使用pip install version_information 安装。 (注意这个扩展已经有一段时间没有更新了,有一个更新的叫做watermark

    %load_ext version_information
    %version_information pandas, numpy, seaborn
    

    输出:

    您也可以使用How to list imported modules? 中的解决方案和!pip freeze 完成类似的操作。

    #find the names of the imported modules
    import types
    def imports():
        for name, val in globals().items():
            if isinstance(val, types.ModuleType):
                yield val.__name__
    
    #exclude all modules not listed by `!pip freeze`
    excludes = ['__builtin__', 'types', 'IPython.core.shadowns', 'sys', 'os']
    imported_modules = [module for module in imports() if module not in excludes]
    pip_modules = !pip freeze #you could also use `!conda list` with anaconda
    
    #print the names and versions of the imported modules
    for module in pip_modules:
        name, version = module.split('==')
        if name in imported_modules:
            print(name + '\t' + version)
    

    输出:

    pandas  0.16.2
    numpy   1.9.2
    seaborn 0.5.1
    

    我不知道如何将带有导入模块的列表(例如modulenames)传递给%version_information 魔术命令(所有引号都需要删除),所以也许有人可以通过添加来改进这个答案那个信息。

    【讨论】:

      【解决方案3】:

      以下内容会让你分开:

      In [1]: import IPython
      In [2]: print IPython.sys_info()
      {'codename': 'Work in Progress',
       'commit_hash': '4dd36bf',
       'commit_source': 'repository',
       'default_encoding': 'UTF-8',
       'ipython_path': '/Users/matthiasbussonnier/ipython/IPython',
       'ipython_version': '2.0.0-dev',
       'os_name': 'posix',
       'platform': 'Darwin-11.4.2-x86_64-i386-64bit',
       'sys_executable': '/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python',
       'sys_platform': 'darwin',
       'sys_version': '2.7.6 (default, Nov 28 2013, 17:25:22) \n[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)]'}
      

      否则没有标准方法来获取导入模块的版本。 pip freeze 将在您的机器上为您提供大部分已安装的模块版本:

      In [3]: !pip freeze
      Cython==0.20dev
      Django==1.4.2
      Fabric==1.7.0
      Flask==0.9
      Flask-Cache==0.10.1
      Flask-Markdown==0.3
      Flask-SQLAlchemy==0.16
      Jinja2==2.7.1
      Logbook==0.6.0
      ...
      

      这是我们认为应该在 Python 中解决的问题,然后再让 IPython 成为“魔法”来帮助它。这经常被要求,但我们还没有找到应该做什么和要求是什么的折衷方案。

      【讨论】:

      • 我没有任何线索。
      • 这是旧评论,但对其他人来说,确实如此:)
      猜你喜欢
      • 2021-03-29
      • 2012-07-17
      • 2012-06-14
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多