ecoutils -生态系统分析

随着编程生态系统的发展,运行时可变性的机会也随之增加。

对于高级编程环境,Python拥有最广泛的部署之一,这使其成为各种应用程序的可行目标。但广度带来了差异,所以知道你在使用什么是很重要的。

开发机器中常见的一些基本变体:

  • Executable runtime :CPython、PyPy、Jython等,外加构建日期和编译器

  • Language version :2.4,2.5,2.6,2.7...3.4、3.5、3.6

  • Host operating system :Windows、OS X、Ubuntu、Debian、CentOS、RHEL等

  • Features :64位、IPv6、Unicode字符支持(UCS-2/UCS-4)

  • Built-in library support :openssl、线程、SQLite、zlib

  • User environment :umaskulimit,工作目录路径

  • Machine info :CPU计数、主机名、文件系统编码

有关更多信息,请参阅下面的完整示例配置文件。

Eoutils是为了量化这种可变性而创建的。Eoutils快速生成关键运行时因素的信息密集型描述,副作用最小。简而言之,Eoutils类似于浏览器和用户代理分析,但适用于Python环境。

传输和收集

数据都是JSON可序列化的,适合发送到中央分析服务器。这方面的HTTPS支持的服务可以在https://github.com/mahmoud/espymetrics/上找到

值得注意的遗漏

由于空间限制(可能还有延迟限制),以下信息被认为不够密集,因此被省略:

兼容性

到目前为止,ecoutils已经在Python2.4、2.5、2.6、2.7、3.4、3.5和PyPy上进行了测试。各种版本已经在Ubuntu、Debian、RHEL、OS X、FreeBSD和Windows7上进行了测试。

备注

Bolton通常只支持返回到Python2.6,但由于其本质,ecoutils将向后兼容性扩展到了Python2.4和2.5。

配置文件生成

配置文件由以下人员生成 ecoutils.get_profile()

作为模块运行时,ecoutils将调用 get_profile() 并以JSON格式打印个人资料::

$ python -m boltons.ecoutils
{
  "_eco_version": "1.0.0",
  "cpu_count": 4,
  "cwd": "/home/mahmoud/projects/boltons",
  "fs_encoding": "UTF-8",
  "guid": "6b139e7bbf5ad4ed8d4063bf6235b4d2",
  "hostfqdn": "mahmoud-host",
  "hostname": "mahmoud-host",
  "linux_dist_name": "Ubuntu",
  "linux_dist_version": "14.04",
  "python": {
    "argv": "boltons/ecoutils.py",
    "bin": "/usr/bin/python",
    "build_date": "Jun 22 2015 17:58:13",
    "compiler": "GCC 4.8.2",
    "features": {
      "64bit": true,
      "expat": "expat_2.1.0",
      "ipv6": true,
      "openssl": "OpenSSL 1.0.1f 6 Jan 2014",
      "readline": true,
      "sqlite": "3.8.2",
      "threading": true,
      "tkinter": "8.6",
      "unicode_wide": true,
      "zlib": "1.2.8"
    },
    "version": "2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2]",
    "version_info": [
      2,
      7,
      6,
      "final",
      0
    ]
  },
  "time_utc": "2016-05-24 07:59:40.473140",
  "time_utc_offset": -8.0,
  "ulimit_hard": 4096,
  "ulimit_soft": 1024,
  "umask": "002",
  "uname": {
    "machine": "x86_64",
    "node": "mahmoud-host",
    "processor": "x86_64",
    "release": "3.13.0-85-generic",
    "system": "Linux",
    "version": "#129-Ubuntu SMP Thu Mar 17 20:50:15 UTC 2016"
  },
  "username": "mahmoud"
}

pip install boltons 你自己去试试吧!

boltons.ecoutils.get_profile(**kwargs)[源代码]

生态的主要入口点。调用它将返回有关当前进程的信息的JSON可序列化字典。

返回的信息不太可能在进程的生命周期内更改,而且在大多数情况下,大多数信息在两次运行之间也保持不变。

get_profile() 接受一个可选的关键字参数, scrub 一种 bool 如果是真的,那就把可识别的信息清空了。这包括当前工作目录、主机名、Python可执行文件路径、命令行参数和用户名。值被替换为‘-’,但兼容性键保持不变。