Skip to main content

Analysis of the stack of remote python processes

Project description


OS Linux PyPI - Python Version PyPI - Implementation PyPI PyPI - Downloads Tests Code Style

PyStack

Print the stack trace of a running Python process, or of a Python core dump.

PyStack is a tool that uses forbidden magic to let you inspect the stack frames of a running Python process or a Python core dump, helping you quickly and easily learn what it's doing (or what it was doing when it crashed) without having to interpret nasty CPython internals.

What PyStack can do

PyStack has the following amazing features:

  • 💻 Works with both running processes and core dump files.
  • 🧵 Shows if each thread currently holds the Python GIL, is waiting to acquire it, or is currently dropping it.
  • 🗑️ Shows if a thread is running a garbage collection cycle.
  • 🐍 Optionally shows native function calls, as well as Python ones. In this mode, PyStack prints the native stack trace (C/C++/Rust function calls), except that the calls to Python callables are replaced with frames showing the Python code being executed, instead of showing the internal C code the interpreter used to make the call.
  • 🔍 Automatically demangles symbols shown in the native stack.
  • 📈 Includes calls to inlined functions in the native stack whenever enough debug information is available.
  • 🔍 Optionally shows the values of local variables and function arguments in Python stack frames.
  • 🔒 Safe to use on running processes. PyStack does not modify any memory or execute any code in a process that is running. It simply attaches just long enough to read some of the process's memory.
  • ⚡ Optionally, it can perform a Python stack analysis without pausing the process at all. This minimizes impact to the debugged process, at the cost of potentially failing due to data races.
  • 🚀 Super fast! It can analyze core files 10x faster than general-purpose tools like GDB.
  • 🎯 Even works with aggressively optimized Python interpreter binaries.
  • 🔍 Even works with Python interpreters' binaries that do not have symbols or debug information (Python stack only).
  • 💥 Tolerates memory corruption well. Even if the process crashed due to memory corruption, PyStack can usually reconstruct the stack.
  • 💼 Self-contained: it does not depend on external tools or programs other than the Python interpreter used to run PyStack itself.

What platforms are supported?

At this time only Linux is supported.

Building from source

If you wish to build PyStack from source, you need the following binary dependencies in your system:

  • libdw
  • libelf

Note that sometimes both libraries are provided together as part of a distribution's elfutils package.

Check your package manager on how to install these dependencies (e.g., apt-get install libdw-dev libelf-dev in Debian-based systems). Note that you may need to tell the compiler where to find the header and library files of the dependencies for the build to succeed. If pkg-config is available (e.g. apt-get install pkg-config on Debian-based systems), it will automatically be used to locate the libraries and configure the correct build flags. Check your distribution's documentation to determine the location of the header and library files or for more detailed information. When building on Alpine Linux (or any other distribution that doesn't use glibc) you'll need elfutils 0.188 or newer. You may need to build this from source if your distribution's package manager doesn't have it.

Once you have these binary dependencies installed, you can clone the repository and follow the typical build process for Python libraries:

git clone git@github.com:bloomberg/pystack.git pystack
cd pystack
python3 -m venv ../pystack-env/  # just an example, put this wherever you want
source ../pystack-env/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -e .
python3 -m pip install -r requirements-test.txt -r requirements-extra.txt

This will install PyStack in the virtual environment in development mode (the -e of the last pip install command), and then install the Python libraries needed to test it, lint it, and generate its documentation.

If you plan to contribute back, you should install the pre-commit hooks:

pre-commit install

This will ensure that your contribution passes our linting checks.

Documentation

You can find the full documentation here.

Usage

PyStack uses distinct subcommands for analyzing running processes and core dump files.

usage: pystack [-h] [-v] [--no-color] {remote,core} ...

Get Python stack trace of a remote process

options:
  -h, --help     show this help message and exit
  -v, --verbose
  --no-color     Deactivate colored output

commands:
  {remote,core}  What should be analyzed by PyStack (use <command> --help for a command-specific help section).
    remote       Analyze a remote process given its PID
    core         Analyze a core dump file given its location and the executable

Analyzing running processes

The remote command is used to analyze the status of a running (remote) process. The analysis is always done in a safe and non-intrusive way, as no code is loaded in the memory space of the process under analysis and no memory is modified in the remote process. This makes analysis using PyStack a great option even for those services and applications that are running in environments where the running process must not be impacted in any way (other than being temporarily paused, though --no-block can avoid even that). There are several options available:

usage: pystack remote [-h] [-v] [--no-color] [--no-block] [--native] [--native-all] [--locals] [--exhaustive] pid

positional arguments:
  pid            The PID of the remote process

options:
  -h, --help     show this help message and exit
  -v, --verbose
  --no-color     Deactivate colored output
  --no-block     do not block the process when inspecting its memory
  --native       Include the native (C) frames in the resulting stack trace
  --native-all   Include native (C) frames from threads not registered with the interpreter (implies --native)
  --locals       Show local variables for each frame in the stack trace
  --exhaustive   Use all possible methods to obtain the Python stack info (may be slow)

To use PyStack, you just need to provide the PID of the process:

$ pystack remote 112
Traceback for thread 112 [] (most recent call last):
    (Python) File "/test.py", line 17, in <module>
        first_func()
    (Python) File "/test.py", line 6, in first_func
        second_func()
    (Python) File "/test.py", line 10, in second_func
        third_func()
    (Python) File "/test.py", line 14, in third_func
        time.sleep(1000)

Analyzing core dumps

The core subcommand is used to analyze the status of a core dump file. Analyzing core files is very similar to analyzing processes but there are some differences, as the core file does not contain the totality of the memory that was valid when the program was live. In most cases, this makes no difference, as PyStack will try to adapt automatically. However, in some cases, you will need to specify extra command line options to help PyStack locate the information it needs. When analyzing cores, there are several options available:

usage: pystack core [-h] [-v] [--no-color] [--native] [--native-all] [--locals] [--exhaustive] [--lib-search-path LIB_SEARCH_PATH | --lib-search-root LIB_SEARCH_ROOT] core [executable]

positional arguments:
  core                  The path to the core file
  executable            (Optional) The path to the executable of the core file

options:
  -h, --help            show this help message and exit
  -v, --verbose
  --no-color            Deactivate colored output
  --native              Include the native (C) frames in the resulting stack trace
  --native-all          Include native (C) frames from threads not registered with the interpreter (implies --native)
  --locals              Show local variables for each frame in the stack trace
  --exhaustive          Use all possible methods to obtain the Python stack info (may be slow)
  --lib-search-path LIB_SEARCH_PATH
                        List of paths to search for shared libraries loaded in the core. Paths must be separated by the ':' character
  --lib-search-root LIB_SEARCH_ROOT
                        Root directory to search recursively for shared libraries loaded into the core.

In most cases, you just need to provide the location of the core to use PyStack with core dump files:

$ pystack core ./the_core_file
Using executable found in the core file: /usr/bin/python3.8

Core file information:
state: t zombie: True niceness: 0
pid: 570 ppid: 1 sid: 1
uid: 0 gid: 0 pgrp: 570
executable: python3.8 arguments: python3.8

The process died due receiving signal SIGSTOP
Traceback for thread 570 [] (most recent call last):
    (Python) File "/test.py", line 19, in <module>
        first_func({1: None}, [1,2,3])
    (Python) File "/test.py", line 7, in first_func
        second_func(x, y)
    (Python) File "/test.py", line 12, in second_func
        third_func(x, y)
    (Python) File "/test.py", line 16, in third_func
        time.sleep(1000)

License

PyStack is Apache-2.0 licensed, as found in the LICENSE file.

Code of Conduct

This project has adopted a Code of Conduct. If you have any concerns about the Code, or behavior that you have experienced in the project, please contact us at opensource@bloomberg.net.

Security Policy

If you believe you have identified a security vulnerability in this project, please send an email to the project team at opensource@bloomberg.net, detailing the suspected issue and any methods you've found to reproduce it.

Please do NOT open an issue in the GitHub repository, as we'd prefer to keep vulnerability reports private until we've had an opportunity to review and address them.

Contributing

We welcome your contributions to help us improve and extend this project!

Below you will find some basic steps required to be able to contribute to the project. If you have any questions about this process or any other aspect of contributing to a Bloomberg open source project, feel free to send an email to opensource@bloomberg.net and we'll get your questions answered as quickly as we can.

Contribution Licensing

Since this project is distributed under the terms of an open source license, contributions that you make are licensed under the same terms. For us to be able to accept your contributions, we will need explicit confirmation from you that you are able and willing to provide them under these terms, and the mechanism we use to do this is called a Developer's Certificate of Origin (DCO). This is similar to the process used by the Linux kernel, Samba, and many other major open source projects.

To participate under these terms, all that you must do is include a line like the following as the last line of the commit message for each commit in your contribution:

Signed-Off-By: Random J. Developer <random@developer.example.org>

The simplest way to accomplish this is to add -s or --signoff to your git commit command.

You must use your real name (sorry, no pseudonyms, and no anonymous contributions).

Steps

  • Create an Issue, select 'Feature Request', and explain the proposed change.
  • Follow the guidelines in the issue template presented to you.
  • Submit the Issue.
  • Submit a Pull Request and link it to the Issue by including "#" in the Pull Request summary.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pystack-1.4.0.tar.gz (100.3 kB view details)

Uploaded Source

Built Distributions

pystack-1.4.0-cp313-cp313-musllinux_1_1_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.13 musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.13 manylinux: glibc 2.17+ ARM64

pystack-1.4.0-cp312-cp312-musllinux_1_1_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

pystack-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

pystack-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pystack-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pystack-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pystack-1.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pystack-1.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pystack-1.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

File details

Details for the file pystack-1.4.0.tar.gz.

File metadata

  • Download URL: pystack-1.4.0.tar.gz
  • Upload date:
  • Size: 100.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for pystack-1.4.0.tar.gz
Algorithm Hash digest
SHA256 9308a66f5f7cd4895a0d06e25839bac1686a10757bc4da3c303cbec957e4d4a8
MD5 07c53ff54caad2c0e8fe25bdcba11110
BLAKE2b-256 2d040d0a12c26656b70b3bc93b4e485a32dcd6a131b50a884b6433c5e21bbfe8

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp313-cp313-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp313-cp313-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8ca5ff3530e0011d4331c271b6a57c5079c246acd1f7ef104fcd39d11bf3dad1
MD5 d16924f15cd35eb34223cab2744afc08
BLAKE2b-256 ca49a675ff0319ed2d868b9b6225d06f9c554cb692ee89ac8615466efef47fdd

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f554e3016ea9c250bfc9656d100d42db945f6a0c3e42acdd57753ce0e5018a79
MD5 2a63bb90718efdef366ea465a6e03090
BLAKE2b-256 aec747ff9083e923ed3123b5ad45cab8252dbf91770de72e360cd4ca34148ef7

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 686c1cf7111e937ef9cf81b95414e785434874f1105b4fb21d4a18af949420d7
MD5 542f76ee3847a59853238cfd003f6780
BLAKE2b-256 29f9890fecc29ec841142c751d5cbee59db42cd424398f6f5819768d2f8886ef

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f3c8dd5485ea4a9e7637665ab075b3ac0fad4ea43bed89d29297a7b1008d58ba
MD5 74e6b970f33a009c216e9a2dbdf94b40
BLAKE2b-256 6ab8b7847550b5745c8f51afec2336c21a7a8c5f14c38108bd1a272f0834ddfe

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 35a18ff8f7a5110afa0d6a93da3a6f51effd6de0ac17cace9e49d068d6906e9e
MD5 741f19f6760af965ada1bfe609763847
BLAKE2b-256 1d38b6598b28c6dc1c250d4fc397bbfe5d342309a66e981153b47998428e6c37

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 99705f2fcb8d79f363e5c6d9e8826afb4ef0b7c2533e4b63c526144b43bee839
MD5 05415dc5770a87d24451a674dcaaf894
BLAKE2b-256 c8c28958f1497321015b9f93ff319dafabfa477615e80df70fe0b1683eead163

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 9aadad12b061920418fc7e6e9599e971e0e0efb1e4b58f2a5f3a418783a284a6
MD5 f2a8d583f52168d69780737bc49e4f08
BLAKE2b-256 b3c0f5df3a5fe93774cc6b407dfdf02816b34833b6e8f3fe9366d23922ff7284

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8c65972dbd441d6986b9eb16559b6bdd3f4494344a74184f5b5b9a26224adc7e
MD5 63265a4bb8078b3b6c024543dd385cb1
BLAKE2b-256 d6ee698eee058528b9f31006a4bd1d6d38e2d8ffc705f9033909436b4413b003

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc9d62f231a4da71055735cd4c3aa10ec02848bc4b2f05eb9ff50cec7faf9916
MD5 13cd2cf8ea710e729d38bb880b8a6124
BLAKE2b-256 430a1c2a741c0213b23299feb6608ad969fd8cf67efb1724cf22a3207a8d5f51

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 88fa5ebd857d83fce766d84b5f515aa98a82d7574b28ff813f7f785808484572
MD5 a3bf538dd1478d97f7f22bfe1b83c22f
BLAKE2b-256 1c41f0bb19be18acef0219db219b7b9788d1e19f24085bf7ddc7b6cd718a70af

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c85a9ecb79c8e2a778e5fa15f3815dd72acec93e39d4875f43c4d6ff897dd3d6
MD5 82b86c2c37dec154bb328fbb7fa2ca41
BLAKE2b-256 d666de54f7606582608c3d2d1aa3805e3184e1a06c5b1fdbd24e4125969e3442

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1ba8832b325754a80eb370339c9f36e58d1248e773f96ebbea7b032a7fd9a092
MD5 d6d5580cf4cc2331f009c09cc590b39a
BLAKE2b-256 c85450125f4b1526bdd2aa696d997615d182524bacac205a295f181adc5fb993

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 20c43d11a9c18af5561015ecb6b2628d7b869aeefb02240563ed423bc664661c
MD5 8a3524ce60d02a2f55ad3109d75b157d
BLAKE2b-256 583ff8c9bf4e0cf6a43f936d167b620aec5c6134b1a45ae4e92114bf88124e68

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 da78a23b67caed1fdadb235309cb8a9aae90efa23b3b9c493901bbde95dea86e
MD5 4a103c2f0af744126d0d15eddeeaae9c
BLAKE2b-256 db9c3c5cfe57ea0f492dd7fa05bc01b101146d2d75ea106e561443ef3760b5e9

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7f0ffde5f1a4a4be49da3f30b8a3b15360eaa4cff163f43a423884c2689ad81d
MD5 72c5449baaaff98e424690e02bc43a9b
BLAKE2b-256 245357d0cc11411f14e6b5f3e56b679eebda6b64bd6f69437fe16af7ccfa2ae3

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 44dddb8821be6ae460a13b086b45d9b8e8d4e6c139b48108c98f4ec31b8698d0
MD5 a8976069406d4663a46c33075ee17b7c
BLAKE2b-256 535cdb413948b38740d56e79c5dbca9ae2154d10b638e8a49ee724e089b4703f

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a69909cdf0216db32b0aaa6a4e19e656ea67ec1f556e32d8a355e59e51747b67
MD5 93cfbc8b49c1464c01aa4a86c8080216
BLAKE2b-256 47a1c901bc7d02b587a44b188c267170e19585c6d3992cf9e8c5ffe8e5a806a8

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f9b8856e9e4922e37b316ac3054b91ef11491674ae788523d6e6f3598a2bce39
MD5 630d40b82262480e25700936a085dffd
BLAKE2b-256 8d765eb216c7897372f3a087a188dfaa922b039e4d5921e11c6f57ddd322c9d8

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 3efe95653cfbf3166bb03860d89e0e3309d645463a20acf78f26f3e92745ccbe
MD5 89392a8ce1f18f840310f89a138cb979
BLAKE2b-256 d9f665e5f2602ff34d4220a2c7837fdad65e83aee47891c237adf8d13eb59004

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bf795b265e498fe89a57f85a7e79242aca8fedcc69e22d4fe698931a2195249a
MD5 b5a127b23e5bc0f8447921c2917a6d41
BLAKE2b-256 c0be4825e4a533d10d087b116d55caa9142840e737d90834c4d84f9f3d1ac50e

See more details on using hashes here.

File details

Details for the file pystack-1.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 32447c87ee2cbe66ac382a244e16dbcbdc576fcd015f681a86bfb680fe0411ee
MD5 3c6fe616b94d17ebbcd5717c08df3176
BLAKE2b-256 356ebcfd630bf492bb9bad42b4ffe63ac034f487618092eed0b1852f23f5fcec

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page