{"id":26232547,"url":"https://github.com/bulletmark/pystand","last_synced_at":"2025-04-22T10:41:11.565Z","repository":{"id":242631265,"uuid":"810119470","full_name":"bulletmark/pystand","owner":"bulletmark","description":"Command line tool to install pre-built Python versions from the python-build-standalone project","archived":false,"fork":false,"pushed_at":"2025-03-12T22:48:56.000Z","size":143,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T14:12:55.306Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bulletmark.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-04T04:55:08.000Z","updated_at":"2025-03-12T22:49:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"2cd6da6a-dde8-4917-b840-f111e4888f9e","html_url":"https://github.com/bulletmark/pystand","commit_stats":null,"previous_names":["bulletmark/pystand"],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletmark%2Fpystand","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletmark%2Fpystand/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletmark%2Fpystand/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bulletmark%2Fpystand/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bulletmark","download_url":"https://codeload.github.com/bulletmark/pystand/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250222113,"owners_count":21394818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-13T00:37:28.015Z","updated_at":"2025-04-22T10:41:11.440Z","avatar_url":"https://github.com/bulletmark.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## PYSTAND - Install Python Versions From The Python-Build-Standalone Project\n[![PyPi](https://img.shields.io/pypi/v/pystand)](https://pypi.org/project/pystand/)\n[![AUR](https://img.shields.io/aur/version/pystand)](https://aur.archlinux.org/packages/pystand/)\n\n[`pystand`][pystand] is a command line tool to facilitate the download,\ninstallation, and update of pre-built Python versions from the\n[`python-build-standalone`][pbs] project. The following commands are\nprovided:\n\n|Command  |Description                                                           |\n|---------|----------------------------------------------------------------------|\n|`install`|Install one or more versions from a python-build-standalone release   |\n|`update` (or `upgrade`) |Update one, more, or all versions to another release   |\n|`remove` (or `uninstall`) |Remove/uninstall one, more, or all versions          |\n|`list`   |List installed versions and show which have an update available       |\n|`show`   |Show versions available from a release                                |\n|`path`   |Show path prefix to installed version base directory                  |\n\nBy default, Python versions are sourced from the latest\n`python-build-standalone` [release][pbs-rel] available (e.g.\n\"`20240415`\") but you can optionally specify any older release. The\nrequired\n[distribution](https://gregoryszorc.com/docs/python-build-standalone/main/running.html)\nfor your machine architecture is normally auto-detected. By default, the\n_`install_only_stripped`_ build of the distribution is installed but you\ncan choose to [install any other\nbuild/distribution](#installing-other-builds/distributions) instead, or\nin parallel.\n\nSome simple usage examples are:\n\n```sh\n$ pystand install 3.12\nVersion 3.12.3 @ 20240415 installed.\n\n$ ls -l $(pystand path 3.12)/bin\ntotal 4136\nlrwxrwxrwx 1 user user       9 May 30 22:23 2to3 -\u003e 2to3-3.12\n-rwxrwxr-x 1 user user     128 Jan  1 10:00 2to3-3.12\nlrwxrwxrwx 1 user user       8 May 30 22:23 idle3 -\u003e idle3.12\n-rwxrwxr-x 1 user user     126 Jan  1 10:00 idle3.12\n-rwxrwxr-x 1 user user     256 Jan  1 10:00 pip\n-rwxrwxr-x 1 user user     256 Jan  1 10:00 pip3\n-rwxrwxr-x 1 user user     256 Jan  1 10:00 pip3.12\nlrwxrwxrwx 1 user user       9 May 30 22:23 pydoc3 -\u003e pydoc3.12\n-rwxrwxr-x 1 user user     111 Jan  1 10:00 pydoc3.12\nlrwxrwxrwx 1 user user      10 May 30 22:23 python -\u003e python3.12\nlrwxrwxrwx 1 user user      10 May 30 22:23 python3 -\u003e python3.12\n-rwxrwxr-x 1 user user 4206512 Jan  1 10:00 python3.12\n-rwxrwxr-x 1 user user    3078 Jan  1 10:00 python3.12-config\nlrwxrwxrwx 1 user user      17 May 30 22:23 python3-config -\u003e python3.12-config\n\n$ pystand install 3.10\nVersion 3.10.14 @ 20240415 installed.\n\n$ pystand list\n3.10.14 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.3 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n\n$ pystand show\n3.8.19 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.9.19 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.10.14 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n3.11.9 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.3 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n\n$ pystand remove 3.10\nVersion 3.10.14 @ 20240415 removed.\n\n$ pystand list\n3.12.3 @ 20240415 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n```\n\nHere are some examples showing how to use an installed version ..\n\n```sh\n# Use uv to create a virtual environment to be run with latest pystand\n# installed python 3.12:\n$ uv venv -p $(pystand path 3.12) myenv\n\n# Create a regular virtual environment to be run with latest pystand\n# installed python 3.12:\n$ $(pystand path -p 3.12) -m venv myenv\n\n# Use uv tool to install a package to be run with pystand installed python\n# specific version 3.11.1:\n$ uv tool install -p $(pystand path 3.11.1) cowsay\n```\n\nSee detailed usage information in the [Usage](#usage) section that\nfollows.\n\nNote that similar tools such as [`pdm python`][pdmpy], [`hatch\npython`][hatchpy], and [`rye toolchain`][ryepy] also use\n[`python-build-standalone`][pbs] build releases. However, `pystand` is\nunique because it directly checks the [`python-build-standalone`][pbs]\ngithub site for new [releases][pbs-rel]. Those other tools\nrequire a software update before they can fetch and use new\n[`python-build-standalone`][pbs] releases. This means that new Python\nversions and updates are always available more quickly from `pystand`\nthan those other tools.\n\nThis utility has been developed and tested on Linux but should also work\non macOS and Windows although has not been tried on those platforms. The\nlatest documentation and code is available at\nhttps://github.com/bulletmark/pystand.\n\n## Usage\n\nType `pystand` or `pystand -h` to view the usage summary:\n\n```\nusage: pystand [-h] [-D DISTRIBUTION] [-P PREFIX_DIR] [-C CACHE_DIR]\n                  [-M CACHE_MINUTES] [--purge-days PURGE_DAYS]\n                  [--github-access-token GITHUB_ACCESS_TOKEN] [--no-strip]\n                  [-V]\n                  {install,update,upgrade,remove,uninstall,list,show,path} ...\n\nCommand line tool to download, install, and update pre-built Python versions\nfrom the python-build-standalone project at https://github.com/astral-\nsh/python-build-standalone.\n\noptions:\n  -h, --help            show this help message and exit\n  -D, --distribution DISTRIBUTION\n                        python-build-standalone distribution. Default is\n                        \"x86_64_v3-unknown-linux-gnu-install_only_stripped for\n                        this host\n  -P, --prefix-dir PREFIX_DIR\n                        specify prefix dir for storing versions. Default is\n                        \"$HOME/.local/share/pystand\"\n  -C, --cache-dir CACHE_DIR\n                        specify cache dir for downloads. Default is\n                        \"$HOME/.cache/pystand\"\n  -M, --cache-minutes CACHE_MINUTES\n                        cache latest YYYYMMDD release tag fetch for this many\n                        minutes, before rechecking for latest. Default is 60\n                        minutes\n  --purge-days PURGE_DAYS\n                        cache YYYYMMDD release file lists and downloads for\n                        this number of days after last version referencing\n                        that release is removed. Default is 90 days\n  --github-access-token GITHUB_ACCESS_TOKEN\n                        optional Github access token. Can specify to reduce\n                        rate limiting.\n  --no-strip            do not strip downloaded binaries\n  -V, --version         just show pystand version\n\nCommands:\n  {install,update,upgrade,remove,uninstall,list,show,path}\n    install             Install one or more versions from a python-build-\n                        standalone release.\n    update (upgrade)    Update one, more, or all versions to another release.\n    remove (uninstall)  Remove/uninstall one, more, or all versions.\n    list                List installed versions and show which have an update\n                        available.\n    show                Show versions available from a release.\n    path                Show path prefix to installed version base directory.\n\nSome commands offer aliases as shown in parentheses above. Note you can set\ndefault starting global options in $HOME/.config/pystand-flags.conf.\n```\n\nType `pystand \u003ccommand\u003e -h` to see specific help/usage for any\nindividual command:\n\n### Command `install`\n\n```\nusage: pystand install [-h] [-r RELEASE] [-f] [-s] version [version ...]\n\nInstall one or more versions from a python-build-standalone release.\n\npositional arguments:\n  version               version to install. E.g. 3.12 or 3.12.3\n\noptions:\n  -h, --help            show this help message and exit\n  -r, --release RELEASE\n                        install from specified python-build-standalone\n                        YYYYMMDD release (e.g. 20240415), default is latest\n                        release\n  -f, --force           force install even if already installed\n  -s, --include-source  also install source files if available in distribution\n                        download\n```\n\n### Command `update`\n\n```\nusage: pystand update [-h] [-r RELEASE] [-a] [--skip] [-k] [version ...]\n\nUpdate one, more, or all versions to another release.\n\npositional arguments:\n  version               version to update (or to skip for --all --skip)\n\noptions:\n  -h, --help            show this help message and exit\n  -r, --release RELEASE\n                        update to specified YYYMMDD release (e.g. 20240415),\n                        default is latest release\n  -a, --all             update ALL versions\n  --skip                skip the specified versions when updating all (only\n                        can be specified with --all)\n  -k, --keep            keep old version after updating (but only if different\n                        version number)\n\naliases: upgrade\n```\n\n### Command `remove`\n\n```\nusage: pystand remove [-h] [-a] [--skip] [-r RELEASE] [version ...]\n\nRemove/uninstall one, more, or all versions.\n\npositional arguments:\n  version               version to remove (or to skip for --all --skip)\n\noptions:\n  -h, --help            show this help message and exit\n  -a, --all             remove ALL versions\n  --skip                skip the specified versions when removing all (only\n                        can be specified with --all)\n  -r, --release RELEASE\n                        only remove versions if from specified YYYMMDD release\n                        (e.g. 20240415)\n\naliases: uninstall\n```\n\n### Command `list`\n\n```\nusage: pystand list [-h] [-v] [-r RELEASE] [version ...]\n\nList installed versions and show which have an update available.\n\npositional arguments:\n  version               only list specified version, else all\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --verbose         explicitly report why a version is not eligible for\n                        update\n  -r, --release RELEASE\n                        use specified YYYYMMDD release (e.g. 20240415) for\n                        verbose compare, default is latest release\n```\n\n### Command `show`\n\n```\nusage: pystand show [-h] [-l | -r RELEASE] [-a] [re_match]\n\nShow versions available from a release. View available releases and their\ndistributions at https://github.com/astral-sh/python-build-\nstandalone/releases.\n\npositional arguments:\n  re_match              show only versions+distributions matching this regular\n                        expression pattern\n\noptions:\n  -h, --help            show this help message and exit\n  -l, --list            just list recent releases\n  -r, --release RELEASE\n                        python-build-standalone YYYYMMDD release to show (e.g.\n                        20240415), default is latest release\n  -a, --all             show all available distributions for each version from\n                        the release\n```\n\n### Command `path`\n\n```\nusage: pystand path [-h] [-p] [-r] [-c | version]\n\nShow path prefix to installed version base directory.\n\npositional arguments:\n  version            version number to show path for\n\noptions:\n  -h, --help         show this help message and exit\n  -p, --python-path  add path to python executable\n  -r, --resolve      fully resolve given version\n  -c, --cache-path   just show path to cache dir\n```\n\n## Installation and Upgrade\n\nPython 3.8 or later is required. Arch Linux users can install [`pystand`\nfrom the AUR](https://aur.archlinux.org/packages/pystand) and skip this\nsection.\n\nNote [pystand is on PyPI](https://pypi.org/project/pystand/) so the\neasiest way to install it is to use [`uv tool`][uvtool] (or\n[`pipx`][pipx] or [`pipxu`][pipxu]).\n\n```sh\n$ uv tool install pystand\n```\n\nTo upgrade:\n\n```sh\n$ uv tool upgrade pystand\n```\n\nTo uninstall:\n\n```sh\n$ uv tool uninstall pystand\n```\n\n## Extrapolation of Python Versions\n\nFor all commands except the `path` command, `pystand` extrapolates\nversion text you specify on the command line to the latest available\ncorresponding installed or release version. For example, if you specify\n`pystand install 3.12` then `pystand` will look in the release files to\nfind the latest (i.e. highest) available version of `3.12`, e.g.\n`3.12.3` (at the time of writing), and will install that. Of course you\ncan specify the exact version if you wish, e.g. `3.12.3` but generally\nyou don't need to bother. This is true for any command that takes a\nversion argument so be aware that this may be confusing if there are\nmultiple same Python minor versions, e.g. `3.12.1` and `3.12.3`,\ninstalled from different releases. So in that case you should specify\nthe exact version because e.g. `pystand remove 3.12` will remove\n`3.12.3` which may not be what you want.\n\nNote, consistent with this, you actually don't need to specify a\nminor version, e.g. `pystand install 3` would also install `3.12.3`\n(assuming `3.12.3` is the latest available version for Python 3).\n\nAfter installs or updates or removals,`pystand` also maintains symbolic\nlinks to each latest installed version in it's version directory, e.g. a\nsymlink `~/.local/share/pystand/versions/3.12` will be created pointing\nto `~/.local/share/pystand/versions/3.12.3` so that you can optionally\nhard code the symlink directory in places where it can not be set\ndynamically (i.e. where using `pystand path` is not an option).\n\nYou can exploit these symlinks when you create virtual environments\nusing the `pystand path` command (or just hard code the actual link/path\nfor your environment/platform). E.g. The following creates a virtual\nenvironment which runs with whatever the currently latest installed\nPython 3.12 version is:\n\n```sh\n# Use uv to create a virtual environment to be run with a symlink to\n# currently latest installed python 3.12:\n$ uv venv -p $(pystand path 3.12)\n```\n\nSo if you then update to a new version of Python 3.12 using `pystand`,\ne.g. from 3.12.3 to 3.12.4, the virtual environment will automatically\nuse the new Python version. However, if you for some reason want to\ncreate the virtual environment with a specific version of Python that is\nnever changed, then just specify that exact version when you create the\nvirtual environment, e.g.:\n\n```sh\n# Use uv to create a virtual environment to be run with specific pystand\n# installed python 3.12.2:\n$ uv venv -p $(pystand path 3.12.2)\n\n# If you can't be bothered to look up the current latest version, then\n# the following command will do the same thing as above because it\n# resolves the symlink to the current latest 3.12 version at the time\n# you run this command:\n$ uv venv -p $(pystand path -r 3.12)\n```\n\n## Installing Other Builds/Distributions\n\nThe _`install_only_stripped`_ distribution build is installed by default\nfor your running machine architecture. See description of\ndistributions/builds\n[here](https://gregoryszorc.com/docs/python-build-standalone/main/running.html#obtaining-distributions).\nHowever, you can choose to install other distributions/builds (even for\nother architectures). E.g. If we use a standard modern Linux x86_64\nmachine as an example, the default distribution is\n_`x86_64-unknown-linux-gnu-install_only_stripped`_ and the versions for\nthese are installed by default at `~/.local/share/pystand/\u003cversion\u003e`.\n\nHowever, let's say you want to experiment with the new free-threaded\n3.13 build, installed to a different directory. E.g.:\n\n```sh\n$ mkdir ./3.13-freethreaded\n$ cd ./3.13-freethreaded\n\n$ pystand -P. -D x86_64-unknown-linux-gnu-freethreaded+lto-full install 3.13\n$ ./3.13/bin/python -V\nPython 3.13.0\n\n$ pystand -P . list\n3.13.0 @ 20241016 distribution=\"x86_64_v4-unknown-linux-gnu-freethreaded+lto-full\"\n```\n\nNote you can set a different default distribution by specifying\n`--distribution` as a [default option](#command-default-options).\n\n### Searching for Available Versions and Distributions\n\nThe `show` command can be used to search for distributions as seen in the\nfollowing examples.\n\n```sh\n\nList all the versions installed on this system (at the default location):\n\n```sh\n$ pystand list\n3.8.20 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.9.20 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.7 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.13.0 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n```\n\nThe above shows versions 3.9, 3.12, and 3.13 are installed from the latest\nrelease 20241016. Version 3.8 is installed from the previous release\n20241002 (and is not available in the latest release otherwise it would\nbe shown with an update message).\n\nNow show all available versions from the latest release:\n\n```sh\n$ pystand show\n3.9.20 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n3.10.15 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.11.10 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.7 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n3.13.0 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n```\n\nWe can see that versions 3.9, 3.12, and 3.13 are already installed (as\nwe also knew from list output), and that 3.10 and 3.11 are also available.\n\nWhat is available from the previous release 20241002?\n\n```sh\n$ pystand show -r 20241002\n3.8.20 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n3.9.20 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.10.15 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.11.10 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.7 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.13.0rc3 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n```\n\nLet's install one of the threaded builds of Python 3.13. We can use the\n`-a/-all` option to show all available distributions and then give the\n`show` command a [regular\nexpression](https://en.wikipedia.org/wiki/Regular_expression) to filter\nthe output (this is really just a shorthand for piping the output of\n`show -a` to grep). E.g.:\n\n```sh\n$ pystand show -a 3.13.*x86_64.*unknown-linux-gnu.*thread\n3.13.0 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-freethreaded+debug-full\"\n3.13.0 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full\"\n3.13.0 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-freethreaded+pgo-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v2-unknown-linux-gnu-freethreaded+debug-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v2-unknown-linux-gnu-freethreaded+pgo+lto-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v2-unknown-linux-gnu-freethreaded+pgo-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v3-unknown-linux-gnu-freethreaded+debug-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v3-unknown-linux-gnu-freethreaded+pgo-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v4-unknown-linux-gnu-freethreaded+debug-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v4-unknown-linux-gnu-freethreaded+lto-full\"\n3.13.0 @ 20241016 distribution=\"x86_64_v4-unknown-linux-gnu-freethreaded+noopt-full\"\n```\n\nSo let's install the\n`x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full` build of Python\n3.13 (to the default location):\n\n```sh\n$ pystand -D x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full install 3.13\nVersion \"3.13.0\" is already installed.\n```\n\nAn error is given because the version is already installed. We can\noverwrite that with the `-f/--force` option:\n\n```sh\n$ pystand -D x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full install -f 3.13\nVersion 3.13.0 @ 20241016 installed.\n```\n\nNow we can see the new version distribution is installed:\n\n```sh\n\n$ pystand list\n3.8.20 @ 20241002 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.9.20 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.7 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.13.0 @ 20241016 distribution=\"x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full\"\n\n$ pystand show\n3.9.20 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n3.10.15 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.11.10 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.12.7 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\" (installed)\n3.13.0 @ 20241016 distribution=\"x86_64-unknown-linux-gnu-install_only_stripped\"\n3.13.0 @ 20241016 distribution=\"x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full\" (installed)\n```\n\nNote that `pystand` caches all downloaded files (at least for a period\nspecified by `--purge-days`) so you can easily switch between different\nversions/distributions quite quickly. You can also choose to install any\ndistribution/build in a specific directory using the `-P/--prefix-dir`\nglobal option if you want to keep different distributions separate and\navailable in parallel.\n\n## Command Default Options\n\nYou can add default global options to a personal configuration file\n`~/.config/pystand-flags.conf`. If that file exists then each line of\noptions will be concatenated and automatically prepended to your\n`pystand` command line arguments. Comments in the file (i.e. `#` and\nanything after on a line) are ignored. Type `pystand` to see all\nsupported options.\n\nThe global options: `--distribution`, `--prefix-dir`, `--cache-dir`,\n`--cache-minutes`, `--purge-days`, `--github-access-token`,\n`--no-strip`, are the only sensible candidates to consider setting\nas defaults.\n\n## Github API Rate Limiting\n\nThis tool minimises and caches Github API responses and file downloads\nfrom the [`python-build-standalone`][pbs] repository. However, if you\ninstall many different versions particularly across various releases,\nyou may get rate limited by Github so the command can block and you will\nsee \"backoff\" messages reported. You can create a Github access token to\ngain increased rate limits. Create a token in your Github account under\n`Settings -\u003e Developer settings -\u003e Personal access tokens`. You can use\neither a Github \"fine-grained\" or \"classic\" token. Specify the token on\nthe command line with `--github-access-token`, or set that as a [default\noption](#command-default-options).\n\n## Command Line Tab Completion\n\nCommand line shell [tab\ncompletion](https://en.wikipedia.org/wiki/Command-line_completion) is\nautomatically enabled on `pystand` commands and options using\n[`argcomplete`](https://github.com/kislyuk/argcomplete). You may need to\nfirst (once-only) [activate argcomplete global\ncompletion](https://github.com/kislyuk/argcomplete#global-completion).\n\n## License\n\nCopyright (C) 2024 Mark Blakeney. This program is distributed under the\nterms of the GNU General Public License. This program is free software:\nyou can redistribute it and/or modify it under the terms of the GNU\nGeneral Public License as published by the Free Software Foundation,\neither version 3 of the License, or any later version. This program is\ndistributed in the hope that it will be useful, but WITHOUT ANY\nWARRANTY; without even the implied warranty of MERCHANTABILITY or\nFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License at\n\u003chttp://www.gnu.org/licenses/\u003e for more details.\n\n[pystand]: https://github.com/bulletmark/pystand\n[pbs]: https://github.com/astral-sh/python-build-standalone\n[pbs-rel]: https://github.com/astral-sh/python-build-standalone/releases\n[pipx]: https://github.com/pypa/pipx\n[pipxu]: https://github.com/bulletmark/pipxu\n[uvtool]: https://docs.astral.sh/uv/guides/tools/#installing-tools\n[pyenv]: https://github.com/pyenv/pyenv\n[pdm]: https://pdm-project.org/\n[pdmpy]: https://pdm-project.org/en/latest/usage/project/#install-python-interpreters-with-pdm\n[hatch]: https://hatch.pypa.io/\n[hatchpy]: https://hatch.pypa.io/latest/tutorials/python/manage/\n[ryepy]: https://rye.astral.sh/guide/toolchains/#fetching-toolchains\n\n\u003c!-- vim: se ai syn=markdown: --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbulletmark%2Fpystand","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbulletmark%2Fpystand","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbulletmark%2Fpystand/lists"}