跳转到主要内容

记录所有导入的包及其版本

项目描述

Build Status ReadTheDocs Coveralls PyPI-Server Downloads Sponsor

Border-Patrol

Border-Patrol记录所有导入的包及其版本,以支持您在调试时的需要。在所有情况中有95%当生产中出现问题时,是由于要求中某个不同版本。在虚拟环境中固定所有依赖和依赖项的版本可以帮助您克服这个问题,但这相当繁琐,因此在实践中这种方法并不总是应用。此外,有时,比如当您使用PySpark时,您可能并不完全确定某些集群节点上安装了哪些库版本。

使用Border-Patrol,您可以通过查看最后一个正常版本和失败版本的日志来轻松找到罪魁祸首。Border-Patrol将在应用程序末尾列出所有导入的包及其对应版本,即使应用程序崩溃也是如此。

用法

Border-Patrol使用非常简单,只需使用pip install border-patrol进行安装,并在导入任何其他包之前导入它,例如:

from border_patrol import with_print_stdout

import pandas as pd

如果您在脚本中运行这些行,您将得到类似于以下输出的结果:

Python version is 3.6.7 |Anaconda, Inc.| (default, Oct 23 2018, 14:01:38)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]
Following packages were imported:
PACKAGE         VERSION   PATH
border_patrol   0.1       /Users/fwilhelm/Sources/border_patrol/src/border_patrol
cycler          0.10.0    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/cycler.py
dateutil        2.7.5     /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/dateutil/__init__.py
matplotlib      2.2.3     /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/matplotlib/__init__.py
numpy           1.15.1    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/numpy/__init__.py
pandas          0.23.4    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/pandas/__init__.py
pyparsing       2.3.0     /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/pyparsing.py
pytz            2018.7    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/pytz/__init__.py
six             1.11.0    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/six.py

如果您导入with_print_stdout,Border-Patrol将使用print作为输出函数,而with_print_stderr将输出到标准错误。由于大多数生产应用程序更可能使用logging模块,您可以通过导入with_log_{error|warning|info|debug}来告诉Border-Patrol使用它。例如,from border_patrol import with_log_info将使用INFO日志级别记录最终报告。

如果您希望有更细粒度的控制,可以直接从border_patrol包中导入BorderPatrol类,并使用register()unregister()方法分别激活和停用它。在任何时候,都可以使用border_patrol.builtin_import来绕过跟踪。

它是如何工作的?

Border-Patrol实际上非常简单。它覆盖了Python的builtins包中的__import__函数来跟踪每个导入的模块。对于每个模块,都会确定相应的包,并使用大多数专业库在包级别提供的__version__属性来检索版本号。如果失败,将使用pkg_resources(它是setuptools的一部分)来确定包的发行名称,例如,scikit-learn是包含sklearn包的发行版。然后使用pkg_resources来确定版本号,类似于pip的方式。

最后,Border-Patrol注册了一个atexit处理程序,在您的应用程序完成后调用,并报告所有导入的模块。为了避免注册这些内容多次而引起的问题,Border-Patrol实现为单例,因此它不是线程安全的。

注意

该项目使用PyScaffold 3.1进行设置。有关PyScaffold的详细信息和使用信息,请参阅https://pyscaffold.org/

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

border-patrol-1.0.1.tar.gz (21.6 kB 查看哈希值)

上传时间

构建分布

border_patrol-1.0.1-py2.py3-none-any.whl (8.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面