2013-12-20 213 views
17

通常情况下,我使用R,并且通常在想使事物可重复使用时使用sessionInfo()。原因是我喜欢让人们知道我使用的是什么版本,我已经安装/加载了哪些软件包,以及我在哪些操作系统等等,以便它很清楚。在Python中是否有sessionInfo()等价物?

sessionInfo返回R的版本,处理器类型(例如32/64位x86),操作系统,语言环境详细信息以及哪些软件包已加载。

我是新来的python,想知道是否有相当于Python?我希望在IPython的笔记本使用它...

+0

可能重复的[如何列出导入的模块?](http://stackoverflow.com/questions/4858100/how-to-list-imported-modules) –

+2

可能,但它不提供版本,操作系统,或python版本 –

+1

@hlm没有内建/标准方式。但是,你可以尝试这个https://gist.github.com/tahajahangir/5275848#file-pyinfo-py – thefourtheye

回答

10

下面将让你们分开有:

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的“魔法”与它帮助之前得到解决的东西。这是经常要求的,我们不是肯定会找到应该做什么和要求的妥协。

+0

做pip冻结在Windows上工作? –

+0

我没有线索,如果它。 – Matt

4

有一个称为version_information的魔术包完成了这个。用pip install version_information安装。

%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魔命令(所有引号需要被移除),所以也许有人可以通过添加该信息来改善这个答案。

相关问题