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

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pystack-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pystack-1.6.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp314-cp314-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl (7.9 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

pystack-1.6.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.0 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pystack-1.6.0-cp38-cp38-musllinux_1_2_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pystack-1.6.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pystack-1.6.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

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

File metadata

  • Download URL: pystack-1.6.0.tar.gz
  • Upload date:
  • Size: 102.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pystack-1.6.0.tar.gz
Algorithm Hash digest
SHA256 bcf9d9a46129e36856852526e753aad2f3d19e827bd8feb875cf0c8d0e2ad6b2
MD5 09f3ce1a114cb6c35ee0d28cc1d79eda
BLAKE2b-256 66ab97d2f0eee21be7cf2b10b81eac7ea0904b2879177b974cbf99f8bb51d341

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9c1870d6f857ff28f2ffb35abf7f8bfd254c46d756e8723d74b1c138154121ec
MD5 50e82c23bff8369b73c3418cbc188cf9
BLAKE2b-256 f64238c304130e4680fa2a1ce3f7d921c315035eb7abcd6d61ee302e3810105c

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3c5a5e1279cece733611dabf2c88b09847baf2a5a236a892f0c8d2f402133e01
MD5 ed14476a70adcae3be08bae53423e869
BLAKE2b-256 492e71c761ef244a46258be761f0ab9bf87bdf6b51e470c2dd399cbb176c3974

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2695d583fa963d4e22ca19ed5f1386f9170fedb571a4f4291a684c47b9418511
MD5 ee706688ea62011b2730df5cd33ced33
BLAKE2b-256 248303995c0f85f2b20d49fd1e809cbae20fd60ac53dfa9e75296948967825d8

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 566361c037421655172910c45e5c2df3e28fb6b807f2dbbec93dfa39485707b9
MD5 4927b0fcdf0ec1f4b05f625788f27f2f
BLAKE2b-256 2bb0186398a0f66c2060c3bca00817c7be69f3b0aa75290922f3fba71c523d52

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 618e3601fa9f7063e4afdd8ddd33377ad5399fced0ef05b4a6a19dd147136719
MD5 55608055a076a27c545ac2decd6a2e00
BLAKE2b-256 b87e8f4a705133d5c2263d7f92b3c9605c8e3d1b03712a9da0228febe757edc6

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d7cad275c9e295dbe75096240c554fef6bf4163de79257fa4d8b09f6f95c73b3
MD5 5e6fbda5903ae32e31514bd271d503b1
BLAKE2b-256 dc89e7d28a271faa642b8742fd50c888575218e8b0d0b4da4b43d698d9bd6c15

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 716b6919943497fbabcad4e9908190b94dc33bf8c9eb57157c34b29f8cf49ec2
MD5 277909709662fab45750eb15d3472901
BLAKE2b-256 933a4ae94d6f7ef301969911e0480d2cb75e5560f4a00117dec45ebdb262d607

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 27c286ae4dfba30c3f7bfa16a6b5600ece331e93f10e2f40480e88fe9859fb4d
MD5 218ab13b10441efc26ff9388abeeb4a5
BLAKE2b-256 ff45b8e1087698657a1de64c1c2218e0c515af700cc75e6b393caf00456a41fd

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 ec491206202bb9688579f0af69ccbf47595be39f0ca11c9737627c194dd38f51
MD5 0cae49b9ef663053fee7d40cd6b57c5a
BLAKE2b-256 dbd325010f20c9e889d8583aa8dfa7d7ce57f8ed0216178c0f6a600f986c590b

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 24eabd82d9079451009cdaf3fb99fb2db6bcafad13c14bdac691ce4a6340be36
MD5 e6d851cb4c8ffe36559b23cb2e29534c
BLAKE2b-256 ac85538b6f930a310894f442458dac6d79a027277d3bf1ca0155cd26bf24d266

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c931c580125529c319f552572fd66c4980a70147583af922482de71e467335e3
MD5 4349100af963481775e79b46576e9b3d
BLAKE2b-256 ed137436972f007d2081409a1e5607a28c598a69e675db76beeaf472c9b671e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 01260ade08c311e350878094e9d7fe0b0226a190267d8151fa48c25830d90915
MD5 d5e0801990bf2f01202e971885ae7d00
BLAKE2b-256 d91bffbb0f05b7b24f3fc22f61e15767b6fdaf0feb17865bcc4ac9643f5d39f1

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 435ec437e7d381097b7474aed671d88d37545958ec6bf8333517d5b8756e4b60
MD5 ef6c1c3583b127ef392c0e2a86babb04
BLAKE2b-256 d10c91b48f15c747db8e530e8a7694e93cc7362b78fcf77814d8d52b08282fe3

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 900c027e36c8f84e13ef589c2f1a36b75395a63ab0ca6cd4a3d1417042134884
MD5 179de187c7be6954e225148d0541bad1
BLAKE2b-256 0de453b52e8856a97766219bd8a00507b11d4086381b4b14dc42867617c49792

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 f8ef6cd2588f926f19bd83be95ec27e40011ff34eb7959963b2049678317e151
MD5 794c306750abfc2345fb6958f4e3113d
BLAKE2b-256 6cd7bedd47a1eb3d2f249de28c698b6c381343b15f4301e954627102d3a9b077

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c65c30386a1df4432e27e79cc461755fc145219ef4dbc307852d8d1dbdb97f97
MD5 60184458360f454aacf16b9e4fd72dfa
BLAKE2b-256 ab80ef5963a035476434c4d514dcb8568a94deb6cfd81b3d337ecf80cb824264

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cb4b1540b78b95f81ab36d675fd28571fae6fbd89097a7632673dfcd0ec269cd
MD5 ebf7a22972213294d6dbad79624fb0de
BLAKE2b-256 541ab685c863322a296b7fddd940690a5e6670d664fb751454d9df53d7c7e3a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 97bb1177fc1cf43fb078daa8081e2d224de10d3d46f251611dc84015ea16a2c8
MD5 fe72a640c0b9f5d84a93ccd5b0c3705c
BLAKE2b-256 5b5d082d7cf39d4ab7836e60a5311c4f63ad02e380128fac1f985c82ad0a6491

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0bfe32f9d65d94788520a24c56bcd7c6d358bdb264e92abcb6a4d8c044a334a2
MD5 1d4eb6051087cf27a0b97522ba17c2cc
BLAKE2b-256 f3776c1d77817833c218d3900661861bf9f035991f5633916e77a0f136fa4e35

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bd44fb512091de6a14e57abf3769810057c279ec9a4c1b8faea73a92730242a0
MD5 1f03092dce6f38556650eb3fe6d09770
BLAKE2b-256 0f3558516ad2d61dc86834ffd9cae88467cc20232f5cf23c88a901b36ae54723

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.6.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 b22640c2b8756e521a7927fd4d7a30e48358c904d0a36a7f5527cf933e57bb30
MD5 78b741f3ed273693b16b214446324f9d
BLAKE2b-256 562232e3e7413ff678fd2547eb03a15d1be8c7ec0e7a3f945f23f21c63ff790f

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dae8137752c0142bda983d1ae059e3d87bf27bb50af4ac73b1ef985263c7c4ee
MD5 d172cbce42647191a60011d6aa0006d4
BLAKE2b-256 2732c62f355eb7ce29c10c5301d8c131863be6b2788f428280a8ab6db85a0b65

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e8fbfa273a28aa249382bebab10a9aac7a8dc2ae6fa0f16c7260f10ba438ac8f
MD5 069b3cc2d17b241c2701d7cf4934260e
BLAKE2b-256 87070a05ca5c9242041bf300593c4580245eda683a65e2621af160de9a3408ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.6.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 76be5295173419d55fcb486329482b6c20a0c627fc269f66ce8eab3c5ced7544
MD5 144b1b65f216a565479280e941b9dd43
BLAKE2b-256 692994ebd9e0935aa091e7861a16a0079c70bb0379f9c5a7545410c8ed152534

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e2b27db0ac498d4e5d353e2efa420496f76409fdb9bc7825b81fa5b4d3342079
MD5 81ec301e2111520b44f4f8b354b97901
BLAKE2b-256 824dddbac4aa4523a6c7b42665a18796bd60c1505f9f05c3242a4202f5532d6c

See more details on using hashes here.

File details

Details for the file pystack-1.6.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pystack-1.6.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e0a6992faefb9aa1918bec4c1b7df728bdb1dffe0ab761ed955e6b9be4ab1381
MD5 6e920edfb5a6ec1d42ecf1a0e9c41ecb
BLAKE2b-256 c6d1089c3e3e96947ade3e8c2d40f73a2b8a9f8b96cd0d84a8102e5fb8266452

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pystack-1.6.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1ba1aadf865c198c02fd234b081ebfcafc005068fbaaf0ac2f9eeacfa313c491
MD5 7b0881f99223c48c2627d8d34174601e
BLAKE2b-256 bb60ca470b453434045b8a92b76c0cb38b8c00a660d8cecc69e43af86b235cac

See more details on using hashes here.

Supported by

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