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.1.tar.gz (100.4 kB view details)

Uploaded Source

Built Distributions

pystack-1.4.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1-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.1.tar.gz.

File metadata

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

File hashes

Hashes for pystack-1.4.1.tar.gz
Algorithm Hash digest
SHA256 d0be5de225ed55bffa23e3f69bc2d562a13284fbc4c4e941b9313334c57c90cb
MD5 fbbe7fdc6f496a676c81705ec0f5f71a
BLAKE2b-256 9079acbbaa978d3d0acd5faf17cc73a8915216d40a7d206479976be56013f484

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp313-cp313-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 8c3e06780af96ef3861da0848dbb8e25cd15153485e29969b9fde4112362e7f4
MD5 f340097fd1860a91338f8159341973fd
BLAKE2b-256 6509b5384a79fcbd5a371e6f9f0458d7a91aa4fd19b130a58f2fbc8056d5d40c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d101fc34766fc1ea3e622b7bf85eb334a324e080bf349e3da50338a07009d1b7
MD5 0eed91d37e4098fd30e0c2938bf2bd0f
BLAKE2b-256 5273f8a644db3723c3fa52b0f50a6dacfebf6173fbd949e719d63c13cdd3d412

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 80b5333213f3d0ba200fa81f1651c3d5dfc38345c95b4f4f1427b833d19a4fb5
MD5 3707fd8b8da3def50398d5b94e7502a7
BLAKE2b-256 5e84545b70e10d6d447e67321e2dbff303b68d38fa2fee4c9495d3ba964d9ec9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 985ed3c9bd39ee545b7cada0e027cfa589f326c894c26a8fe11acd9b63cc931e
MD5 e4ed5dc7739b4059296e692f98f2f03d
BLAKE2b-256 b7b02b5a058386e18a73d486cbc9f5cde7fe40b35d9b0d24b0d91dfdd908088c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 efe075491b268db79465ba1459ff484810325db46de8effaf1fa1b204b1c9013
MD5 750f984bc0f8c4534130a60c477c15fb
BLAKE2b-256 4be7954e3d0341d0a55c09a86e4d44c627e6c4e449b5376a68e2cca8e8ee7341

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 38298acd75abdf6f36c3b390ac097e0d7e0d35b2f4dd92af6ce4f71b498ee825
MD5 f0f3fc3be36a64e5ca50746d7e6932bd
BLAKE2b-256 469f95c5d8a58fbdea7125244fac09844660f8f1a3982515e930bdcc882f47ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 2d1248cefef1bb288825775f7070e745eb358d0da0ab62de4ccdcec18054b6af
MD5 cc0ddad8ec1387d3c28bcaee641aca5f
BLAKE2b-256 46f3093168e040c5182250886aa7c53729111b0d278e66112bde51146882355c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a2ab4d140ed7e066170f0089019ad729a241be80d2fbceccc89fd295212d7751
MD5 f1df8428b26be6eb83effce13587114c
BLAKE2b-256 bc17a35ce925629b108e975ba12ffd4a16a3b3b7666421f6af5cec2f750b447a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4c28fac1be8598f0035431648f54348866a643b3b1721d0bf5ac393cbb64d2fa
MD5 dfa04b0fdce04d6804ed971243130b9c
BLAKE2b-256 d0936481daa6efc741f3674b006fae1604a702a77e5ce0a56f090bc9990ccda2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 fb7a002d2f2bdcca25b3cb442c6fbb120190308379c7255cd57aa4749bf51797
MD5 e17167d4ad17b9140cb15a2fd328495e
BLAKE2b-256 6cd0d16d8cdb7aa9740219922213ba3924c9c816a9e2b103678f71e13df5bc4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9449ea39dcf24b9460d09f7d9c95974d92aace5d23fb168eecd6c91843c34b63
MD5 4f9c9559276a82651fd2cdf6a4cf56c9
BLAKE2b-256 11ad89fc0a4271515e35c5081b6282af9f8abc1e6dd0583005da8ea8cef28f1d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 47a44beb5a406e5dadc8397b845ff17975753e9e298787784aa40b996604940b
MD5 b7699c7a48d289836b349db1608d77e6
BLAKE2b-256 b23837e264ef0f152a026c707364a98ba3fd7c02105e3e9a0dee7bc1fee1ddf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0c6ed38276bb17c6775199b9fa9747891f2939571485e6849a43dbe9fae1c90f
MD5 ccfb443213e3fdaa37ee05f03fba1097
BLAKE2b-256 5755965d73c86bd60d46ea712c327586df567b17ba0236e5d4b4954610cebbb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3ae3c48f3bbc80879be307c7f29f6198423c8afc03a8c32607657cb2add9aaea
MD5 fbbc889461766963db2b9accec5ffdc8
BLAKE2b-256 3d8526cac9cb60adae0e328dd47b1136f33d392133873b9b55a3213520f3c3a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fa520ca8fdb0edc2bc0b0e9fcc02cc4c685e4bcb6dd43dff10e4e0bbf1ea01b4
MD5 e85812549443edabe2d4a91fe0f1e464
BLAKE2b-256 c56c5287192c3a6e7a713cff23506c440bcf745b60425544722240414011167c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 25b80e6127ae551a91899198292d70356fbb325a28617eae0f7ed290743e4e6d
MD5 84c0ecf2475187e1db01e9bed3d78179
BLAKE2b-256 0cc107257bd063432c3b658352bd2261aa9a8598f6a2440fcf3c138d7f034d36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fae1fd1b2f27779b2a1cd005eec61fb30561f4eec38f4e4a83b9e0181e96a587
MD5 1024340794375c694bbd33fcd17d7279
BLAKE2b-256 cd3687f4588812b682b7f33ac1cdf0c75e6a04d103835b4bf4de9d64e15ebd62

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7f3d2e1fb8413a3c8d8f3ceeab41abf8dd118eb30092ebc543a1dd0d17af8248
MD5 658f1d94ab2dad047560426fab8e31ea
BLAKE2b-256 04911f7863923027a0f4391d186ef50e95434f383d249e92aeac21e28caec965

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 fd0bc75e85e76273d5f94530d2f95406645854e7106d39c9bf8b12118667cd3f
MD5 cfe16c6f02425a8e85273b512e3d70ca
BLAKE2b-256 fafd933ee1bda1e46a76a6d27cd0ffdf5adec6db6af04ed11e4ecbaec8fc7714

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 524cf12292d7eb713881a91adaf65cce13b710c25fec06c178f43632f05085f7
MD5 74864a05afb40422fd60259a25c8d045
BLAKE2b-256 91080f6753e40b0ce0a1925a80e42104dbe106b6ae8d8bbf363a067b68ed3705

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a8db21d05f461ef3a31c7bb2e8e67f424b18fc30ad2fbbff9061c6c1ae569e47
MD5 982b50a6587c538aae074818a88914ae
BLAKE2b-256 4b6f3160106781331dc9f8565c0f83d050949798e531956139d6752f9bf676d4

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