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

border-patrol的Python项目详细描述


ReadTheDocsCoverallsPyPI-Server

边境巡逻

Border Patrol会记录所有导入的包及其版本,以便在调试时为您提供支持。在95%的情况下 有些东西在生产中突然中断—这是由于您的某个需求中的某个不同版本造成的。固定 虚拟环境中所有依赖项和依赖项的版本有助于您克服 但这个问题相当麻烦,因此这种方法并不总是在实践中应用。有时,比如 您正在使用pyspark,可能无法100%确定某些群集节点上安装了哪些库版本。

有了边境巡逻队,你可以通过查看上一个工作版本的日志并进行比较,很容易找到罪犯 因为边境巡逻队会在 应用程序结束,即使它崩溃。

用法

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

fromborder_patrolimportwith_print_stdoutimportpandasaspd

如果在脚本中运行这些行,将得到与此类似的输出:

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   PATHborder_patrol   0.1       /Users/fwilhelm/Sources/border_patrol/src/border_patrolcycler          0.10.0    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/cycler.pydateutil        2.7.5     /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/dateutil/__init__.pymatplotlib      2.2.3     /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/matplotlib/__init__.pynumpy           1.15.1    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/numpy/__init__.pypandas          0.23.4    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/pandas/__init__.pypyparsing       2.3.0     /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/pyparsing.pypytz            2018.7    /Users/fwilhelm/anaconda/envs/lib/python3.6/site-packages/pytz/__init__.pysix             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}来使用边界巡逻。 例如,from border_patrol import with_log_info将使用INFO日志级别记录最终报告。

如果需要更细粒度的控制,可以直接从border_patrol包导入BorderPatrol类 使用register()unregister()方法分别激活和停用它。在任何时候 使用border_patrol.builtin_import可以避开跟踪。

它是如何工作的?

边境巡逻其实很简单。它覆盖python的builtins包中的__import__函数以跟踪 每个导入的模块。对于每个模块,将确定相应的包,并使用 大多数专业库在包级别提供的__version__属性的帮助。如果失败了 确定包的分发名称,例如scikit-learn是包含sklearn包的分发, 借助于pkg_resources,它是setuptools的一部分。然后使用分发名称来确定 版本号也使用pkg_resources,类似于pip的方式。

最后,border patrol注册了一个atexit处理程序,在应用程序完成并 报告所有导入的模块。为了避免多次登记这些东西时出现任何问题,边境巡逻队实施了 作为单例,因此它是not线程安全的。

此项目是使用Pyscaffold 3.1设置的。有关pyscaffold的详细信息和用法信息,请参见https://pyscaffold.org/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jsonify使用Jackson来定义嵌套对象   在Swing中禁用java图形调试   java Selenium Webdriver拖放在Jenkins上不起作用   java我对一个显示器的问题有一个非常不切实际的询问   java增强的“for”循环导致ArrayIndexOutOfBoundsException   ArrayAdapter适用于Java中的安卓编程,字符串数组   linux在Ubuntu上通过PulseAudio播放Java音频文件时出错   java在Spring应用程序中加载内部(类路径)和外部属性文件   java使用Maven连接到mySQL   Java应用程序的设计   websocket在电报api java中与dc的连接   java XMLStreamException,因为xml中的(&N)   java从控制台输出到JTextArea   Java导出文本文件   java实现parseInt方法   java为什么servlet容器会同步对特定资源/servlet的多个请求的访问?   循环中的Java“while”变量   用Java编程一个国际象棋游戏,gameOver布尔不起作用   java如何获得真正的JPanel大小?