Python中是否有sessionInfo()等价物?

时间:2013-12-20 12:47:31

标签: python r ipython

通常我会使用R,而且当我想使用可重现的东西时,我会使用sessionInfo()。这样做的原因是我想让人们知道我正在使用的所有版本的版本以及我安装/加载的软件包以及我所使用的操作系统等等,以便它非常清楚。

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

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

3 个答案:

答案 0 :(得分:13)

以下内容将使您参与其中:

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'魔法'。这经常被要求,我们没有找到应该做什么和要求的妥协。

答案 1 :(得分:9)

更新2019-03-14

我最终为自己构建了一个名为sinfo的模块,以便在输出中具有更大的灵活性(例如,通过其他模块间接导入show modules),并可以在笔记本外部访问此功能。它可以通过pip install sinfo安装并使用如下:

import sinfo
sinfo.sinfo()

为您提供类似于

的输出
-----
natsort         5.3.3
numpy           1.15.2
pandas          0.23.4
-----
Python 3.6.8 |Anaconda custom (64-bit)| (default, Dec 30 2018, 01:22:34) [GCC 7.3.0]
Linux-4.20.1-arch1-1-ARCH-x86_64-with-arch
-----
Session information updated at 2019-02-03 02:31

原始答案

有一个名为version_information的神奇包可以完成此任务。使用pip install version_information安装。 (注意此扩展程序暂时没有更新,有一个名为watermark的更新版本

%load_ext version_information
%version_information pandas, numpy, seaborn

输出:

enter image description here

您还可以使用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 magic命令(所有引号都需要删除),所以也许有人可以改进通过添加该信息来回答这个问题。

答案 2 :(得分:0)

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()) 一起,了解该会话中运行的内容就足够了。