pyenv verification source
Some checks are pending
macos_build / macos_build (3.10) (push) Waiting to run
macos_build / macos_build (3.11) (push) Waiting to run
macos_build / macos_build (3.12) (push) Waiting to run
macos_build / macos_build (3.13) (push) Waiting to run
macos_build / macos_build (3.14) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-14) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-15) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-15-intel) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-26) (push) Waiting to run
pyenv_tests / pyenv_tests (ubuntu-22.04) (push) Waiting to run
pyenv_tests / pyenv_tests (ubuntu-24.04) (push) Waiting to run
ubuntu_build / ubuntu_build (3.10) (push) Waiting to run
ubuntu_build / ubuntu_build (3.11) (push) Waiting to run
ubuntu_build / ubuntu_build (3.12) (push) Waiting to run
ubuntu_build / ubuntu_build (3.13) (push) Waiting to run
ubuntu_build / ubuntu_build (3.14) (push) Waiting to run
Some checks are pending
macos_build / macos_build (3.10) (push) Waiting to run
macos_build / macos_build (3.11) (push) Waiting to run
macos_build / macos_build (3.12) (push) Waiting to run
macos_build / macos_build (3.13) (push) Waiting to run
macos_build / macos_build (3.14) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-14) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-15) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-15-intel) (push) Waiting to run
pyenv_tests / pyenv_tests (macos-26) (push) Waiting to run
pyenv_tests / pyenv_tests (ubuntu-22.04) (push) Waiting to run
pyenv_tests / pyenv_tests (ubuntu-24.04) (push) Waiting to run
ubuntu_build / ubuntu_build (3.10) (push) Waiting to run
ubuntu_build / ubuntu_build (3.11) (push) Waiting to run
ubuntu_build / ubuntu_build (3.12) (push) Waiting to run
ubuntu_build / ubuntu_build (3.13) (push) Waiting to run
ubuntu_build / ubuntu_build (3.14) (push) Waiting to run
This commit is contained in:
20
plugins/python-build/LICENSE
Normal file
20
plugins/python-build/LICENSE
Normal file
@@ -0,0 +1,20 @@
|
||||
Copyright (c) 2013 Yamashita, Yuu
|
||||
Copyright (c) 2012-2013 Sam Stephenson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
357
plugins/python-build/README.md
Normal file
357
plugins/python-build/README.md
Normal file
@@ -0,0 +1,357 @@
|
||||
# python-build
|
||||
|
||||
python-build is a [pyenv](https://github.com/pyenv/pyenv) plugin that
|
||||
provides a `pyenv install` command to compile and install different versions
|
||||
of Python on UNIX-like systems.
|
||||
|
||||
You can also use python-build without pyenv in environments where you need
|
||||
precise control over Python version installation.
|
||||
|
||||
See the [list of releases](https://github.com/pyenv/pyenv/releases)
|
||||
for changes in each version.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
### Installing as a pyenv plugin (recommended)
|
||||
|
||||
Since python-build is bundled with pyenv by
|
||||
default, you do not need to do anything.
|
||||
|
||||
### Installing as a standalone program (advanced)
|
||||
|
||||
Installing python-build as a standalone program will give you access to the
|
||||
`python-build` command for precise control over Python version installation. If you
|
||||
have pyenv installed, you will also be able to use the `pyenv install` command.
|
||||
|
||||
git clone https://github.com/pyenv/pyenv.git
|
||||
cd pyenv/plugins/python-build
|
||||
./install.sh
|
||||
|
||||
This will install python-build into `/usr/local`. If you do not have write
|
||||
permission to `/usr/local`, you will need to run `sudo ./install.sh` instead.
|
||||
You can install to a different prefix by setting the `PREFIX` environment
|
||||
variable.
|
||||
|
||||
To update python-build after it has been installed, run `git pull` in your cloned
|
||||
copy of the repository, then re-run the install script.
|
||||
|
||||
### Installing with Homebrew (for OS X users)
|
||||
|
||||
Mac OS X users can install python-build with the [Homebrew](http://brew.sh)
|
||||
package manager. This will give you access to the `python-build` command. If you
|
||||
have pyenv installed, you will also be able to use the `pyenv install` command.
|
||||
|
||||
*This is the recommended method of installation if you installed pyenv with
|
||||
Homebrew.*
|
||||
|
||||
brew install pyenv
|
||||
|
||||
Or, if you would like to install the latest development release:
|
||||
|
||||
brew install --HEAD pyenv
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
Before you begin, you should ensure that your build environment has the proper
|
||||
system dependencies for compiling the wanted Python Version (see our [recommendations](https://github.com/pyenv/pyenv/wiki#suggested-build-environment)).
|
||||
|
||||
### Using `pyenv install` with pyenv
|
||||
|
||||
To install a Python version for use with pyenv, run `pyenv install` with
|
||||
exact name of the version you want to install. For example,
|
||||
|
||||
pyenv install 2.7.4
|
||||
|
||||
Python versions will be installed into a directory of the same name under
|
||||
`~/.pyenv/versions`.
|
||||
|
||||
To see a list of all available Python versions, run `pyenv install --list`. You
|
||||
may also tab-complete available Python versions if your pyenv installation is
|
||||
properly configured.
|
||||
|
||||
### Using `python-build` standalone
|
||||
|
||||
If you have installed python-build as a standalone program, you can use the
|
||||
`python-build` command to compile and install Python versions into specific
|
||||
locations.
|
||||
|
||||
Run the `python-build` command with the exact name of the version you want to
|
||||
install and the full path where you want to install it. For example,
|
||||
|
||||
python-build 2.7.4 ~/local/python-2.7.4
|
||||
|
||||
To see a list of all available Python versions, run `python-build --definitions`.
|
||||
|
||||
Pass the `-v` or `--verbose` flag to `python-build` as the first argument to see
|
||||
what's happening under the hood.
|
||||
|
||||
### Custom definitions
|
||||
|
||||
Both `pyenv install` and `python-build` accept a path to a custom definition file
|
||||
in place of a version name. Custom definitions let you develop and install
|
||||
versions of Python that are not yet supported by python-build.
|
||||
|
||||
See the [python-build built-in definitions](https://github.com/pyenv/pyenv/tree/master/plugins/python-build/share/python-build) as a starting point for
|
||||
custom definition files.
|
||||
|
||||
#### Adding definitions with a Pyenv plugin
|
||||
|
||||
You can add your own definitions with a [Pyenv plugin](https://github.com/pyenv/pyenv?tab=readme-ov-file#pyenv-plugins) by placing them under
|
||||
`$PYENV_ROOT/plugins/your_plugin_name/share/python-build`.
|
||||
|
||||
### Default build configuration
|
||||
|
||||
Without the user customizing the build with environment variables (see below),
|
||||
`python-build` builds Python with mostly default Configure options
|
||||
to maintain the principle of the least surprise.
|
||||
|
||||
The exceptions -- non-default options that are set by default -- are listed below:
|
||||
|
||||
| Option/Behavior | Rationale |
|
||||
|-----------------|-----------|
|
||||
| `--enable-shared` is on by default. Pass `--disable-shared` to Configure options to override | The official CPython Docker image uses it. It's required to embed CPython. |
|
||||
| argument to `--enable-universalsdk` is ignored and set to `/` |
|
||||
| `--with-universal-archs` defaults to `universal2` on ARM64 architecture | the only dual-architecture Macs in use today are Apple Silicon which can only build that one |
|
||||
| argument to `--enable-framework` is ignored and set to a specific value | CPython's build logic requires a very specific argument to avoid installing the `Applications` part globally |
|
||||
| argument to `--enable-unicode` in non-MacOS is overridden to `ucs4` for 2.x-3.3 |
|
||||
| `MACOSX_DEPLOYMENT_TARGET` defaults to the running MacOS version |
|
||||
|
||||
|
||||
#### Integration with 3rd-party package ecosystems
|
||||
|
||||
##### Homebrew
|
||||
|
||||
Homebrew is used to find dependency packages if `brew` is found on `PATH`:
|
||||
* In MacOS, or
|
||||
* If the running Pyenv itself is installed with Homebrew
|
||||
|
||||
Set `PYTHON_BUILD_USE_HOMEBREW` or `PYTHON_BUILD_SKIP_HOMEBREW` to override this default.
|
||||
|
||||
When Homebrew is used, its `include` and `lib` paths are added to compiler search path (the latter is also set as `rpath`),
|
||||
and also Python dependencies that are typically keg-only are searched for in the Homebrew installation and added individually.
|
||||
|
||||
**NOTE:** Homebrew is not used in Linux by default because it's rolling-release which causes a problem.
|
||||
Upgrading a Python dependency in Homebrew to a new major version (that `brew` does without warning)
|
||||
would break all Pyenv-managed installations that depend on it.
|
||||
You can use a [community plugin `fix-version`](https://github.com/pyenv/pyenv/wiki/Plugins#community-plugins)
|
||||
to fix installations in such a case.
|
||||
|
||||
##### MacPorts
|
||||
|
||||
MacPorts Homebrew is used to find dependency packages if `port` is found on `PATH` in MacOS.
|
||||
|
||||
Set `PYTHON_BUILD_USE_MACPORTS` or `PYTHON_BUILD_SKIP_MACPORTS` to override this default.
|
||||
|
||||
###### Interaction with Homebrew
|
||||
|
||||
If both Homebrew and MacPorts are installed and allowed to be used, Homebrew takes preference.
|
||||
There first ecosystem where any of the required dependency packages is found is used.
|
||||
|
||||
##### Portage
|
||||
|
||||
In FreeBSD, if `pkg` is on PATH, Ports are searched for some dependencies that Configure is known to not search for via `pkg-config`.
|
||||
(Later versions of CPython search for more packages via `pkg-config` so this may eventually become redundant.)
|
||||
|
||||
|
||||
### Special environment variables
|
||||
|
||||
You can set certain environment variables to control the build process.
|
||||
|
||||
* `TMPDIR` sets the location where python-build stores temporary files.
|
||||
* `PYTHON_BUILD_BUILD_PATH` sets the location in which sources are downloaded and
|
||||
built. By default, this is a subdirectory of `TMPDIR`.
|
||||
* `PYTHON_BUILD_CACHE_PATH`, if set, specifies a directory to use for caching
|
||||
downloaded package files.
|
||||
* `PYTHON_BUILD_MIRROR_URL` overrides the default mirror URL root to one of your
|
||||
choosing.
|
||||
* `PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM`, if set, does not append the SHA2
|
||||
checksum of the file to the mirror URL.
|
||||
* `PYTHON_BUILD_SKIP_MIRROR`, if set, forces python-build to download packages from
|
||||
their original source URLs instead of using a mirror.
|
||||
* `PYTHON_BUILD_HTTP_CLIENT`, explicitly specify the HTTP client type to use. `aria2`, `curl` and `wget` are the supported values and by default, are searched in that order.
|
||||
* `PYTHON_BUILD_CURL_OPTS`, `PYTHON_BUILD_WGET_OPTS`, `PYTHON_BUILD_ARIA2_OPTS` pass additional parameters to the corresponding HTTP client.
|
||||
* `PYTHON_BUILD_SKIP_HOMEBREW`, if set, will not search for libraries installed by Homebrew when it would normally will.
|
||||
* `PYTHON_BUILD_USE_HOMEBREW`, if set, will search for libraries installed by Homebrew when it would normally not.
|
||||
* `PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA`, override the Homebrew OpenSSL formula to use.
|
||||
* `PYTHON_BUILD_MACPORTS_OPENSSL_FORMULA`, override the MacPorts OpenSSL formula to use. The default is `openssl3 openssl`.
|
||||
* `PYTHON_BUILD_TCLTK_FORMULA`, override the Homebrew Tcl/Tk formula to use.
|
||||
* `PYTHON_BUILD_SKIP_MACPORTS`, if set, will not search for libraries installed by MacPorts when it would normally will.
|
||||
* `PYTHON_BUILD_USE_MACPORTS`, if set, will search for libraries installed by MacPorts when it would normally not.
|
||||
* `PYTHON_BUILD_ROOT` overrides the default location from where build definitions
|
||||
in `share/python-build/` are looked up.
|
||||
* `PYTHON_BUILD_DEFINITIONS` can be a list of colon-separated paths that get
|
||||
additionally searched when looking up build definitions.
|
||||
* `CC` sets the path to the C compiler.
|
||||
* `CONFIGURE_OPTS` lets you pass additional options to `./configure`.
|
||||
* `MAKE` lets you override the command to use for `make`. Useful for specifying
|
||||
GNU make (`gmake`) on some systems.
|
||||
* `MAKE_OPTS` (or `MAKEOPTS`) lets you pass additional options to `make`.
|
||||
* `MAKE_INSTALL_OPTS` lets you pass additional options to `make install`.
|
||||
* `<PACKAGE>_CFLAGS`, `<PACKAGE>_CPPFLAGS`, `<PACKAGE>_LDFLAGS` let you pass additional options to `CFLAGS`/`CPPFLAGS`/`LDFLAGS` specifically for building `<package>` (Python itself or a dependency library) from source as part of the build script. `<PACKAGE>` should be a capitalized name of the package without version (technically, capitalized first argument to `install_package` without version). E.g. for CPython, it's "`PYTHON`", for Readline, "`READLINE`", for PyPy (only applies when building it from source), "`PYPY`". Check the source of the build script you're using if unsure.
|
||||
* `<PACKAGE>_CONFIGURE_OPTS`, `<PACKAGE>_MAKE_OPTS`, `<PACKAGE>_MAKE_INSTALL_OPTS`, `<PACKAGE>_MAKE_INSTALL_TARGET` allow
|
||||
you to specify configure and make options for building `<package>` (same as above). "Make install target" would replace "`install`" in the `make install` invocation.
|
||||
|
||||
### Applying patches to Python before compiling
|
||||
|
||||
Both `pyenv install` and `python-build` support the `--patch` (`-p`) flag that
|
||||
signals that a patch from stdin should be applied to Python, Jython or PyPy
|
||||
source code before the `./configure` and compilation steps.
|
||||
|
||||
Example usage:
|
||||
|
||||
```sh
|
||||
# applying a single patch
|
||||
$ pyenv install --patch 2.7.10 < /path/to/python.patch
|
||||
|
||||
# applying a patch from HTTP
|
||||
$ pyenv install --patch 2.7.10 < <(curl -sSL http://git.io/python.patch)
|
||||
|
||||
# applying multiple patches
|
||||
$ cat fix1.patch fix2.patch | pyenv install --patch 2.7.10
|
||||
```
|
||||
|
||||
|
||||
### Building for maximum performance
|
||||
|
||||
Building CPython with `--enable-optimizations` will result in a faster
|
||||
interpreter at the cost of significantly longer build times. Most notably, this
|
||||
enables PGO (profile guided optimization). While your mileage may vary, it is
|
||||
common for performance improvement from this to be in the ballpark of 30%.
|
||||
|
||||
```sh
|
||||
env PYTHON_CONFIGURE_OPTS='--enable-optimizations --with-lto' PYTHON_CFLAGS='-march=native -mtune=native' pyenv install --verbose 3.6.0
|
||||
```
|
||||
|
||||
You can also customize the task used for profile guided optimization by setting
|
||||
the `PROFILE_TASK` environment variable, for instance, `PROFILE_TASK='-m
|
||||
test.regrtest --pgo -j0'` will run much faster than the default task.
|
||||
|
||||
### Checksum verification
|
||||
|
||||
If you have the `shasum`, `openssl`, or `sha256sum` tool installed, python-build will
|
||||
automatically verify the SHA2 checksum of each downloaded package before
|
||||
installing it.
|
||||
|
||||
Checksums are optional and specified as anchors on the package URL in each
|
||||
definition. (All bundled definitions include checksums.)
|
||||
|
||||
### Package download mirrors
|
||||
|
||||
python-build will first attempt to download package files from a mirror hosted on
|
||||
GitHub Pages. If this fails, it will fall back to the
|
||||
official URL specified in the definition file.
|
||||
|
||||
You can point python-build to another mirror by specifying the
|
||||
`PYTHON_BUILD_MIRROR_URL` environment variable.
|
||||
|
||||
Package mirror URLs are constructed by joining
|
||||
`$PYTHON_BUILD_MIRROR_URL` with the SHA2 checksum of the package file as specified in the URL
|
||||
in the installation script (the part after the hash sign). E.g.:
|
||||
|
||||
```
|
||||
https://mycache.example.com/0419e9085bf51b7a672009b3f50dbf1859acdf18ba725d0ec19aa5c8503f0ea3
|
||||
```
|
||||
|
||||
If you have replicated the directory structure of an official site, the easiest way to adapt
|
||||
would be to make symlinks at the mirror's root:
|
||||
|
||||
```
|
||||
0419e9085bf51b7a672009b3f50dbf1859acdf18ba725d0ec19aa5c8503f0ea3 -> 3.10.10/Python-3.10.10.tar.xz
|
||||
```
|
||||
|
||||
The rationale is to abstract away difference between directory structures of sites
|
||||
of various Python flavors and their occasional changes as well as to accomodate
|
||||
people who only wish to cache some select downloads. This also allows to mirror multiple sites at once.
|
||||
|
||||
If the mirror being used does not have the same checksum (*e.g.* with a
|
||||
pull-through cache like Artifactory), you can set the
|
||||
`PYTHON_BUILD_MIRROR_URL_SKIP_CHECKSUM` environment variable.
|
||||
|
||||
If you don't have an SHA2 program installed, python-build will skip the download
|
||||
mirror and use official URLs instead. You can force python-build to bypass the
|
||||
mirror by setting the `PYTHON_BUILD_SKIP_MIRROR` environment variable.
|
||||
|
||||
The official python-build download mirror is provided by
|
||||
[GitHub Pages](http://yyuu.github.io/pythons/).
|
||||
|
||||
### Package download cache
|
||||
|
||||
Python-build will keep a cache of downloaded package files
|
||||
at the location specified by the `PYTHON_BUILD_CACHE_PATH` environment variable
|
||||
if it exists. The default is `~/.pyenv/cache`, so you can
|
||||
enable caching by just creating that directory.
|
||||
|
||||
The name of the would-be cached file is reported by Pyenv in the "Downloading <filename>..." message.
|
||||
It's possible to warm up the cache by manually putting the file there under an appropriate name.
|
||||
|
||||
### Keeping the build directory after installation
|
||||
|
||||
Both `python-build` and `pyenv install` accept the `-k` or `--keep` flag, which
|
||||
tells python-build to keep the downloaded source after installation. This can be
|
||||
useful if you need to use `gdb` and `memprof` with Python.
|
||||
|
||||
Source code will be kept in a parallel directory tree `~/.pyenv/sources` when
|
||||
using `--keep` with the `pyenv install` command. You should specify the
|
||||
location of the source code with the `PYTHON_BUILD_BUILD_PATH` environment
|
||||
variable when using `--keep` with `python-build`.
|
||||
|
||||
|
||||
## Getting Help
|
||||
|
||||
Please see the [pyenv wiki](https://github.com/pyenv/pyenv/wiki) for solutions to common problems.
|
||||
|
||||
[wiki]: https://github.com/pyenv/pyenv/wiki
|
||||
|
||||
If you can't find an answer on the wiki, open an issue on the [issue
|
||||
tracker](https://github.com/pyenv/pyenv/issues). Be sure to include
|
||||
the full build log for build failures.
|
||||
|
||||
## Contributing
|
||||
|
||||
### Testing new python versions
|
||||
|
||||
If you are contributing a new python version for python-build,
|
||||
you can test the build in a [docker](https://www.docker.com/) container based on Ubuntu 18.04.
|
||||
|
||||
With docker installed:
|
||||
|
||||
```sh
|
||||
docker build -t my_container .
|
||||
docker run my_container pyenv install <my_version>
|
||||
```
|
||||
|
||||
To enter a shell which will allow you to build and then test a python version,
|
||||
replace the second line with
|
||||
|
||||
```sh
|
||||
docker run -it my_container
|
||||
```
|
||||
|
||||
The container will need to be rebuilt whenever you change the repo,
|
||||
but after the first build, this will be very fast,
|
||||
as the layer including the build dependencies will be cached.
|
||||
|
||||
Changes made inside the container will not be persisted.
|
||||
|
||||
To test *all* new versions since a particular revision (e.g. `master`), `cd` to the root of your `pyenv` repo, and run this script:
|
||||
|
||||
```sh
|
||||
set -e
|
||||
set -x
|
||||
|
||||
docker build -t pyenv-test-container .
|
||||
|
||||
git diff --name-only master \
|
||||
| grep '^plugins/python-build/share/python-build/' \
|
||||
| awk -F '/' '{print $NF}' \
|
||||
| xargs -I _ docker run pyenv-test-container pyenv install _
|
||||
```
|
||||
|
||||
- Build the docker image with the **t**ag pyenv-test-container
|
||||
- Look for the names files changed since revision `master`
|
||||
- Filter out any which don't live where python-build keeps its build scripts
|
||||
- Look only at the file name (i.e. the python version name)
|
||||
- Run a new docker container for each, building that version
|
||||
|
||||
295
plugins/python-build/bin/pyenv-install
Executable file
295
plugins/python-build/bin/pyenv-install
Executable file
@@ -0,0 +1,295 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Install a Python version using python-build
|
||||
#
|
||||
# Usage: pyenv install [-f] [-kvp] <version>...
|
||||
# pyenv install [-f] [-kvp] <definition-file>
|
||||
# pyenv install -l|--list
|
||||
# pyenv install --version
|
||||
#
|
||||
# -l/--list List all available versions
|
||||
# -f/--force Install even if the version appears to be installed already
|
||||
# -s/--skip-existing Skip if the version appears to be installed already
|
||||
#
|
||||
# python-build options:
|
||||
#
|
||||
# -k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation
|
||||
# (defaults to $PYENV_ROOT/sources)
|
||||
# -p/--patch Apply a patch from stdin before building
|
||||
# -v/--verbose Verbose mode: print compilation status to stdout
|
||||
# --version Show version of python-build
|
||||
# -g/--debug Build a debug version
|
||||
#
|
||||
# For detailed information on installing Python versions with
|
||||
# python-build, including a list of environment variables for adjusting
|
||||
# compilation, see: https://github.com/pyenv/pyenv#readme
|
||||
#
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Add `share/python-build/` directory from each pyenv plugin to the list of
|
||||
# paths where build definitions are looked up.
|
||||
shopt -s nullglob
|
||||
for plugin_path in "$PYENV_ROOT"/plugins/*/share/python-build; do
|
||||
PYTHON_BUILD_DEFINITIONS="${PYTHON_BUILD_DEFINITIONS}:${plugin_path}"
|
||||
done
|
||||
export PYTHON_BUILD_DEFINITIONS
|
||||
shopt -u nullglob
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --list
|
||||
echo --force
|
||||
echo --skip-existing
|
||||
echo --keep
|
||||
echo --patch
|
||||
echo --verbose
|
||||
echo --version
|
||||
echo --debug
|
||||
exec python-build --definitions
|
||||
fi
|
||||
|
||||
# Load shared library functions
|
||||
eval "$(python-build --lib)"
|
||||
|
||||
usage() {
|
||||
pyenv-help install 2>/dev/null
|
||||
[ -z "$1" ] || exit "$1"
|
||||
}
|
||||
|
||||
definitions() {
|
||||
local query="$1"
|
||||
python-build --definitions | $(type -P ggrep grep | head -n1) -F "$query" || true
|
||||
}
|
||||
|
||||
indent() {
|
||||
sed 's/^/ /'
|
||||
}
|
||||
|
||||
unset FORCE
|
||||
unset SKIP_EXISTING
|
||||
unset KEEP
|
||||
unset VERBOSE
|
||||
unset HAS_PATCH
|
||||
unset DEBUG
|
||||
|
||||
[ -n "$PYENV_DEBUG" ] && VERBOSE="-v"
|
||||
|
||||
parse_options "$@"
|
||||
for option in "${OPTIONS[@]}"; do
|
||||
case "$option" in
|
||||
"h" | "help" )
|
||||
usage 0
|
||||
;;
|
||||
"l" | "list" )
|
||||
echo "Available versions:"
|
||||
definitions | indent
|
||||
exit
|
||||
;;
|
||||
"f" | "force" )
|
||||
FORCE=true
|
||||
;;
|
||||
"s" | "skip-existing" )
|
||||
SKIP_EXISTING=true
|
||||
;;
|
||||
"k" | "keep" )
|
||||
[ -n "${PYENV_BUILD_ROOT}" ] || PYENV_BUILD_ROOT="${PYENV_ROOT}/sources"
|
||||
;;
|
||||
"v" | "verbose" )
|
||||
VERBOSE="-v"
|
||||
;;
|
||||
"p" | "patch" )
|
||||
HAS_PATCH="-p"
|
||||
;;
|
||||
"g" | "debug" )
|
||||
DEBUG="-g"
|
||||
;;
|
||||
"version" )
|
||||
exec python-build --version
|
||||
;;
|
||||
* )
|
||||
usage 1 >&2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
unset VERSION_NAME
|
||||
|
||||
# The first argument contains the definition to install. If the
|
||||
# argument is missing, try to install whatever local app-specific
|
||||
# version is specified by pyenv. Show usage instructions if a local
|
||||
# version is not specified.
|
||||
DEFINITIONS=("${ARGUMENTS[@]}")
|
||||
[[ "${#DEFINITIONS[*]}" -eq 0 ]] && DEFINITIONS=($(pyenv-local 2>/dev/null || true))
|
||||
[[ "${#DEFINITIONS[*]}" -eq 0 ]] && usage 1 >&2
|
||||
|
||||
# Define `before_install` and `after_install` functions that allow
|
||||
# plugin hooks to register a string of code for execution before or
|
||||
# after the installation process.
|
||||
declare -a before_hooks after_hooks
|
||||
|
||||
before_install() {
|
||||
local hook="$1"
|
||||
before_hooks["${#before_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
after_install() {
|
||||
local hook="$1"
|
||||
after_hooks["${#after_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
# Plan cleanup on unsuccessful installation.
|
||||
cleanup() {
|
||||
[ -z "${PREFIX_EXISTS}" ] && rm -rf "$PREFIX"
|
||||
}
|
||||
|
||||
trap cleanup SIGINT
|
||||
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks install`)
|
||||
IFS="$OLDIFS"
|
||||
for script in "${scripts[@]}"; do source "$script"; done
|
||||
|
||||
COMBINED_STATUS=0
|
||||
for DEFINITION in "${DEFINITIONS[@]}"; do
|
||||
STATUS=0
|
||||
|
||||
# Try to resolve a prefix if user indeed gave a prefix.
|
||||
# We install the version under the resolved name
|
||||
# and hooks also see the resolved name
|
||||
DEFINITION="$(pyenv-latest -f -k "$DEFINITION")"
|
||||
|
||||
# Set VERSION_NAME from $DEFINITION. Then compute the installation prefix.
|
||||
VERSION_NAME="${DEFINITION##*/}"
|
||||
[ -n "$DEBUG" ] && VERSION_NAME="${VERSION_NAME}-debug"
|
||||
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
||||
|
||||
[ -d "${PREFIX}" ] && PREFIX_EXISTS=1
|
||||
|
||||
# If the installation prefix exists, prompt for confirmation unless
|
||||
# the --force option was specified.
|
||||
if [ -d "${PREFIX}/bin" ]; then
|
||||
if [ -z "$FORCE" ] && [ -z "$SKIP_EXISTING" ]; then
|
||||
echo "pyenv: $PREFIX already exists" >&2
|
||||
read -p "continue with installation? (y/N) "
|
||||
|
||||
case "$REPLY" in
|
||||
y | Y | yes | YES ) ;;
|
||||
* ) { STATUS=1; [[ $STATUS -gt $COMBINED_STATUS ]] && COMBINED_STATUS=$STATUS; }; continue ;;
|
||||
esac
|
||||
elif [ -n "$SKIP_EXISTING" ]; then
|
||||
# Since we know the python version is already installed, and are opting to
|
||||
# not force installation of existing versions, we just `exit 0` here to
|
||||
# leave things happy
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
# If PYENV_BUILD_ROOT is set, always pass keep options to python-build.
|
||||
if [ -n "${PYENV_BUILD_ROOT}" ]; then
|
||||
export PYTHON_BUILD_BUILD_PATH="${PYENV_BUILD_ROOT}/${VERSION_NAME}"
|
||||
KEEP="-k"
|
||||
fi
|
||||
|
||||
# Set PYTHON_BUILD_CACHE_PATH to $PYENV_ROOT/cache, if the directory
|
||||
# exists and the variable is not already set.
|
||||
if [ -z "${PYTHON_BUILD_CACHE_PATH}" ] && [ -d "${PYENV_ROOT}/cache" ]; then
|
||||
export PYTHON_BUILD_CACHE_PATH="${PYENV_ROOT}/cache"
|
||||
fi
|
||||
|
||||
if [ -z "${PYENV_BOOTSTRAP_VERSION}" ]; then
|
||||
case "${VERSION_NAME}" in
|
||||
[23]"."* )
|
||||
# Default PYENV_VERSION to the friendly Python version. (The
|
||||
# CPython installer requires an existing Python installation to run. An
|
||||
# unsatisfied local .python-version file can cause the installer to
|
||||
# fail.)
|
||||
for version_info in "${VERSION_NAME%-dev}" "${VERSION_NAME%.*}" "${VERSION_NAME%%.*}"; do
|
||||
# Anaconda's `curl` doesn't work on platform where `/etc/pki/tls/certs/ca-bundle.crt` isn't available (e.g. Debian)
|
||||
for version in $(pyenv-whence "python${version_info}" 2>/dev/null || true); do
|
||||
if [[ "${version}" != "anaconda"* ]] && [[ "${version}" != "miniconda"* ]]; then
|
||||
PYENV_BOOTSTRAP_VERSION="${version}"
|
||||
break 2
|
||||
fi
|
||||
done
|
||||
done
|
||||
;;
|
||||
"pypy"*"-dev" | "pypy"*"-src" )
|
||||
# PyPy/PyPy3 requires existing Python 2.7 to build
|
||||
if [ -n "${PYENV_RPYTHON_VERSION}" ]; then
|
||||
PYENV_BOOTSTRAP_VERSION="${PYENV_RPYTHON_VERSION}"
|
||||
else
|
||||
for version in $(pyenv-versions --bare | sort -r); do
|
||||
if [[ "${version}" == "2.7"* ]]; then
|
||||
PYENV_BOOTSTRAP_VERSION="$version"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -n "$PYENV_BOOTSTRAP_VERSION" ]; then
|
||||
for dep in pycparser; do
|
||||
if ! PYENV_VERSION="$PYENV_BOOTSTRAP_VERSION" pyenv-exec python -c "import ${dep}" 1>/dev/null 2>&1; then
|
||||
echo "pyenv-install: $VERSION_NAME: PyPy requires \`${dep}' in $PYENV_BOOTSTRAP_VERSION to build from source." >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo "pyenv-install: $VERSION_NAME: PyPy requires Python 2.7 to build from source." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ -n "${PYENV_BOOTSTRAP_VERSION}" ]; then
|
||||
export PYENV_VERSION="${PYENV_BOOTSTRAP_VERSION}"
|
||||
fi
|
||||
|
||||
# Execute `before_install` hooks.
|
||||
for hook in "${before_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
# Invoke `python-build` and record the exit status in $STATUS.
|
||||
python-build $KEEP $VERBOSE $HAS_PATCH $DEBUG "$DEFINITION" "$PREFIX" || \
|
||||
{ STATUS=$?; [[ $STATUS -gt $COMBINED_STATUS ]] && COMBINED_STATUS=$STATUS; }
|
||||
|
||||
# Display a more helpful message if the definition wasn't found.
|
||||
if [ "$STATUS" == "2" ]; then
|
||||
{ candidates="$(definitions "$DEFINITION")"
|
||||
if [ -n "$candidates" ]; then
|
||||
echo
|
||||
echo "The following versions contain \`$DEFINITION' in the name:"
|
||||
echo "$candidates" | indent
|
||||
fi
|
||||
echo
|
||||
echo "See all available versions with \`pyenv install --list'."
|
||||
echo
|
||||
echo -n "If the version you need is missing, try upgrading pyenv"
|
||||
declare brew_prefix
|
||||
if brew_prefix="$(brew --prefix 2>/dev/null)" && [[ $_PYENV_INSTALL_PREFIX/ == "$brew_prefix/"* ]]; then
|
||||
printf ":\n\n"
|
||||
echo " brew update && brew upgrade pyenv"
|
||||
elif [ -d "${_PYENV_INSTALL_PREFIX}/.git" ]; then
|
||||
printf ":\n\n"
|
||||
echo " cd ${_PYENV_INSTALL_PREFIX} && git pull && cd -"
|
||||
else
|
||||
printf ".\n"
|
||||
fi
|
||||
} >&2
|
||||
fi
|
||||
|
||||
# Execute `after_install` hooks.
|
||||
for hook in "${after_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
# Run `pyenv-rehash` after a successful installation.
|
||||
if [[ $STATUS -eq 0 ]]; then
|
||||
pyenv-rehash
|
||||
else
|
||||
cleanup
|
||||
break
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
exit "${COMBINED_STATUS}"
|
||||
98
plugins/python-build/bin/pyenv-uninstall
Executable file
98
plugins/python-build/bin/pyenv-uninstall
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Summary: Uninstall Python versions
|
||||
#
|
||||
# Usage: pyenv uninstall [-f|--force] <version> ...
|
||||
#
|
||||
# -f Attempt to remove the specified version without prompting
|
||||
# for confirmation. If the version does not exist, do not
|
||||
# display an error message.
|
||||
#
|
||||
# See `pyenv versions` for a complete list of installed versions.
|
||||
#
|
||||
set -e
|
||||
[ -n "$PYENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide pyenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
echo --force
|
||||
exec pyenv versions --bare
|
||||
fi
|
||||
|
||||
usage() {
|
||||
pyenv-help uninstall 2>/dev/null
|
||||
[ -z "$1" ] || exit "$1"
|
||||
}
|
||||
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
usage 0
|
||||
fi
|
||||
|
||||
unset FORCE
|
||||
if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then
|
||||
FORCE=true
|
||||
shift
|
||||
fi
|
||||
|
||||
[ "$#" -gt 0 ] || usage 1 >&2
|
||||
|
||||
versions=("$@")
|
||||
|
||||
for version in "${versions[@]}"; do
|
||||
case "$version" in
|
||||
"" | -* )
|
||||
usage 1 >&2
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
declare -a before_hooks after_hooks
|
||||
|
||||
before_uninstall() {
|
||||
local hook="$1"
|
||||
before_hooks["${#before_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
after_uninstall() {
|
||||
local hook="$1"
|
||||
after_hooks["${#after_hooks[@]}"]="$hook"
|
||||
}
|
||||
|
||||
OLDIFS="$IFS"
|
||||
IFS=$'\n' scripts=(`pyenv-hooks uninstall`)
|
||||
IFS="$OLDIFS"
|
||||
for script in "${scripts[@]}"; do source "$script"; done
|
||||
|
||||
uninstall-python() {
|
||||
local DEFINITION="$1"
|
||||
|
||||
local VERSION_NAME="${DEFINITION##*/}"
|
||||
local PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
||||
|
||||
if [ -z "$FORCE" ]; then
|
||||
if [ ! -d "$PREFIX" ]; then
|
||||
echo "pyenv: version \`$VERSION_NAME' not installed" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "pyenv: remove $PREFIX? (y/N) "
|
||||
case "$REPLY" in
|
||||
y | Y | yes | YES ) ;;
|
||||
* ) exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for hook in "${before_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
if [ -d "$PREFIX" ]; then
|
||||
rm -rf "$PREFIX"
|
||||
pyenv-rehash
|
||||
echo "pyenv: $VERSION_NAME uninstalled"
|
||||
fi
|
||||
|
||||
for hook in "${after_hooks[@]}"; do eval "$hook"; done
|
||||
}
|
||||
|
||||
for version in "${versions[@]}"; do
|
||||
uninstall-python "$version"
|
||||
done
|
||||
2752
plugins/python-build/bin/python-build
Executable file
2752
plugins/python-build/bin/python-build
Executable file
File diff suppressed because it is too large
Load Diff
26
plugins/python-build/install.sh
Executable file
26
plugins/python-build/install.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
# Usage: PREFIX=/usr/local ./install.sh
|
||||
#
|
||||
# Installs python-build under $PREFIX.
|
||||
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
if [ -z "${PREFIX}" ]; then
|
||||
PREFIX="/usr/local"
|
||||
fi
|
||||
|
||||
BIN_PATH="${PREFIX}/bin"
|
||||
SHARE_PATH="${PREFIX}/share/python-build"
|
||||
|
||||
mkdir -p "$BIN_PATH" "$SHARE_PATH"
|
||||
|
||||
install -p bin/* "$BIN_PATH"
|
||||
for share in share/python-build/*; do
|
||||
if [ -d "$share" ]; then
|
||||
cp -RPp "$share" "$SHARE_PATH"
|
||||
else
|
||||
install -p -m 0644 "$share" "$SHARE_PATH"
|
||||
fi
|
||||
done
|
||||
1
plugins/python-build/scripts/.gitignore
vendored
Normal file
1
plugins/python-build/scripts/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/venv
|
||||
22
plugins/python-build/scripts/README.md
Normal file
22
plugins/python-build/scripts/README.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Scripts for updating python-build
|
||||
|
||||
Install dependencies with `pip install -r requirements.txt`.
|
||||
|
||||
## add_miniconda.py
|
||||
|
||||
```_add_miniconda
|
||||
usage: add_miniconda.py [-h] [-d] [-v]
|
||||
|
||||
Script to add non-"latest" miniconda releases. Written for python 3.7. Checks
|
||||
the miniconda download archives for new versions, then writes a build script
|
||||
for any which do not exist locally, saving it to plugins/python-
|
||||
build/share/python-build. Ignores releases below 4.3.30. Also ignores sub-
|
||||
patch releases if that major.minor.patch already exists, but otherwise, takes
|
||||
the latest sub-patch release for given OS/arch. Assumes all miniconda3
|
||||
releases < 4.7 default to python 3.6, and anything else 3.7.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
-d, --dry-run Do not write scripts, just report them to stdout
|
||||
-v, --verbose Increase verbosity of logging
|
||||
```
|
||||
632
plugins/python-build/scripts/add_cpython.py
Executable file
632
plugins/python-build/scripts/add_cpython.py
Executable file
@@ -0,0 +1,632 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Script to add CPython releases.
|
||||
|
||||
Checks the CPython download archives for new versions,
|
||||
then writes a build script for any which do not exist locally,
|
||||
saving it to plugins/python-build/share/python-build.
|
||||
|
||||
"""
|
||||
import argparse
|
||||
import dataclasses
|
||||
import hashlib
|
||||
import io
|
||||
import itertools
|
||||
import logging
|
||||
import operator
|
||||
import os.path
|
||||
import pathlib
|
||||
import pprint
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import typing
|
||||
import urllib.parse
|
||||
|
||||
import jc
|
||||
import more_itertools
|
||||
import packaging.version
|
||||
import requests
|
||||
import requests_html
|
||||
import sortedcontainers
|
||||
import tqdm
|
||||
|
||||
#CI uses exit code 1 as a signal that no new version is found
|
||||
#so have to produce a different exit code on an exception
|
||||
def _excepthook(type,value,traceback):
|
||||
logging.error("Unhandled exception occured",exc_info=(type,value,traceback))
|
||||
sys.exit(2)
|
||||
sys.excepthook = _excepthook
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
CUTOFF_VERSION=packaging.version.Version('3.10')
|
||||
EXCLUDED_VERSIONS= {
|
||||
}
|
||||
|
||||
here = pathlib.Path(__file__).resolve()
|
||||
OUT_DIR: pathlib.Path = here.parent.parent / "share" / "python-build"
|
||||
|
||||
T_THUNK=\
|
||||
'''export PYTHON_BUILD_FREE_THREADING=1
|
||||
source "${BASH_SOURCE[0]%t}"
|
||||
'''
|
||||
|
||||
|
||||
def adapt_script(version: packaging.version.Version,
|
||||
previous_version: packaging.version.Version) -> typing.Union[pathlib.Path, None]:
|
||||
|
||||
previous_version_path = OUT_DIR.joinpath(str(previous_version))
|
||||
|
||||
with previous_version_path.open("r", encoding='utf-8') as f:
|
||||
script = f.readlines()
|
||||
result = io.StringIO()
|
||||
for line in script:
|
||||
if m:=re.match(r'\s*install_package\s+"(?P<package>Python-\S+)"\s+'
|
||||
r'"(?P<url>\S+)"\s+.*\s+verify_py(?P<verify_py_suffix>\d+)\s+.*$',
|
||||
line):
|
||||
existing_url_path = urllib.parse.urlparse(m.group('url')).path
|
||||
try:
|
||||
matched_download = more_itertools.one(
|
||||
item for item in VersionDirectory.available[version].downloads
|
||||
if existing_url_path.endswith(item.extension))
|
||||
except ValueError:
|
||||
logger.error(f'Cannot match existing URL path\'s {existing_url_path} extension '
|
||||
f'to available downloads {VersionDirectory.available[version].downloads}')
|
||||
return
|
||||
new_package_name, new_package_url = matched_download.package_name, matched_download.url
|
||||
new_package_hash = Url.sha256_url(new_package_url, VersionDirectory.session)
|
||||
|
||||
verify_py_suffix = str(version.major)+str(version.minor)
|
||||
|
||||
line = Re.sub_groups(m,
|
||||
package=new_package_name,
|
||||
url=new_package_url+'#'+new_package_hash,
|
||||
verify_py_suffix=verify_py_suffix)
|
||||
|
||||
elif m:=re.match(r'\s*install_package\s+"(?P<package>openssl-\S+)"\s+'
|
||||
r'"(?P<url>\S+)"\s.*$',
|
||||
line):
|
||||
item = VersionDirectory.openssl.get_store_latest_release()
|
||||
|
||||
line = Re.sub_groups(m,
|
||||
package=item.package_name,
|
||||
url=item.url + '#' + item.hash)
|
||||
|
||||
elif m:=re.match(r'\s*install_package\s+"(?P<package>readline-\S+)"\s+'
|
||||
r'"(?P<url>\S+)"\s.*$',
|
||||
line):
|
||||
item = VersionDirectory.readline.get_store_latest_release()
|
||||
|
||||
line = Re.sub_groups(m,
|
||||
package=item.package_name,
|
||||
url=item.url + '#' + item.hash)
|
||||
|
||||
result.write(line)
|
||||
|
||||
result_path = OUT_DIR.joinpath(str(version))
|
||||
logger.info(f"Writing {result_path}")
|
||||
result_path.write_text(result.getvalue(), encoding='utf-8')
|
||||
result.close()
|
||||
|
||||
return result_path
|
||||
|
||||
def add_version(version: packaging.version.Version):
|
||||
|
||||
previous_version = VersionDirectory.existing.pick_previous_version(version).version
|
||||
|
||||
is_prerelease_upgrade = previous_version.major==version.major\
|
||||
and previous_version.minor==version.minor\
|
||||
and previous_version.micro==version.micro
|
||||
|
||||
logger.info(f"Adding {version} based on {previous_version}"
|
||||
+ (" (prerelease upgrade)" if is_prerelease_upgrade else ""))
|
||||
|
||||
VersionDirectory.available.get_store_available_source_downloads(version)
|
||||
|
||||
new_path = adapt_script(version,
|
||||
previous_version)
|
||||
if not new_path:
|
||||
return False
|
||||
VersionDirectory.existing.append(_CPythonExistingScriptInfo(version,str(new_path)))
|
||||
|
||||
cleanup_prerelease_upgrade(is_prerelease_upgrade, previous_version, version)
|
||||
|
||||
handle_t_thunks(version, previous_version, is_prerelease_upgrade)
|
||||
|
||||
print(version)
|
||||
return True
|
||||
|
||||
|
||||
def cleanup_prerelease_upgrade(
|
||||
is_prerelease_upgrade: bool,
|
||||
previous_version: packaging.version.Version,
|
||||
new_version: packaging.version.Version)\
|
||||
-> None:
|
||||
if not is_prerelease_upgrade:
|
||||
return
|
||||
|
||||
previous_version_filename = str(previous_version)
|
||||
new_version_filename = str(new_version)
|
||||
new_version_path = OUT_DIR / new_version_filename
|
||||
|
||||
logger.info(f'Git moving {previous_version_filename} '
|
||||
f'to {new_version_filename} (preserving new data)')
|
||||
|
||||
data = new_version_path.read_text()
|
||||
new_version_path.unlink()
|
||||
|
||||
subprocess.check_call(("git","-C",OUT_DIR,
|
||||
"mv",
|
||||
previous_version_filename,
|
||||
new_version_filename))
|
||||
|
||||
new_version_path.write_text(data)
|
||||
|
||||
del VersionDirectory.existing[previous_version]
|
||||
|
||||
|
||||
def handle_t_thunks(version, previous_version, is_prerelease_upgrade):
|
||||
if (version.major, version.minor) < (3, 13):
|
||||
return
|
||||
|
||||
# an old thunk may have older version-specific code
|
||||
# so it's safer to write a known version-independent template
|
||||
thunk_name = (str(version) + "t")
|
||||
thunk_path = OUT_DIR / thunk_name
|
||||
previous_thunk_name = str(previous_version) + "t"
|
||||
if is_prerelease_upgrade:
|
||||
logger.info(f"Git moving {previous_thunk_name} to {thunk_name}")
|
||||
subprocess.check_call(("git","-C",OUT_DIR,
|
||||
"mv",
|
||||
previous_thunk_name,
|
||||
thunk_name))
|
||||
|
||||
logger.info(f"Writing {thunk_path}")
|
||||
thunk_path.write_text(T_THUNK, encoding='utf-8')
|
||||
|
||||
|
||||
Arguments: argparse.Namespace
|
||||
|
||||
def main():
|
||||
global Arguments
|
||||
Arguments = parse_args()
|
||||
logging.basicConfig(level=logging.DEBUG if Arguments.verbose else logging.INFO)
|
||||
|
||||
cached_session=requests_html.HTMLSession()
|
||||
global VersionDirectory
|
||||
VersionDirectory = _VersionDirectory(cached_session)
|
||||
|
||||
VersionDirectory.existing.populate()
|
||||
VersionDirectory.available.populate()
|
||||
|
||||
# Prereleases are placed under the same directory as the corresponding release.
|
||||
# So until we know the release is out, its directory is a potential prerelease directory.
|
||||
# Normally, prereleases are only made for initial releases (x.y.0) --
|
||||
# but rarely, they may make them for other releases (e.g. 3.14.5).
|
||||
for release in (v for v in frozenset(VersionDirectory.available.keys()) #refining changes the
|
||||
#corresponding directory key
|
||||
#which breaks iteration
|
||||
#so have to iterate over a copy
|
||||
if v not in VersionDirectory.existing):
|
||||
VersionDirectory.available.get_store_available_source_downloads(release, True)
|
||||
del release
|
||||
|
||||
versions_to_add = sorted(VersionDirectory.available.keys() - VersionDirectory.existing.keys())
|
||||
|
||||
logger.info("Versions to add:\n"+pprint.pformat(versions_to_add))
|
||||
result = False
|
||||
for version_to_add in versions_to_add:
|
||||
result = add_version(version_to_add) or result
|
||||
return int(not result)
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument(
|
||||
"-d", "--dry-run", action="store_true",
|
||||
help="Do not write scripts, just report them to stdout",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v", "--verbose", action="store_true", default=0,
|
||||
help="Increase verbosity of logging",
|
||||
)
|
||||
parsed = parser.parse_args()
|
||||
return parsed
|
||||
|
||||
|
||||
T = typing.TypeVar('T', bound=object)
|
||||
|
||||
K = typing.TypeVar('K', bound=typing.Hashable)
|
||||
|
||||
class KeyedList(typing.List[T], typing.Mapping[K, T]):
|
||||
key_field: str
|
||||
item_init: typing.Callable[..., T] = None
|
||||
|
||||
def __init__(self, seq: typing.Union[typing.Iterable[T], None] = None):
|
||||
super().__init__()
|
||||
self._map = {}
|
||||
if seq is not None:
|
||||
self.__iadd__(seq)
|
||||
|
||||
# read
|
||||
|
||||
def __getitem__(self, key: K) -> T:
|
||||
return self._map[key]
|
||||
|
||||
def __contains__(self, key: K):
|
||||
return key in self._map
|
||||
|
||||
def keys(self) -> typing.AbstractSet[K]:
|
||||
return self._map.keys()
|
||||
|
||||
# write
|
||||
|
||||
def append(self, item: T) -> None:
|
||||
key = self._getkey(item)
|
||||
if key in self:
|
||||
raise ValueError(f"Key '{key:r}' already present")
|
||||
super().append(item)
|
||||
self._map[key] = item
|
||||
|
||||
def __iadd__(self, other: typing.Iterable[T]):
|
||||
for item in other:
|
||||
self.append(item)
|
||||
return self
|
||||
|
||||
def __delitem__(self, key: K):
|
||||
super().remove(self[key])
|
||||
del self._map[key]
|
||||
|
||||
def clear(self):
|
||||
super().__delitem__(slice(None,None))
|
||||
self._map.clear()
|
||||
|
||||
# read-write
|
||||
|
||||
def get_or_create(self, key: K, **kwargs):
|
||||
try:
|
||||
return self[key]
|
||||
except KeyError as e:
|
||||
if self.item_init is None:
|
||||
raise AttributeError("'item_init' must be set to use automatic item creation") from e
|
||||
kwargs[self.key_field] = key
|
||||
item = self.item_init(**kwargs)
|
||||
self.append(item)
|
||||
return item
|
||||
|
||||
# info
|
||||
|
||||
def __repr__(self):
|
||||
return self.__class__.__name__ + "([" + ", ".join(repr(i) for i in self) + "])"
|
||||
|
||||
# private
|
||||
|
||||
def _getkey(self, item: T) -> K:
|
||||
return getattr(item, self.key_field)
|
||||
|
||||
del T, K
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class _CPythonAvailableVersionDownloadInfo:
|
||||
extension: str
|
||||
package_name: str
|
||||
url: str
|
||||
|
||||
class _CPythonAvailableVersionDownloadsDirectory(KeyedList[_CPythonAvailableVersionDownloadInfo, str]):
|
||||
key_field = "extension"
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class _CPythonAvailableVersionInfo:
|
||||
version: packaging.version.Version
|
||||
download_page_url: str
|
||||
downloads: _CPythonAvailableVersionDownloadsDirectory = dataclasses.field(
|
||||
default_factory=lambda:_CPythonAvailableVersionDownloadsDirectory()
|
||||
)
|
||||
|
||||
|
||||
class CPythonAvailableVersionsDirectory(KeyedList[_CPythonAvailableVersionInfo, packaging.version.Version]):
|
||||
key_field = "version"
|
||||
_session: requests.Session
|
||||
item_init = _CPythonAvailableVersionInfo
|
||||
|
||||
def __init__(self, session: requests.Session, seq=None):
|
||||
super().__init__(seq)
|
||||
self._session = session
|
||||
|
||||
def populate(self):
|
||||
"""
|
||||
Fetch remote versions
|
||||
"""
|
||||
logger.info("Fetching available CPython versions")
|
||||
for name, url in DownloadPage.enum_download_entries(
|
||||
"https://www.python.org/ftp/python/",
|
||||
r'^(\d+.*)/$', self._session,
|
||||
make_name= lambda m: m.group(1)
|
||||
):
|
||||
v = packaging.version.Version(name)
|
||||
if v < CUTOFF_VERSION or v in EXCLUDED_VERSIONS:
|
||||
continue
|
||||
logger.debug(f'Available version: {name} ({v}), {url}')
|
||||
self.append(_CPythonAvailableVersionInfo(
|
||||
v,
|
||||
url
|
||||
))
|
||||
|
||||
def get_store_available_source_downloads(self, version, refine_mode=False):
|
||||
entry = self[version]
|
||||
if entry.downloads:
|
||||
#already retrieved
|
||||
return
|
||||
additional_versions_found =\
|
||||
CPythonAvailableVersionsDirectory(self._session) if refine_mode else None
|
||||
exact_download_found = False
|
||||
for name, url in DownloadPage.enum_download_entries(
|
||||
entry.download_page_url,
|
||||
r'Python-.*\.(tar\.xz|tgz)$',
|
||||
self._session):
|
||||
m = re.match(r'(?P<package>Python-(?P<version>.*))\.(?P<extension>tar\.xz|tgz)$', name)
|
||||
|
||||
download_version = packaging.version.Version(m.group("version"))
|
||||
if download_version != version:
|
||||
if not refine_mode:
|
||||
raise ValueError(f"Unexpectedly found a download {name} ({download_version}) "
|
||||
f"for {version} at page {entry.download_page_url}")
|
||||
entry_to_fill = additional_versions_found.get_or_create(
|
||||
download_version,
|
||||
download_page_url=entry.download_page_url
|
||||
)
|
||||
else:
|
||||
exact_download_found = True
|
||||
entry_to_fill = entry
|
||||
|
||||
entry_to_fill.downloads.append(_CPythonAvailableVersionDownloadInfo(
|
||||
m.group("extension"), m.group('package'), url
|
||||
))
|
||||
|
||||
if not exact_download_found:
|
||||
actual_version = max(additional_versions_found.keys())
|
||||
logger.debug(f"Refining available version {version} to {actual_version}")
|
||||
del self[version]
|
||||
|
||||
self.append(
|
||||
additional_versions_found[
|
||||
actual_version
|
||||
])
|
||||
|
||||
|
||||
class _CPythonExistingScriptInfo(typing.NamedTuple):
|
||||
version: packaging.version.Version
|
||||
filename: str
|
||||
|
||||
class CPythonExistingScriptsDirectory(KeyedList[_CPythonExistingScriptInfo, packaging.version.Version]):
|
||||
key_field = "version"
|
||||
_filename_pattern = r'^\d+\.\d+(?:(t?)(-\w+)|(.\d+((?:a|b|rc)\d)?(t?)))$'
|
||||
|
||||
def populate(self):
|
||||
"""
|
||||
Enumerate existing installation scripts in share/python-build/ by pattern
|
||||
"""
|
||||
logger.info(f"Enumerating existing versions in {OUT_DIR}")
|
||||
for entry_name in (p.name for p in OUT_DIR.iterdir() if p.is_file()):
|
||||
if (not (m := re.match(self._filename_pattern, entry_name))
|
||||
or m.group(1) == 't' or m.group(5) == 't'):
|
||||
continue
|
||||
try:
|
||||
v = packaging.version.Version(entry_name)
|
||||
if v < CUTOFF_VERSION:
|
||||
continue
|
||||
# branch tip scrpts are different from release scripts and thus unusable as a pattern
|
||||
if v.dev is not None:
|
||||
continue
|
||||
logger.debug(f"Existing version {v}")
|
||||
|
||||
self.append(_CPythonExistingScriptInfo(v, entry_name))
|
||||
|
||||
except ValueError as e:
|
||||
logger.error(f"Unable to parse existing version {entry_name}: {e}")
|
||||
|
||||
def pick_previous_version(self,
|
||||
version: packaging.version.Version) \
|
||||
-> _CPythonExistingScriptInfo:
|
||||
return max(v for v in self if v.version < version)
|
||||
|
||||
|
||||
class _OpenSSLVersionInfo(typing.NamedTuple):
|
||||
version: packaging.version.Version
|
||||
package_name: str
|
||||
url: str
|
||||
hash: str
|
||||
|
||||
class OpenSSLVersionsDirectory(KeyedList[_OpenSSLVersionInfo, packaging.version.Version]):
|
||||
key_field = "version"
|
||||
|
||||
def get_store_latest_release(self) \
|
||||
-> _OpenSSLVersionInfo:
|
||||
if self:
|
||||
#already retrieved
|
||||
return self[max(self.keys())]
|
||||
|
||||
j = requests.get("https://api.github.com/repos/openssl/openssl/releases/latest", timeout=30).json()
|
||||
# noinspection PyTypeChecker
|
||||
# urlparse can parse str as well as bytes
|
||||
shasum_url = more_itertools.one(
|
||||
asset['browser_download_url']
|
||||
for asset in j['assets']
|
||||
if urllib.parse.urlparse(asset['browser_download_url']).path.split('/')[-1].endswith('.sha256')
|
||||
)
|
||||
shasum_text = requests.get(shasum_url, timeout=30).text
|
||||
shasum_data = jc.parse("hashsum", shasum_text, quiet=True)[0]
|
||||
package_hash, package_filename = shasum_data["hash"], shasum_data["filename"]
|
||||
del shasum_data, shasum_text, shasum_url
|
||||
|
||||
# OpenSSL Github repo has tag names "openssl-<version>" as of this writing like we need
|
||||
# but let's not rely on that
|
||||
# splitext doesn't work with a chained extension, it only splits off the last one
|
||||
package_name, package_version_str = re.match(r"([^-]+-(.*?))\.\D", package_filename).groups()
|
||||
package_version = packaging.version.Version(package_version_str)
|
||||
|
||||
package_url = more_itertools.one(
|
||||
asset['browser_download_url']
|
||||
for asset in j['assets']
|
||||
if urllib.parse.urlparse(asset['browser_download_url']).path.split('/')[-1] == package_filename
|
||||
)
|
||||
|
||||
result = _OpenSSLVersionInfo(package_version, package_name, package_url, package_hash)
|
||||
self.append(result)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class _ReadlineVersionInfo(typing.NamedTuple):
|
||||
version : packaging.version.Version
|
||||
package_name : str
|
||||
url : str
|
||||
hash : str
|
||||
|
||||
class ReadlineVersionsDirectory(KeyedList[_ReadlineVersionInfo, packaging.version.Version]):
|
||||
key_field = "version"
|
||||
|
||||
def get_store_latest_release(self):
|
||||
if not self:
|
||||
self._store_latest_release()
|
||||
return self._latest_release()
|
||||
|
||||
def _store_latest_release(self):
|
||||
candidates = ReadlineVersionsDirectory()
|
||||
|
||||
pattern = r'(?P<package_name>readline-(?P<version>\d+(?:\.\d+)+)).tar\.gz$'
|
||||
for name, url in DownloadPage.enum_download_entries(
|
||||
'https://ftpmirror.gnu.org/readline/', pattern, VersionDirectory.session):
|
||||
m = re.match(pattern, name)
|
||||
version = packaging.version.Version(m.group('version'))
|
||||
candidates.append(_ReadlineVersionInfo(
|
||||
version,
|
||||
m.group('package_name'),
|
||||
url,
|
||||
""
|
||||
))
|
||||
max_item = candidates._latest_release()
|
||||
hash_ = Url.sha256_url(max_item.url, VersionDirectory.session)
|
||||
|
||||
permalink = 'https://ftpmirror.gnu.org/readline/' +\
|
||||
os.path.basename(urllib.parse.urlparse(max_item.url).path)
|
||||
|
||||
result = _ReadlineVersionInfo(
|
||||
max_item.version,
|
||||
max_item.package_name,
|
||||
permalink,
|
||||
hash_)
|
||||
self.append(result)
|
||||
|
||||
return result
|
||||
|
||||
def _latest_release(self):
|
||||
return self[max(self.keys())]
|
||||
|
||||
class _VersionDirectory:
|
||||
def __init__(self, session):
|
||||
self.existing = CPythonExistingScriptsDirectory()
|
||||
self.available = CPythonAvailableVersionsDirectory(session)
|
||||
self.openssl = OpenSSLVersionsDirectory()
|
||||
self.readline = ReadlineVersionsDirectory()
|
||||
self.session = session
|
||||
VersionDirectory : _VersionDirectory
|
||||
|
||||
class DownloadPage:
|
||||
class _DownloadPageEntry(typing.NamedTuple):
|
||||
name: str
|
||||
url: str
|
||||
|
||||
@classmethod
|
||||
def enum_download_entries(cls, url, pattern, session=None,
|
||||
make_name = lambda m: m.string ) \
|
||||
-> typing.Generator[_DownloadPageEntry, None, None]:
|
||||
"""
|
||||
Enum download entries in a standard Apache directory page
|
||||
(incl. CPython download page https://www.python.org/ftp/python/)
|
||||
or a GNU mirror directory page
|
||||
(https://ftpmirror.gnu.org/<package>/ destinations)
|
||||
"""
|
||||
if session is None:
|
||||
session = requests_html.HTMLSession()
|
||||
response = session.get(url, timeout=30)
|
||||
page = response.html
|
||||
table = page.find("pre", first=True)
|
||||
# some GNU mirrors format entries as a table
|
||||
# (e.g. https://mirrors.ibiblio.org/gnu/readline/)
|
||||
if table is None:
|
||||
table = page.find("table", first=True)
|
||||
links = table.find("a")
|
||||
for link in links:
|
||||
href = link.attrs['href']
|
||||
# CPython entries are directories
|
||||
name = link.text
|
||||
# skip directory entries
|
||||
if not (m:=re.match(pattern, name)):
|
||||
continue
|
||||
name = make_name(m)
|
||||
yield cls._DownloadPageEntry(name, urllib.parse.urljoin(response.url, href))
|
||||
|
||||
|
||||
class Re:
|
||||
@dataclasses.dataclass
|
||||
class _interval:
|
||||
group: typing.Union[int, str, None]
|
||||
start: int
|
||||
end: int
|
||||
@staticmethod
|
||||
def sub_groups(match: re.Match,
|
||||
/, *args: [typing.AnyStr],
|
||||
**kwargs: [typing.AnyStr])\
|
||||
-> typing.AnyStr:
|
||||
repls={i:repl for i,repl in enumerate(args) if repl is not None}
|
||||
repls.update({n:repl for n,repl in kwargs.items() if repl is not None})
|
||||
|
||||
intervals: sortedcontainers.SortedList[Re._interval]=\
|
||||
sortedcontainers.SortedKeyList(key=operator.attrgetter("start","end"))
|
||||
|
||||
for group_id in itertools.chain(range(1,len(match.groups())), match.groupdict().keys()):
|
||||
if group_id not in repls:
|
||||
continue
|
||||
if match.start(group_id) == -1:
|
||||
continue
|
||||
intervals.add(Re._interval(group_id,match.start(group_id),match.end(group_id)))
|
||||
del group_id
|
||||
|
||||
last_interval=Re._interval(None,0,0)
|
||||
result=""
|
||||
for interval in intervals:
|
||||
if interval.start < last_interval.end:
|
||||
raise ValueError(f"Cannot replace intersecting matches "
|
||||
f"for groups {last_interval.group} and {interval.group} "
|
||||
f"(position {interval.start})")
|
||||
if interval.end == interval.start and \
|
||||
last_interval.start == last_interval.end == interval.start:
|
||||
raise ValueError(f"Cannot replace consecutive zero-length matches "
|
||||
f"for groups {last_interval.group} and {interval.group} "
|
||||
f"(position {interval.start})")
|
||||
|
||||
result+=match.string[last_interval.end:interval.start]+repls[interval.group]
|
||||
last_interval = interval
|
||||
result+=match.string[last_interval.end:]
|
||||
|
||||
return result
|
||||
|
||||
class Url:
|
||||
@staticmethod
|
||||
def sha256_url(url, session=None):
|
||||
if session is None:
|
||||
session = requests_html.HTMLSession()
|
||||
logger.info(f"Downloading and computing hash of {url}")
|
||||
h=hashlib.sha256()
|
||||
r=session.get(url,stream=True,timeout=30)
|
||||
total_bytes=int(r.headers.get('content-length',0)) or float('inf')
|
||||
with tqdm.tqdm(total=total_bytes, unit='B', unit_scale=True, unit_divisor=1024) as t:
|
||||
for c in r.iter_content(1024):
|
||||
t.update(len(c))
|
||||
h.update(c)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
437
plugins/python-build/scripts/add_miniconda.py
Executable file
437
plugins/python-build/scripts/add_miniconda.py
Executable file
@@ -0,0 +1,437 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Script to add non-"latest" miniconda releases.
|
||||
Written for python 3.7.
|
||||
|
||||
Checks the miniconda download archives for new versions,
|
||||
then writes a build script for any which do not exist locally,
|
||||
saving it to plugins/python-build/share/python-build.
|
||||
|
||||
Ignores releases below 4.3.30.
|
||||
Also ignores sub-patch releases if that major.minor.patch already exists,
|
||||
but otherwise, takes the latest sub-patch release for given OS/arch.
|
||||
Assumes all miniconda3 releases < 4.7 default to python 3.6, and anything else 3.7.
|
||||
"""
|
||||
import logging
|
||||
import re
|
||||
import string
|
||||
import sys
|
||||
import textwrap
|
||||
from argparse import ArgumentParser
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from functools import total_ordering
|
||||
from pathlib import Path
|
||||
from typing import NamedTuple, List, Optional, DefaultDict, Dict
|
||||
|
||||
import requests_html
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
CONDA_REPO = "https://repo.anaconda.com"
|
||||
MINICONDA_REPO = CONDA_REPO + "/miniconda"
|
||||
ANACONDA_REPO = CONDA_REPO + "/archive"
|
||||
|
||||
auto_accept_tos_fmt="""export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
|
||||
""".strip()
|
||||
|
||||
install_script_fmt = """
|
||||
{auto_accept_tos}
|
||||
case "$(anaconda_architecture 2>/dev/null || true)" in
|
||||
{install_lines}
|
||||
* )
|
||||
{{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of {tflavor} is not available for $(anaconda_architecture 2>/dev/null || true)."
|
||||
echo
|
||||
}} >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
""".lstrip()
|
||||
|
||||
install_line_fmt = """
|
||||
"{os}-{arch}" )
|
||||
install_script "{tflavor}{suffix}-{version_py_version}{version_str}-{os}-{arch}" "{repo}/{tflavor}{suffix}-{version_py_version}{version_str}-{os}-{arch}.sh#{md5}" "{flavor}" verify_{py_version}
|
||||
;;
|
||||
""".strip()
|
||||
|
||||
here = Path(__file__).resolve()
|
||||
out_dir: Path = here.parent.parent / "share" / "python-build"
|
||||
|
||||
|
||||
class StrEnum(str, Enum):
|
||||
"""Enum subclass whose members are also instances of str
|
||||
and directly comparable to strings. str type is forced at declaration.
|
||||
|
||||
Adapted from https://github.com/kissgyorgy/enum34-custom/blob/dbc89596761c970398701d26c6a5bbcfcf70f548/enum_custom.py#L100
|
||||
(MIT license)
|
||||
"""
|
||||
|
||||
def __new__(cls, *args):
|
||||
for arg in args:
|
||||
if not isinstance(arg, str):
|
||||
raise TypeError("Not text %s:" % arg)
|
||||
|
||||
return super(StrEnum, cls).__new__(cls, *args)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.value)
|
||||
|
||||
|
||||
class SupportedOS(StrEnum):
|
||||
LINUX = "Linux"
|
||||
MACOSX = "MacOSX"
|
||||
|
||||
|
||||
class SupportedArch(StrEnum):
|
||||
AARCH64 = "aarch64"
|
||||
ARM64 = "arm64"
|
||||
PPC64LE = "ppc64le"
|
||||
S390X = "s390x"
|
||||
X86_64 = "x86_64"
|
||||
X86 = "x86"
|
||||
|
||||
|
||||
class Flavor(StrEnum):
|
||||
ANACONDA = "anaconda"
|
||||
MINICONDA = "miniconda"
|
||||
|
||||
|
||||
class TFlavor(StrEnum):
|
||||
ANACONDA = "Anaconda"
|
||||
MINICONDA = "Miniconda"
|
||||
|
||||
|
||||
class Suffix(StrEnum):
|
||||
TWO = "2"
|
||||
THREE = "3"
|
||||
NONE = ""
|
||||
|
||||
|
||||
PyVersion = None
|
||||
class PyVersionMeta(type):
|
||||
def __getattr__(self, name):
|
||||
"""Generate PyVersion.PYXXX on demand to future-proof it"""
|
||||
if PyVersion is not None:
|
||||
return PyVersion(name.lower())
|
||||
return super(PyVersionMeta,self).__getattr__(self, name)
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class PyVersion(metaclass=PyVersionMeta):
|
||||
major: str
|
||||
minor: str
|
||||
|
||||
def __init__(self, value):
|
||||
(major, minor) = re.match(r"py(\d)(\d+)", value).groups()
|
||||
object.__setattr__(self, "major", major)
|
||||
object.__setattr__(self, "minor", minor)
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
return f"py{self.major}{self.minor}"
|
||||
|
||||
def version(self):
|
||||
return f"{self.major}.{self.minor}"
|
||||
|
||||
def version_info(self):
|
||||
return (self.major, self.minor)
|
||||
|
||||
def __str__(self):
|
||||
return self.value
|
||||
|
||||
|
||||
@total_ordering
|
||||
class VersionStr(str):
|
||||
def info(self):
|
||||
return tuple(int(n) for n in self.replace("-", ".").split("."))
|
||||
|
||||
def __eq__(self, other):
|
||||
return str(self) == str(other)
|
||||
|
||||
def __lt__(self, other):
|
||||
if isinstance(other, VersionStr):
|
||||
return self.info() < other.info()
|
||||
raise ValueError("VersionStr can only be compared to other VersionStr")
|
||||
|
||||
@classmethod
|
||||
def from_info(cls, version_info):
|
||||
return VersionStr(".".join(str(n) for n in version_info))
|
||||
|
||||
def __hash__(self):
|
||||
return hash(str(self))
|
||||
|
||||
|
||||
class CondaVersion(NamedTuple):
|
||||
flavor: Flavor
|
||||
suffix: Suffix
|
||||
version_str: VersionStr
|
||||
py_version: Optional[PyVersion]
|
||||
|
||||
@classmethod
|
||||
def from_str(cls, s):
|
||||
"""
|
||||
Convert a string of the form "miniconda_n-ver" or "miniconda_n-py_ver-ver" to a :class:`CondaVersion` object.
|
||||
"""
|
||||
miniconda_n, _, remainder = s.partition("-")
|
||||
suffix = miniconda_n[-1]
|
||||
if suffix in string.digits:
|
||||
flavor = miniconda_n[:-1]
|
||||
else:
|
||||
flavor = miniconda_n
|
||||
suffix = ""
|
||||
|
||||
components = remainder.split("-")
|
||||
if flavor == Flavor.MINICONDA and len(components) >= 2:
|
||||
py_ver, *ver_parts = components
|
||||
py_ver = PyVersion(f"py{py_ver.replace('.', '')}")
|
||||
ver = "-".join(ver_parts)
|
||||
else:
|
||||
ver = "-".join(components)
|
||||
py_ver = None
|
||||
|
||||
return CondaVersion(Flavor(flavor), Suffix(suffix), VersionStr(ver), py_ver)
|
||||
|
||||
def to_filename(self):
|
||||
if self.py_version:
|
||||
return f"{self.flavor}{self.suffix}-{self.py_version.version()}-{self.version_str}"
|
||||
else:
|
||||
return f"{self.flavor}{self.suffix}-{self.version_str}"
|
||||
|
||||
def default_py_version(self):
|
||||
"""
|
||||
:class:`PyVersion` of Python used with this Miniconda version
|
||||
"""
|
||||
if self.py_version:
|
||||
return self.py_version
|
||||
elif self.suffix == Suffix.TWO:
|
||||
return PyVersion.PY27
|
||||
|
||||
v = self.version_str.info()
|
||||
if self.flavor == "miniconda":
|
||||
# https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html
|
||||
if v < (4, 7):
|
||||
return PyVersion.PY36
|
||||
if v < (4, 8):
|
||||
return PyVersion.PY37
|
||||
else:
|
||||
# since 4.8, Miniconda specifies versions explicitly in the file name
|
||||
raise ValueError("Miniconda 4.8+ is supposed to specify a Python version explicitly")
|
||||
if self.flavor == "anaconda":
|
||||
# https://www.anaconda.com/docs/tools/anaconda-org/release-notes
|
||||
if v >= (2025,6):
|
||||
return PyVersion.PY313
|
||||
if v >= (2024,6):
|
||||
return PyVersion.PY312
|
||||
if v >= (2023,7):
|
||||
return PyVersion.PY311
|
||||
if v >= (2023,3):
|
||||
return PyVersion.PY310
|
||||
if v >= (2021,11):
|
||||
return PyVersion.PY39
|
||||
if v >= (2020,7):
|
||||
return PyVersion.PY38
|
||||
if v >= (2020,2):
|
||||
return PyVersion.PY37
|
||||
if v >= (5,3,0):
|
||||
return PyVersion.PY37
|
||||
return PyVersion.PY36
|
||||
|
||||
raise ValueError(self.flavor)
|
||||
|
||||
def requires_tos_accept(self):
|
||||
"""
|
||||
requires to accept TOS for installation
|
||||
"""
|
||||
return self.flavor == Flavor.MINICONDA \
|
||||
and self.version_str.info() >= (25,)
|
||||
|
||||
|
||||
class CondaSpec(NamedTuple):
|
||||
tflavor: TFlavor
|
||||
version: CondaVersion
|
||||
os: SupportedOS
|
||||
arch: SupportedArch
|
||||
md5: str
|
||||
repo: str
|
||||
py_version: Optional[PyVersion] = None
|
||||
|
||||
@classmethod
|
||||
def from_filestem(cls, stem, md5, repo, py_version=None):
|
||||
# The `*vers` captures the new trailing `-1` in some file names (a build number?)
|
||||
# so they can be processed properly.
|
||||
miniconda_n, *vers, os, arch = stem.split("-")
|
||||
ver = "-".join(vers)
|
||||
suffix = miniconda_n[-1]
|
||||
if suffix in string.digits:
|
||||
tflavor = miniconda_n[:-1]
|
||||
else:
|
||||
tflavor = miniconda_n
|
||||
suffix = ""
|
||||
flavor = tflavor.lower()
|
||||
|
||||
if ver.startswith("py"):
|
||||
py_ver, ver = ver.split("_", maxsplit=1)
|
||||
py_ver = PyVersion(py_ver)
|
||||
else:
|
||||
py_ver = None
|
||||
spec = CondaSpec(
|
||||
TFlavor(tflavor),
|
||||
CondaVersion(Flavor(flavor), Suffix(suffix), VersionStr(ver), py_ver),
|
||||
SupportedOS(os),
|
||||
SupportedArch(arch),
|
||||
md5,
|
||||
repo,
|
||||
py_ver
|
||||
)
|
||||
if py_version is None and py_ver is None and ver != "latest":
|
||||
spec = spec.with_py_version(spec.version.default_py_version())
|
||||
return spec
|
||||
|
||||
def to_install_lines(self):
|
||||
"""
|
||||
Installation command for this version of Miniconda for use in a Pyenv installation script
|
||||
"""
|
||||
return install_line_fmt.format(
|
||||
tflavor=self.tflavor,
|
||||
flavor=self.version.flavor,
|
||||
repo=self.repo,
|
||||
suffix=self.version.suffix,
|
||||
version_str=self.version.version_str,
|
||||
version_py_version=f"{self.version.py_version}_" if self.version.py_version else "",
|
||||
os=self.os,
|
||||
arch=self.arch,
|
||||
md5=self.md5,
|
||||
py_version=self.py_version,
|
||||
)
|
||||
|
||||
def with_py_version(self, py_version: PyVersion):
|
||||
return CondaSpec(*self[:-1], py_version=py_version)
|
||||
|
||||
|
||||
def make_script(specs: List[CondaSpec]):
|
||||
install_lines = [s.to_install_lines() for s in specs]
|
||||
return install_script_fmt.format(
|
||||
install_lines="\n".join(install_lines),
|
||||
tflavor=specs[0].tflavor,
|
||||
auto_accept_tos = auto_accept_tos_fmt if specs[0].version.requires_tos_accept() else ""
|
||||
).lstrip()
|
||||
|
||||
|
||||
def get_existing_condas(name):
|
||||
"""
|
||||
Enumerate existing Miniconda installation scripts in share/python-build/ except rolling releases.
|
||||
|
||||
:returns: A generator of :class:`CondaVersion` objects.
|
||||
"""
|
||||
logger.info("Getting known %(name)s versions",locals())
|
||||
for p in out_dir.iterdir():
|
||||
entry_name = p.name
|
||||
if not p.is_file() or not entry_name.startswith(name):
|
||||
continue
|
||||
try:
|
||||
v = CondaVersion.from_str(entry_name)
|
||||
if v.version_str != "latest":
|
||||
logger.debug("Found existing %(name)s version %(v)s", locals())
|
||||
yield v
|
||||
except ValueError as e:
|
||||
logger.error("Unable to parse existing version %s: %s", entry_name, e)
|
||||
|
||||
|
||||
def get_available_condas(name, repo):
|
||||
"""
|
||||
Fetch remote miniconda versions.
|
||||
|
||||
:returns: A generator of :class:`CondaSpec` objects for each release available for download
|
||||
except rolling releases.
|
||||
"""
|
||||
logger.info("Fetching remote %(name)s versions",locals())
|
||||
session = requests_html.HTMLSession()
|
||||
response = session.get(repo)
|
||||
page: requests_html.HTML = response.html
|
||||
table = page.find("table", first=True)
|
||||
rows = table.find("tr")[1:]
|
||||
for row in rows:
|
||||
f, size, date, md5 = row.find("td")
|
||||
fname = f.text
|
||||
md5 = md5.text
|
||||
|
||||
if not fname.endswith(".sh"):
|
||||
continue
|
||||
stem = fname[:-3]
|
||||
|
||||
try:
|
||||
s = CondaSpec.from_filestem(stem, md5, repo)
|
||||
if s.version.version_str != "latest":
|
||||
logger.debug("Found remote %(name)s version %(s)s", locals())
|
||||
yield s
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
def key_fn(spec: CondaSpec):
|
||||
return (
|
||||
spec.tflavor,
|
||||
spec.version.version_str.info(),
|
||||
spec.version.suffix.value,
|
||||
spec.os.value,
|
||||
spec.arch.value,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = ArgumentParser(description=__doc__)
|
||||
parser.add_argument(
|
||||
"-d", "--dry-run", action="store_true",
|
||||
help="Do not write scripts, just report them to stdout",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v", "--verbose", action="store_true", default=0,
|
||||
help="Increase verbosity of logging",
|
||||
)
|
||||
parsed = parser.parse_args()
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG if parsed.verbose else logging.INFO)
|
||||
|
||||
existing_versions = set()
|
||||
available_specs = set()
|
||||
for name,repo in ("miniconda",MINICONDA_REPO),("anaconda",ANACONDA_REPO):
|
||||
existing_versions |= set(get_existing_condas(name))
|
||||
available_specs |= set(get_available_condas(name, repo))
|
||||
|
||||
# version triple to triple-ified spec to raw spec
|
||||
to_add: DefaultDict[
|
||||
CondaVersion, Dict[CondaSpec, CondaSpec]
|
||||
] = defaultdict(dict)
|
||||
|
||||
logger.info("Checking for new versions")
|
||||
for s in sorted(available_specs, key=key_fn):
|
||||
key = s.version
|
||||
vv = key.version_str.info()
|
||||
|
||||
reason = None
|
||||
if key in existing_versions:
|
||||
reason = "already exists"
|
||||
elif key.version_str.info() <= (4, 3, 30):
|
||||
reason = "too old"
|
||||
elif len(key.version_str.info()) >= 4 and "-" not in key.version_str:
|
||||
reason = "ignoring hotfix releases"
|
||||
|
||||
if reason:
|
||||
logger.debug("Ignoring version %(s)s (%(reason)s)", locals())
|
||||
continue
|
||||
|
||||
to_add[key][s] = s
|
||||
|
||||
logger.info("Writing %s scripts", len(to_add))
|
||||
for ver, d in to_add.items():
|
||||
specs = list(d.values())
|
||||
fpath = out_dir / ver.to_filename()
|
||||
script_str = make_script(specs)
|
||||
logger.info("Writing script for %s", ver)
|
||||
if parsed.dry_run:
|
||||
print(f"Would write spec to {fpath}:\n" + textwrap.indent(script_str, " "))
|
||||
else:
|
||||
with open(fpath, "w") as f:
|
||||
f.write(script_str)
|
||||
152
plugins/python-build/scripts/add_miniforge.py
Executable file
152
plugins/python-build/scripts/add_miniforge.py
Executable file
@@ -0,0 +1,152 @@
|
||||
#!/usr/bin/env python3
|
||||
'Adds the latest miniforge and mambaforge releases.'
|
||||
from pathlib import Path
|
||||
import logging
|
||||
import os
|
||||
import string
|
||||
|
||||
import requests
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=os.environ.get('LOGLEVEL', 'INFO'))
|
||||
|
||||
MINIFORGE_REPO = 'conda-forge/miniforge'
|
||||
DISTRIBUTIONS = ['miniforge']
|
||||
DISTRIBUTIONS_PRE25 = ['miniforge', 'mambaforge']
|
||||
|
||||
SKIPPED_RELEASES = [
|
||||
'4.13.0-0', #has no Mambaforge. We already generated scripts for Miniforge
|
||||
'22.11.1-0', #MacOS packages are broken (have broken dep tarballs, downloading them fails with 403)
|
||||
'22.11.1-1', #MacOS packages are broken (have broken dep tarballs, downloading them fails with 403)
|
||||
'22.11.1-2', #MacOS packages are broken (have broken dep tarballs, downloading them fails with 403)
|
||||
'25.3.0-0', #marked as prerelease, no Linux version
|
||||
'25.11.0-0', #regression reported in constructor, re-released as 25.11.0-1 with hotfix bumping to constructor>=3.14 (was >=3.12, 3.13 implicit)
|
||||
]
|
||||
|
||||
install_script_fmt = """
|
||||
case "$(anaconda_architecture 2>/dev/null || true)" in
|
||||
{install_lines}
|
||||
* )
|
||||
{{ echo
|
||||
colorize 1 "ERROR"
|
||||
echo ": The binary distribution of {flavor} is not available for $(anaconda_architecture 2>/dev/null || true)."
|
||||
echo
|
||||
}} >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
""".lstrip()
|
||||
|
||||
install_line_fmt = """
|
||||
"{os}-{arch}" )
|
||||
install_script "{filename}" "{url}#{sha}" "miniconda" verify_py{py_version}
|
||||
;;
|
||||
""".strip()
|
||||
|
||||
here = Path(__file__).resolve()
|
||||
out_dir: Path = here.parent.parent / "share" / "python-build"
|
||||
|
||||
def download_sha(url):
|
||||
logger.info(f'Downloading SHA file {url}')
|
||||
tup = tuple(reversed(requests.get(url).text.replace('./', '').rstrip().split()))
|
||||
logger.debug(f'Got {tup}')
|
||||
return tup
|
||||
|
||||
def create_spec(filename, sha, url):
|
||||
flavor_with_suffix, version, subversion, os, arch = filename.replace('.sh', '').split('-')
|
||||
suffix = flavor_with_suffix[-1]
|
||||
|
||||
if suffix in string.digits:
|
||||
flavor = flavor_with_suffix[:-1]
|
||||
else:
|
||||
flavor = flavor_with_suffix
|
||||
|
||||
spec = {
|
||||
'filename': filename,
|
||||
'sha': sha,
|
||||
'url': url,
|
||||
'py_version': py_version(version),
|
||||
'flavor': flavor,
|
||||
'os': os,
|
||||
'arch': arch,
|
||||
'installer_filename': f'{flavor_with_suffix.lower()}-{version}-{subversion}',
|
||||
}
|
||||
|
||||
logger.debug(f'Created spec {spec}')
|
||||
|
||||
return spec
|
||||
|
||||
def version_tuple(version):
|
||||
return tuple(int(part) for part in version.split('-')[0].split("."))
|
||||
|
||||
def py_version(version):
|
||||
"""Suffix for `verify_pyXXX` to call in the generated build script"""
|
||||
version_tuple_ = version_tuple(version)
|
||||
# current version: mentioned under https://github.com/conda-forge/miniforge?tab=readme-ov-file#requirements-and-installers
|
||||
# transition points:
|
||||
# https://github.com/conda-forge/miniforge/blame/main/Miniforge3/construct.yaml
|
||||
# look for "- python <version>" in non-pypy branch and which tag the commit is first in
|
||||
if version_tuple_ >= (26,1):
|
||||
# https://github.com/conda-forge/miniforge/commit/0016367731e52c67234d6d0e7e6a24c6bf7673e4
|
||||
return "313"
|
||||
if version_tuple_ >= (24,5):
|
||||
# yes, they jumped from 3.10 directly to 3.12
|
||||
# https://github.com/conda-forge/miniforge/commit/bddad0baf22b37cfe079e47fd1680fdfb2183590
|
||||
return "312"
|
||||
if version_tuple_ >= (4,14):
|
||||
return "310"
|
||||
raise ValueError("Bundled Python version unknown for release `%s'"%version)
|
||||
|
||||
def supported(filename):
|
||||
return ('pypy' not in filename) and ('Windows' not in filename) and (not filename.endswith('.pkg'))
|
||||
|
||||
def add_version(release, distributions):
|
||||
tag_name = release['tag_name']
|
||||
download_urls = { f['name']: f['browser_download_url'] for f in release['assets'] }
|
||||
# can assume that sha files are named similar to release files so can also check supported(on their names)
|
||||
shas = dict([download_sha(url) for (name, url) in download_urls.items()
|
||||
if name.endswith('.sha256') and supported(os.path.splitext(name)[0]) and tag_name in name])
|
||||
specs = [create_spec(filename, sha, download_urls[filename]) for (filename, sha) in shas.items() if supported(filename)]
|
||||
|
||||
|
||||
for distribution in distributions:
|
||||
distribution_specs = [spec for spec in specs if distribution in spec['flavor'].lower()]
|
||||
count = len(distribution_specs)
|
||||
|
||||
if count > 0:
|
||||
output_file = out_dir / distribution_specs[0]['installer_filename']
|
||||
|
||||
logger.info(f'Writing {count} specs for {distribution} to {output_file}')
|
||||
|
||||
script_str = install_script_fmt.format(
|
||||
install_lines="\n".join([install_line_fmt.format_map(s) for s in distribution_specs]),
|
||||
flavor=distribution_specs[0]['flavor'],
|
||||
)
|
||||
|
||||
with open(output_file, 'w') as f:
|
||||
f.write(script_str)
|
||||
else:
|
||||
logger.info(f'Did not find specs for {distribution}')
|
||||
|
||||
|
||||
def main():
|
||||
for release in requests.get(f'https://api.github.com/repos/{MINIFORGE_REPO}/releases').json():
|
||||
version = release['tag_name']
|
||||
|
||||
if version in SKIPPED_RELEASES:
|
||||
continue
|
||||
|
||||
logger.info(f'Looking for {version} in {out_dir}')
|
||||
|
||||
# mambaforge is retired https://github.com/conda-forge/miniforge/releases/tag/24.11.2-0
|
||||
if version_tuple(version) >= (24, 11, 2):
|
||||
distributions = DISTRIBUTIONS
|
||||
else:
|
||||
distributions = DISTRIBUTIONS_PRE25
|
||||
|
||||
if any(not list(out_dir.glob(f'{distribution}*-{version}')) for distribution in distributions):
|
||||
logger.info(f'Downloading {version}')
|
||||
add_version(release, distributions)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
9
plugins/python-build/scripts/requirements.txt
Normal file
9
plugins/python-build/scripts/requirements.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
more_itertools
|
||||
requests-html
|
||||
fake_useragent<2
|
||||
lxml[html_clean]
|
||||
packaging
|
||||
requests
|
||||
sortedcontainers
|
||||
tqdm
|
||||
jc @ git+https://github.com/native-api/jc@haslib_mode
|
||||
5
plugins/python-build/share/python-build/2.1.3
Normal file
5
plugins/python-build/share/python-build/2.1.3
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-6.2" "https://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.1.3" "https://www.python.org/ftp/python/2.1.3/Python-2.1.3.tgz#1bcb5bb587948bc38f36db60e15c376009c56c66570e563a08a82bf7f227afb9" standard verify_py21
|
||||
#install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
#install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.2.3
Normal file
5
plugins/python-build/share/python-build/2.2.3
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-6.2" "https://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.2.3" "https://www.python.org/ftp/python/2.2.3/Python-2.2.3.tgz#a8f92e6b89d47359fff0d1fbfe47f104afc77fd1cd5143e7332758b7bc100188" standard verify_py22
|
||||
#install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
#install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.3.7
Normal file
5
plugins/python-build/share/python-build/2.3.7
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-6.2" "https://ftpmirror.gnu.org/readline/readline-6.2.tar.gz#79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.3.7" "https://www.python.org/ftp/python/2.3.7/Python-2.3.7.tgz#969a9891dce9f50b13e54f9890acaf2be66715a5895bf9b11111f320c205b90e" standard verify_py23
|
||||
#install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
#install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.0
Normal file
5
plugins/python-build/share/python-build/2.4.0
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4" "https://www.python.org/ftp/python/2.4/Python-2.4.tgz#ff746de0fae8691c082414b42a2bb172da8797e6e8ff66c9a39d2e452f7034e9" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.1
Normal file
5
plugins/python-build/share/python-build/2.4.1
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4.1" "https://www.python.org/ftp/python/2.4.1/Python-2.4.1.tgz#f449c3b167389324c525ad99d02376c518ac11e163dbbbc13bc88a5c7101fd00" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.2
Normal file
5
plugins/python-build/share/python-build/2.4.2
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4.2" "https://www.python.org/ftp/python/2.4.2/Python-2.4.2.tgz#2653e1846e87fd9b3ee287fefc965c80c54646548b4913a22265b0dd54493adf" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.3
Normal file
5
plugins/python-build/share/python-build/2.4.3
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4.3" "https://www.python.org/ftp/python/2.4.3/Python-2.4.3.tgz#985a413932f5e31e6280b37da6b285a3a0b2748c6786643989ed9b23de97e2d5" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.4
Normal file
5
plugins/python-build/share/python-build/2.4.4
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4.4" "https://www.python.org/ftp/python/2.4.4/Python-2.4.4.tgz#92be6e20cbc3111d9dd0c016d72ef7914c23b879dc52df7ba28df97afbf12e2e" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.5
Normal file
5
plugins/python-build/share/python-build/2.4.5
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4.5" "https://www.python.org/ftp/python/2.4.5/Python-2.4.5.tgz#6ae6f67a388a7f70ed3a20eebab5aae995ee433089d1f1724095c62f4b7389a1" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
5
plugins/python-build/share/python-build/2.4.6
Normal file
5
plugins/python-build/share/python-build/2.4.6
Normal file
@@ -0,0 +1,5 @@
|
||||
require_gcc
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.4.6" "https://www.python.org/ftp/python/2.4.6/Python-2.4.6.tgz#b03f269e826927f05c966cf4f4414f3c93ee2314960859e7f8375e24e82f8b02" standard verify_py24
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.1" "https://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz#993804bb947d18508acee02141281c77d27677f8c14eaa64d6287a1c53ef01c8" python
|
||||
4
plugins/python-build/share/python-build/2.5.0
Normal file
4
plugins/python-build/share/python-build/2.5.0
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5" "https://www.python.org/ftp/python/2.5/Python-2.5.tgz#d7bbf42e36003c6065cd19f3e67d283521858515ee923220f654131cebe1d8f2" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
4
plugins/python-build/share/python-build/2.5.1
Normal file
4
plugins/python-build/share/python-build/2.5.1
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5.1" "https://www.python.org/ftp/python/2.5.1/Python-2.5.1.tgz#1f5caee846049ca30d996f9403eefdb996295c4af664867e35dcc5eb36e4e7e8" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
4
plugins/python-build/share/python-build/2.5.2
Normal file
4
plugins/python-build/share/python-build/2.5.2
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5.2" "https://www.python.org/ftp/python/2.5.2/Python-2.5.2.tgz#834afe8a88adaf623b05ac5dd6700dd5bb5d0d5553fc74ad529359a3496e4ae3" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
4
plugins/python-build/share/python-build/2.5.3
Normal file
4
plugins/python-build/share/python-build/2.5.3
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5.3" "https://www.python.org/ftp/python/2.5.3/Python-2.5.3.tgz#c3fee607d20a77dfb72ea2e627eb4d95d25c735603435abde62c57015a0445bd" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
4
plugins/python-build/share/python-build/2.5.4
Normal file
4
plugins/python-build/share/python-build/2.5.4
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5.4" "https://www.python.org/ftp/python/2.5.4/Python-2.5.4.tgz#3d3b205611ee503a38a9433d5645a571668420bb219242c7f51af85f05664da6" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
4
plugins/python-build/share/python-build/2.5.5
Normal file
4
plugins/python-build/share/python-build/2.5.5
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5.5" "https://www.python.org/ftp/python/2.5.5/Python-2.5.5.tgz#03be1019c4fe93daeb53ba9e4294bf22a8ed4cb854cbd57e24e16f6bf63e2392" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
4
plugins/python-build/share/python-build/2.5.6
Normal file
4
plugins/python-build/share/python-build/2.5.6
Normal file
@@ -0,0 +1,4 @@
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.5.6" "https://www.python.org/ftp/python/2.5.6/Python-2.5.6.tgz#c2e4377597241b1065677d23327c04d0f41945d370c61a491cc88be367234c5d" standard verify_py25
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
3
plugins/python-build/share/python-build/2.6.0
Normal file
3
plugins/python-build/share/python-build/2.6.0
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6" "https://www.python.org/ftp/python/2.6/Python-2.6.tgz#7c2f21a968a737a59ed0729f4b1dc154dc3aa183c20be96055186fe43c6742d0" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.1
Normal file
3
plugins/python-build/share/python-build/2.6.1
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.1" "https://www.python.org/ftp/python/2.6.1/Python-2.6.1.tgz#fb65e93678e1327e3e8559cc56e1e00ed8c07162b21287a3502677892c5c515c" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.2
Normal file
3
plugins/python-build/share/python-build/2.6.2
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.2" "https://www.python.org/ftp/python/2.6.2/Python-2.6.2.tgz#e37ecdf249f248f4fea227adbca09c778670b64fcb5e45947ec3e093cbc12c86" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.3
Normal file
3
plugins/python-build/share/python-build/2.6.3
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.3" "https://www.python.org/ftp/python/2.6.3/Python-2.6.3.tgz#a71b55540690425fd82ab00819aeb92c1b23cbb4730a0ccd2e25c833b22a812e" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.4
Normal file
3
plugins/python-build/share/python-build/2.6.4
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.4" "https://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz#1a25a47506e4165704cfe2b07c0a064b0b5762a2d18b8fbdad5af688aeacd252" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.5
Normal file
3
plugins/python-build/share/python-build/2.6.5
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.5" "https://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz#b331dafdce3361834fee783795d4f68ae7cf7d379e9137c2d8e8531cea615ede" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.6
Normal file
3
plugins/python-build/share/python-build/2.6.6
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.6" "https://www.python.org/ftp/python/2.6.6/Python-2.6.6.tgz#372f66db46d773214e4619df1794a26449158f626138d4d2141a64c2f017fae1" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.7
Normal file
3
plugins/python-build/share/python-build/2.6.7
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.7" "https://www.python.org/ftp/python/2.6.7/Python-2.6.7.tgz#a8093eace4cfd3e06b05f0deb5d765e3c6cec65908048640a8cadd7a948b3826" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.8
Normal file
3
plugins/python-build/share/python-build/2.6.8
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.8" "https://www.python.org/ftp/python/2.6.8/Python-2.6.8.tgz#5bf02a75ffa2fcaa5a3cabb8201998519b045541975622316888ea468d9512f7" standard verify_py26 ensurepip
|
||||
3
plugins/python-build/share/python-build/2.6.9
Normal file
3
plugins/python-build/share/python-build/2.6.9
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.6.9" "https://www.python.org/ftp/python/2.6.9/Python-2.6.9.tgz#7277b1285d8a82f374ef6ebaac85b003266f7939b3f2a24a3af52f9523ac94db" standard verify_py26 ensurepip
|
||||
4
plugins/python-build/share/python-build/2.7-dev
Normal file
4
plugins/python-build/share/python-build/2.7-dev
Normal file
@@ -0,0 +1,4 @@
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_git "Python-2.7-dev" "https://github.com/python/cpython" "2.7" standard verify_py27 copy_python_gdb ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.0
Normal file
3
plugins/python-build/share/python-build/2.7.0
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7" "https://www.python.org/ftp/python/2.7/Python-2.7.tgz#5670dd6c0c93b0b529781d070852f7b51ce6855615b16afcd318341af2910fb5" standard verify_py27 copy_python_gdb ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.1
Normal file
3
plugins/python-build/share/python-build/2.7.1
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7.1" "https://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz#ca13e7b1860821494f70de017202283ad73b1fb7bd88586401c54ef958226ec8" standard verify_py27 copy_python_gdb ensurepip
|
||||
7
plugins/python-build/share/python-build/2.7.10
Normal file
7
plugins/python-build/share/python-build/2.7.10
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.10" "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tar.xz#1cd3730781b91caf0fa1c4d472dc29274186480161a150294c42ce9b5c5effc0" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.10" "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz#eda8ce6eec03e74991abb5384170e7c65fcd7522e409b8e83d7e6372add0f12a" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.11
Normal file
7
plugins/python-build/share/python-build/2.7.11
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.11" "https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tar.xz#962b4c45af50124ea61f11a30deb4342fc0bc21126790fa1d7f6c79809413f46" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.11" "https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz#82929b96fd6afc8da838b149107078c02fa1744b7e60999a8babbc0d3fa86fc6" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.12
Normal file
7
plugins/python-build/share/python-build/2.7.12
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.12" "https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz#d7837121dd5652a05fef807c361909d255d173280c4e1a4ded94d73d80a1f978" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.12" "https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz#3cb522d17463dfa69a155ab18cffa399b358c966c0363d6c8b5b3bf1384da4b6" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.13
Normal file
7
plugins/python-build/share/python-build/2.7.13
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.13" "https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz#35d543986882f78261f97787fd3e06274bfa6df29fac9b4a94f73930ff98f731" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.13" "https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz#a4f05a0720ce0fd92626f0278b6b433eee9a6173ddf2bced7957dfb599a5ece1" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
8
plugins/python-build/share/python-build/2.7.14
Normal file
8
plugins/python-build/share/python-build/2.7.14
Normal file
@@ -0,0 +1,8 @@
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.14" "https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz#71ffb26e09e78650e424929b2b457b9c912ac216576e6bd9e7d204ed03296a66" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.14" "https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz#304c9b202ea6fbd0a4a8e0ad3733715fbd4749f2204a9173a58ec53c32ea73e8" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
8
plugins/python-build/share/python-build/2.7.15
Normal file
8
plugins/python-build/share/python-build/2.7.15
Normal file
@@ -0,0 +1,8 @@
|
||||
prefer_openssl11
|
||||
install_package "openssl-1.1.0j" "https://www.openssl.org/source/old/1.1.0/openssl-1.1.0j.tar.gz#31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.15" "https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tar.xz#22d9b1ac5b26135ad2b8c2901a9413537e08749a753356ee913c84dbd2df5574" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.15" "https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz#18617d1f15a380a919d517630a9cd85ce17ea602f9bbdc58ddc672df4b0239db" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.16
Normal file
7
plugins/python-build/share/python-build/2.7.16
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2q" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2q.tar.gz#5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.16" "https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz#f222ef602647eecb6853681156d32de4450a2c39f4de93bd5b20235f2e660ed7" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.16" "https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tgz#01da813a3600876f03f46db11cc5c408175e99f03af2ba942ef324389a83bad5" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.17
Normal file
7
plugins/python-build/share/python-build/2.7.17
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2q" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2q.tar.gz#5744cfcbcec2b1b48629f7354203bc1e5e9b5466998bbccc5b5fcde3b18eb684" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.17" "https://www.python.org/ftp/python/2.7.17/Python-2.7.17.tar.xz#4d43f033cdbd0aa7b7023c81b0e986fd11e653b5248dac9144d508f11812ba41" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.17" "https://www.python.org/ftp/python/2.7.17/Python-2.7.17.tgz#f22059d09cdf9625e0a7284d24a13062044f5bf59d93a7f3382190dfa94cecde" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
8
plugins/python-build/share/python-build/2.7.18
Normal file
8
plugins/python-build/share/python-build/2.7.18
Normal file
@@ -0,0 +1,8 @@
|
||||
export PYTHON_BUILD_HOMEBREW_OPENSSL_FORMULA="openssl@1.1 openssl@1.0 openssl"
|
||||
install_package "openssl-1.1.1v" "https://www.openssl.org/source/openssl-1.1.1v.tar.gz" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.18" "https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz#b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43" standard verify_py27 copy_python_gdb ensurepip_lt21
|
||||
else
|
||||
install_package "Python-2.7.18" "https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz#da3080e3b488f648a3d7a4560ddee895284c3380b11d6de75edb986526b9a814" standard verify_py27 copy_python_gdb ensurepip_lt21
|
||||
fi
|
||||
3
plugins/python-build/share/python-build/2.7.2
Normal file
3
plugins/python-build/share/python-build/2.7.2
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7.2" "https://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz#1d54b7096c17902c3f40ffce7e5b84e0072d0144024184fff184a84d563abbb3" standard verify_py27 copy_python_gdb ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.3
Normal file
3
plugins/python-build/share/python-build/2.7.3
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7.3" "https://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz#d4c20f2b5faf95999fd5fecb3f7d32071b0820516224a6d2b72932ab47a1cb8e" standard verify_py27 copy_python_gdb ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.4
Normal file
3
plugins/python-build/share/python-build/2.7.4
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7.4" "https://www.python.org/ftp/python/2.7.4/Python-2.7.4.tgz#98c5eb9c8e65effcc0122112ba17a0bce880aa23ecb560af56b55eb55632b81a" standard verify_py27 copy_python_gdb ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.5
Normal file
3
plugins/python-build/share/python-build/2.7.5
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7.5" "https://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz#8e1b5fa87b91835afb376a9c0d319d41feca07ffebc0288d97ab08d64f48afbf" standard verify_py27 copy_python_gdb ensurepip
|
||||
3
plugins/python-build/share/python-build/2.7.6
Normal file
3
plugins/python-build/share/python-build/2.7.6
Normal file
@@ -0,0 +1,3 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-2.7.6" "https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz#99c6860b70977befa1590029fae092ddb18db1d69ae67e8b9385b66ed104ba58" standard verify_py27 copy_python_gdb ensurepip
|
||||
7
plugins/python-build/share/python-build/2.7.7
Normal file
7
plugins/python-build/share/python-build/2.7.7
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.7" "https://www.python.org/ftp/python/2.7.7/Python-2.7.7.tar.xz#2983e3cd089b30c50e2b2234f07c2ac4fb8a5df230ab8f2e1133a1d8b208da78" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.7" "https://www.python.org/ftp/python/2.7.7/Python-2.7.7.tgz#7f49c0a6705ad89d925181e27d0aaa025ee4731ce0de64776c722216c3e66c42" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.8
Normal file
7
plugins/python-build/share/python-build/2.7.8
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.8" "https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz#edde10a0cb7d14e2735e682882d5b287028d1485c456758154c19573db68075a" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.8" "https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz#74d70b914da4487aa1d97222b29e9554d042f825f26cb2b93abd20fdda56b557" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
7
plugins/python-build/share/python-build/2.7.9
Normal file
7
plugins/python-build/share/python-build/2.7.9
Normal file
@@ -0,0 +1,7 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-2.7.9" "https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz#90d27e14ea7e03570026850e2e50ba71ad20b7eb31035aada1cf3def8f8d4916" standard verify_py27 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-2.7.9" "https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz#c8bba33e66ac3201dabdc556f0ea7cfe6ac11946ec32d357c4c6f9b018c12c5b" standard verify_py27 copy_python_gdb ensurepip
|
||||
fi
|
||||
14
plugins/python-build/share/python-build/3.0.1
Normal file
14
plugins/python-build/share/python-build/3.0.1
Normal file
@@ -0,0 +1,14 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.0.1" "https://www.python.org/ftp/python/3.0.1/Python-3.0.1.tgz#7d5f2feae9035f1d3d9e6bb7f092dbf374d6bb4b25abd0d2d11f13bba1cb04de" standard verify_py30
|
||||
if [[ "Darwin" == "$(uname -s)" ]]; then
|
||||
# https://github.com/pyenv/pyenv/issues/456
|
||||
{ echo
|
||||
colorize 1 "WARNING"
|
||||
echo ": pyenv cannot install setuptools-1.4.2 to CPython 3.0.1 on OS X."
|
||||
echo "setuptools and pip will not be available until you install them manually."
|
||||
} >&2
|
||||
else
|
||||
install_package "setuptools-1.4.2" "https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz#263986a60a83aba790a5bffc7d009ac88114ba4e908e5c90e453b3bf2155dbbd" python
|
||||
install_package "pip-1.3.1" "https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz#145eaa5d1ea1b062663da1f3a97780d7edea4c63c68a37c463b1deedf7bb4957" python
|
||||
fi
|
||||
5
plugins/python-build/share/python-build/3.1.0
Normal file
5
plugins/python-build/share/python-build/3.1.0
Normal file
@@ -0,0 +1,5 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.1" "https://www.python.org/ftp/python/3.1/Python-3.1.tgz#99a034cf574ea3c26412b0a0728126d7fd6ea9593d099d807a25d216ed031e6a" standard verify_py31
|
||||
install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python
|
||||
install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python
|
||||
5
plugins/python-build/share/python-build/3.1.1
Normal file
5
plugins/python-build/share/python-build/3.1.1
Normal file
@@ -0,0 +1,5 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.1.1" "https://www.python.org/ftp/python/3.1.1/Python-3.1.1.tgz#5d85d7bff11c4db44920af99f64f4227c816f897f6bfa9dd8a2611165ca5f0a1" standard verify_py31
|
||||
install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python
|
||||
install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python
|
||||
5
plugins/python-build/share/python-build/3.1.2
Normal file
5
plugins/python-build/share/python-build/3.1.2
Normal file
@@ -0,0 +1,5 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.1.2" "https://www.python.org/ftp/python/3.1.2/Python-3.1.2.tgz#dffbc0561a161a4a576c6059e6990a9859a0be16ba9b5736eabe4abbb2700d1c" standard verify_py31
|
||||
install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python
|
||||
install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python
|
||||
5
plugins/python-build/share/python-build/3.1.3
Normal file
5
plugins/python-build/share/python-build/3.1.3
Normal file
@@ -0,0 +1,5 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.1.3" "https://www.python.org/ftp/python/3.1.3/Python-3.1.3.tgz#6311823aeda8be6a7a2b67caaeff48abce6626c9940ba7ed81f9c978666a36bd" standard verify_py31
|
||||
install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python
|
||||
install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python
|
||||
5
plugins/python-build/share/python-build/3.1.4
Normal file
5
plugins/python-build/share/python-build/3.1.4
Normal file
@@ -0,0 +1,5 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.1.4" "https://www.python.org/ftp/python/3.1.4/Python-3.1.4.tgz#fadc05ea6d05360cff189944a85ecd2180bbc308784d168b350450e70bbdd846" standard verify_py31
|
||||
install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python
|
||||
install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python
|
||||
5
plugins/python-build/share/python-build/3.1.5
Normal file
5
plugins/python-build/share/python-build/3.1.5
Normal file
@@ -0,0 +1,5 @@
|
||||
install_package "openssl-1.0.2k" "https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz#6b3977c61f2aedf0f96367dcfb5c6e578cf37e7b8d913b4ecb6643c3cb88d8c0" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_package "Python-3.1.5" "https://www.python.org/ftp/python/3.1.5/Python-3.1.5.tgz#d12dae6d06f52ef6bf1271db4d5b4d14b5dd39813e324314e72b648ef1bc0103" standard verify_py31
|
||||
install_package "setuptools-17.1.1" "https://pypi.python.org/packages/source/s/setuptools/setuptools-17.1.1.tar.gz#5bf42dbf406fd58a41029f53cffff1c90db5de1c5e0e560b5545cf2ec949c431" python
|
||||
install_package "pip-1.5.6" "https://pypi.python.org/packages/source/p/pip/pip-1.5.6.tar.gz#b1a4ae66baf21b7eb05a5e4f37c50c2706fa28ea1f8780ce8efe14dcd9f1726c" python
|
||||
5
plugins/python-build/share/python-build/3.10-dev
Normal file
5
plugins/python-build/share/python-build/3.10-dev
Normal file
@@ -0,0 +1,5 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_git "Python-3.10-dev" "https://github.com/python/cpython" 3.10 standard verify_py310 copy_python_gdb ensurepip
|
||||
9
plugins/python-build/share/python-build/3.10.0
Normal file
9
plugins/python-build/share/python-build/3.10.0
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.0" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tar.xz#5a99f8e7a6a11a7b98b4e75e0d1303d3832cada5534068f69c7b6222a7b1b002" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.0" "https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz#c4e0cbad57c90690cb813fb4663ef670b4d0f587d8171e2c42bd4c9245bd2758" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.1
Normal file
9
plugins/python-build/share/python-build/3.10.1
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.1" "https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tar.xz#a7f1265b6e1a5de1ec5c3ec7019ab53413469934758311e9d240c46e5ae6e177" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.1" "https://www.python.org/ftp/python/3.10.1/Python-3.10.1.tgz#b76117670e7c5064344b9c138e141a377e686b9063f3a8a620ff674fa8ec90d3" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.10
Normal file
9
plugins/python-build/share/python-build/3.10.10
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.10" "https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tar.xz#0419e9085bf51b7a672009b3f50dbf1859acdf18ba725d0ec19aa5c8503f0ea3" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.10" "https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz#fba64559dde21ebdc953e4565e731573bb61159de8e4d4cedee70fb1196f610d" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.11
Normal file
9
plugins/python-build/share/python-build/3.10.11
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tar.xz#3c3bc3048303721c904a03eb8326b631e921f11cc3be2988456a42f115daf04c" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.11" "https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz#f3db31b668efa983508bd67b5712898aa4247899a346f2eb745734699ccd3859" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.12
Normal file
9
plugins/python-build/share/python-build/3.10.12
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.12" "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz#afb74bf19130e7a47d10312c8f5e784f24e0527981eab68e20546cfb865830b8" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.12" "https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz#a43cd383f3999a6f4a7db2062b2fc9594fefa73e175b3aedafa295a51a7bb65c" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.13
Normal file
9
plugins/python-build/share/python-build/3.10.13
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.13" "https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tar.xz#5c88848668640d3e152b35b4536ef1c23b2ca4bd2c957ef1ecbb053f571dd3f6" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.13" "https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz#698ec55234c1363bd813b460ed53b0f108877c7a133d48bde9a50a1eb57b7e65" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.14
Normal file
9
plugins/python-build/share/python-build/3.10.14
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.14" "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz#9c50481faa8c2832329ba0fc8868d0a606a680fc4f60ec48d26ce8e076751fda" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.14" "https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz#cefea32d3be89c02436711c95a45c7f8e880105514b78680c14fe76f5709a0f6" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.15
Normal file
9
plugins/python-build/share/python-build/3.10.15
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.15" "https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tar.xz#aab0950817735172601879872d937c1e4928a57c409ae02369ec3d91dccebe79" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.15" "https://www.python.org/ftp/python/3.10.15/Python-3.10.15.tgz#a27864e5ba2a4474f8f6c58ab92ff52767ac8b66f1646923355a53fe3ef15074" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.16
Normal file
9
plugins/python-build/share/python-build/3.10.16
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.16" "https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tar.xz#bfb249609990220491a1b92850a07135ed0831e41738cf681d63cf01b2a8fbd1" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.16" "https://www.python.org/ftp/python/3.10.16/Python-3.10.16.tgz#f2e22ed965a93cfeb642378ed6e6cdbc127682664b24123679f3d013fafe9cd0" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.17
Normal file
9
plugins/python-build/share/python-build/3.10.17
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-3.2.4" "https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz#b23ad7fd9f73e43ad1767e636040e88ba7c9e5775bfa5618436a0dd2c17c3716" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.17" "https://www.python.org/ftp/python/3.10.17/Python-3.10.17.tar.xz#4c68050f049d1b4ac5aadd0df5f27941c0350d2a9e7ab0907ee5eb5225d9d6b0" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.17" "https://www.python.org/ftp/python/3.10.17/Python-3.10.17.tgz#8fcda0fbdc131859a4a4223abb925fd522a77e3fb3b52c46cea5f3bc2ae0cd9f" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.18
Normal file
9
plugins/python-build/share/python-build/3.10.18
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-3.2.4" "https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz#b23ad7fd9f73e43ad1767e636040e88ba7c9e5775bfa5618436a0dd2c17c3716" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.18" "https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tar.xz#ae665bc678abd9ab6a6e1573d2481625a53719bc517e9a634ed2b9fefae3817f" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.18" "https://www.python.org/ftp/python/3.10.18/Python-3.10.18.tgz#1b19ab802518eb36a851f5ddef571862c7a31ece533109a99df6d5af0a1ceb99" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.19
Normal file
9
plugins/python-build/share/python-build/3.10.19
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-3.2.4" "https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz#b23ad7fd9f73e43ad1767e636040e88ba7c9e5775bfa5618436a0dd2c17c3716" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.19" "https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tar.xz#c8f4a596572201d81dd7df91f70e177e19a70f1d489968b54b5fbbf29a97c076" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.19" "https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tgz#a078fb2d7a216071ebbe2e34b5f5355dd6b6e9b0cd1bacc4a41c63990c5a0eec" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.2
Normal file
9
plugins/python-build/share/python-build/3.10.2
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.2" "https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tar.xz#17de3ac7da9f2519aa9d64378c603a73a0e9ad58dffa8812e45160c086de64c7" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.2" "https://www.python.org/ftp/python/3.10.2/Python-3.10.2.tgz#3c0ede893011319f9b0a56b44953a3d52c7abf9657c23fb4bc9ced93b86e9c97" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.20
Normal file
9
plugins/python-build/share/python-build/3.10.20
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-3.6.1" "https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.20" "https://www.python.org/ftp/python/3.10.20/Python-3.10.20.tar.xz#de6517421601e39a9a3bc3e1bc4c7b2f239297423ee05e282598c83ec0647505" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.20" "https://www.python.org/ftp/python/3.10.20/Python-3.10.20.tgz#4ff5fd4c5bab803b935019f3e31d7219cebd6f870d00389cea53b88bbe935d1a" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.3
Normal file
9
plugins/python-build/share/python-build/3.10.3
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.3" "https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tar.xz#596c72de998dc39205bc4f70ef0dbf7edec740a306d09b49a9bd0a77806730dc" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.3" "https://www.python.org/ftp/python/3.10.3/Python-3.10.3.tgz#5a3b029bad70ba2a019ebff08a65060a8b9b542ffc1a83c697f1449ecca9813b" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.4
Normal file
9
plugins/python-build/share/python-build/3.10.4
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1n" "https://www.openssl.org/source/openssl-1.1.1n.tar.gz#40dceb51a4f6a5275bde0e6bf20ef4b91bfc32ed57c0552e2e8e15463372b17a" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.4" "https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tar.xz#80bf925f571da436b35210886cf79f6eb5fa5d6c571316b73568343451f77a19" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.4" "https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz#f3bcc65b1d5f1dc78675c746c98fcee823c038168fc629c5935b044d0911ad28" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.5
Normal file
9
plugins/python-build/share/python-build/3.10.5
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.5" "https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tar.xz#8437efd5b106ef0a75aabfbf23d880625120a73a86a22ade4d2e2e68d7b74486" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.5" "https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz#18f57182a2de3b0be76dfc39fdcfd28156bb6dd23e5f08696f7492e9e3d0bf2d" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.6
Normal file
9
plugins/python-build/share/python-build/3.10.6
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.6" "https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz#f795ff87d11d4b0c7c33bc8851b0c28648d8a4583aa2100a98c22b4326b6d3f3" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.6" "https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz#848cb06a5caa85da5c45bd7a9221bb821e33fc2bdcba088c127c58fad44e6343" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.7
Normal file
9
plugins/python-build/share/python-build/3.10.7
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.7" "https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tar.xz#6eed8415b7516fb2f260906db5d48dd4c06acc0cb24a7d6cc15296a604dcdc48" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.7" "https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tgz#1b2e4e2df697c52d36731666979e648beeda5941d0f95740aafbf4163e5cc126" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.8
Normal file
9
plugins/python-build/share/python-build/3.10.8
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.8" "https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz#6a30ecde59c47048013eb5a658c9b5dec277203d2793667f578df7671f7f03f3" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.8" "https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tgz#f400c3fb394b8bef1292f6dc1292c5fadc3533039a5bc0c3e885f3e16738029a" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
9
plugins/python-build/share/python-build/3.10.9
Normal file
9
plugins/python-build/share/python-build/3.10.9
Normal file
@@ -0,0 +1,9 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
install_package "openssl-1.1.1o" "https://www.openssl.org/source/openssl-1.1.1o.tar.gz#9384a2b0570dd80358841464677115df785edb941c71211f75076d72fe6b438f" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.1" "https://ftpmirror.gnu.org/readline/readline-8.1.tar.gz#f8ceb4ee131e3232226a17f51b164afc46cd0b9e6cef344be87c65962cb82b02" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.10.9" "https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz#5ae03e308260164baba39921fdb4dbf8e6d03d8235a939d4582b33f0b5e46a83" standard verify_py310 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.10.9" "https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tgz#4ccd7e46c8898f4c7862910a1703aa0e63525913a519abb2f55e26220a914d88" standard verify_py310 copy_python_gdb ensurepip
|
||||
fi
|
||||
6
plugins/python-build/share/python-build/3.11-dev
Normal file
6
plugins/python-build/share/python-build/3.11-dev
Normal file
@@ -0,0 +1,6 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-1.1.1k" "https://www.openssl.org/source/openssl-1.1.1k.tar.gz#892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.0" "https://ftpmirror.gnu.org/readline/readline-8.0.tar.gz#e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" mac_readline --if has_broken_mac_readline
|
||||
install_git "Python-3.11-dev" "https://github.com/python/cpython" 3.11 standard verify_py311 copy_python_gdb ensurepip
|
||||
10
plugins/python-build/share/python-build/3.11.0
Normal file
10
plugins/python-build/share/python-build/3.11.0
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-1.1.1q" "https://www.openssl.org/source/openssl-1.1.1q.tar.gz#d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.0" "https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tar.xz#a57dc82d77358617ba65b9841cee1e3b441f386c3789ddc0676eca077f2951c3" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.0" "https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz#64424e96e2457abbac899b90f9530985b51eef2905951febd935f0e73414caeb" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.1
Normal file
10
plugins/python-build/share/python-build/3.11.1
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.1" "https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz#85879192f2cffd56cb16c092905949ebf3e5e394b7f764723529637901dfb58f" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.1" "https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tgz#baed518e26b337d4d8105679caf68c5c32630d702614fc174e98cb95c46bdfa4" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.10
Normal file
10
plugins/python-build/share/python-build/3.11.10
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.2.2" "https://openssl.org/source/old/3.2/openssl-3.2.2.tar.gz#197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.10" "https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tar.xz#07a4356e912900e61a15cb0949a06c4a05012e213ecd6b4e84d0f67aabbee372" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.10" "https://www.python.org/ftp/python/3.11.10/Python-3.11.10.tgz#92f2faf242681bfa406d53a51e17d42c5373affe23a130cd9697e132ef574706" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.11
Normal file
10
plugins/python-build/share/python-build/3.11.11
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.2.2" "https://openssl.org/source/old/3.2/openssl-3.2.2.tar.gz#197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.11" "https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tar.xz#2a9920c7a0cd236de33644ed980a13cbbc21058bfdc528febb6081575ed73be3" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.11" "https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tgz#883bddee3c92fcb91cf9c09c5343196953cbb9ced826213545849693970868ed" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.12
Normal file
10
plugins/python-build/share/python-build/3.11.12
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.2.4" "https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz#b23ad7fd9f73e43ad1767e636040e88ba7c9e5775bfa5618436a0dd2c17c3716" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.12" "https://www.python.org/ftp/python/3.11.12/Python-3.11.12.tar.xz#849da87af4df137710c1796e276a955f7a85c9f971081067c8f565d15c352a09" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.12" "https://www.python.org/ftp/python/3.11.12/Python-3.11.12.tgz#379c9929a989a9d65a1f5d854e011f4872b142259f4fc0a8c4062d2815ed7fba" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.13
Normal file
10
plugins/python-build/share/python-build/3.11.13
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.2.4" "https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz#b23ad7fd9f73e43ad1767e636040e88ba7c9e5775bfa5618436a0dd2c17c3716" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.13" "https://www.python.org/ftp/python/3.11.13/Python-3.11.13.tar.xz#8fb5f9fbc7609fa822cb31549884575db7fd9657cbffb89510b5d7975963a83a" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.13" "https://www.python.org/ftp/python/3.11.13/Python-3.11.13.tgz#0f1a22f4dfd34595a29cf69ee7ea73b9eff8b1cc89d7ab29b3ab0ec04179dad8" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.14
Normal file
10
plugins/python-build/share/python-build/3.11.14
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.2.4" "https://github.com/openssl/openssl/releases/download/openssl-3.2.4/openssl-3.2.4.tar.gz#b23ad7fd9f73e43ad1767e636040e88ba7c9e5775bfa5618436a0dd2c17c3716" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.14" "https://www.python.org/ftp/python/3.11.14/Python-3.11.14.tar.xz#8d3ed8ec5c88c1c95f5e558612a725450d2452813ddad5e58fdb1a53b1209b78" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.14" "https://www.python.org/ftp/python/3.11.14/Python-3.11.14.tgz#563d2a1b2a5ba5d5409b5ecd05a0e1bf9b028cf3e6a6f0c87a5dc8dc3f2d9182" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.15
Normal file
10
plugins/python-build/share/python-build/3.11.15
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-3.6.1" "https://github.com/openssl/openssl/releases/download/openssl-3.6.1/openssl-3.6.1.tar.gz#b1bfedcd5b289ff22aee87c9d600f515767ebf45f77168cb6d64f231f518a82e" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.3" "https://ftpmirror.gnu.org/readline/readline-8.3.tar.gz#fe5383204467828cd495ee8d1d3c037a7eba1389c22bc6a041f627976f9061cc" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.15" "https://www.python.org/ftp/python/3.11.15/Python-3.11.15.tar.xz#272179ddd9a2e41a0fc8e42e33dfbdca0b3711aa5abf372d3f2d51543d09b625" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.15" "https://www.python.org/ftp/python/3.11.15/Python-3.11.15.tgz#f4de1b10bd6c70cbb9fa1cd71fc5038b832747a74ee59d599c69ce4846defb50" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.2
Normal file
10
plugins/python-build/share/python-build/3.11.2
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.2" "https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tar.xz#29e4b8f5f1658542a8c13e2dd277358c9c48f2b2f7318652ef1675e402b9d2af" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.2" "https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tgz#2411c74bda5bbcfcddaf4531f66d1adc73f247f529aee981b029513aefdbf849" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.3
Normal file
10
plugins/python-build/share/python-build/3.11.3
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz#8a5db99c961a7ecf27c75956189c9602c968751f11dbeae2b900dbff1c085b5e" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.3" "https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz#1a79f3df32265d9e6625f1a0b31c28eb1594df911403d11f3320ee1da1b3e048" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
10
plugins/python-build/share/python-build/3.11.4
Normal file
10
plugins/python-build/share/python-build/3.11.4
Normal file
@@ -0,0 +1,10 @@
|
||||
prefer_openssl3
|
||||
export PYTHON_BUILD_CONFIGURE_WITH_OPENSSL=1
|
||||
export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
|
||||
install_package "openssl-1.1.1s" "https://www.openssl.org/source/openssl-1.1.1s.tar.gz#c5ac01e760ee6ff0dab61d6b2bbd30146724d063eb322180c6f18a6f74e4b6aa" mac_openssl --if has_broken_mac_openssl
|
||||
install_package "readline-8.2" "https://ftpmirror.gnu.org/readline/readline-8.2.tar.gz#3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35" mac_readline --if has_broken_mac_readline
|
||||
if has_tar_xz_support; then
|
||||
install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz#2f0e409df2ab57aa9fc4cbddfb976af44e4e55bf6f619eee6bc5c2297264a7f6" standard verify_py311 copy_python_gdb ensurepip
|
||||
else
|
||||
install_package "Python-3.11.4" "https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz#85c37a265e5c9dd9f75b35f954e31fbfc10383162417285e30ad25cc073a0d63" standard verify_py311 copy_python_gdb ensurepip
|
||||
fi
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user