Border-Patrol
Border-Patrol logs all imported packages and their version to support you while debugging. In 95% of all cases when something suddenly breaks in production it is due to some different version in one of your requirements. Pinning down the versions of all your dependencies and dependencies of dependencies inside a virtual environment helps you to overcome this problem but is quite cumbersome and thus this method is not always applied in practice. Also sometimes, like when you are using PySpark, you might not be 100% sure which library versions are installed on some cluster nodes.
With Border-Patrol you can easily find the culprit by looking in the logs of the last working version and compare it to the failing one since Border-Patrol will list all imported packages and their corresponding version right at the end of your application, even if it crashed.
Usage
Border-Patrol is really simple to use, just install it with pip install border-patrol
and import it before any other package, e.g.:
from border_patrol import with_print_stdout
import pandas as pd
If you run those lines in a script, you will get a similar output to this one:
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
If you import with_print_stdout, Border-Patrol will use print as output function whereas with_print_stderr will
print to standard error. Since most production applications will rather use the logging module, you can tell
Border-Patrol to use it by importing with_log_{error|warning|info|debug}.
For instance from border_patrol import with_log_info will log the final report by using the INFO logging level.
If you want even more fine grained control you can import the BorderPatrol class directly from the border_patrol package
and use the register() and unregister() method to activate and deactivate it, respectively. At any point the
tracking can be circumvented by using border_patrol.builtin_import.
How does it work?
Border-Patrol is actually quite simple. It overwrites the __import__ function in Python's builtins package to track
every imported module. For each module the corresponding package is determined and the version number is retrieved with
the help of the __version__ attribute which most professional libraries provide at the package level. If this fails
the distribution name for the package is determined, e.g. scikit-learn is the distribution containing the sklearn package,
with the help of pkg_resources which is a part of setuptools. Then the distribution name is used to determine the
version number also using pkg_resources, similar to how pip would do it.
Finally, Border-Patrol registers an atexit handler to be called when your application finishes and
reports all imported modules. To avoid any problem registering these things more than once, Border-Patrol is implemented
as a singleton and thus it is not thread-safe.
Note
This project has been set up using PyScaffold 3.1. For details and usage information on PyScaffold see https://pyscaffold.org/.
Metadata
Release files for border-patrol 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| border-patrol-1.0.1.tar.gz | 21.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| border_patrol-1.0.1-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 30.4 kB
Release files / border-patrol-1.0.1.tar.gz
| Download URL | border-patrol-1.0.1.tar.gz |
|---|---|
| Size | 21.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8461903f1b8aaebc31320a572cada340721697c9c5f64d98e2248e3dd774e9c6
|
|
BLAKE2b-256 checksum How to use checksums |
8e60ce258878f3d877a19b90db334404a322a7c5da3a007ca5e97f26c2250481
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.7.13
|
Release files / border_patrol-1.0.1-py2.py3-none-any.whl
| Download URL | border_patrol-1.0.1-py2.py3-none-any.whl |
|---|---|
| Size | 8.8 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
d24f066249cb62f62b14ca3aded8353dae9fd5a15ac7d1c713afcfe9c29cf35b
|
|
BLAKE2b-256 checksum How to use checksums |
0eb77c662ccd9a02ffee8a1a45c7161123112a31eca368a375e29687704b0ccc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.1 CPython/3.7.13
|
Security for border-patrol 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.