Compare commits

..

No commits in common. "master" and "v2.6.17" have entirely different histories.

127 changed files with 394 additions and 2686 deletions

View File

@ -1,45 +0,0 @@
name: Add versions
on:
workflow_dispatch: {}
schedule:
# Every N hours
- cron: '0 */8 * * *'
permissions:
contents: write
pull-requests: write
jobs:
add_cpython:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: 3
cache: 'pip'
cache-dependency-path: plugins/python-build/scripts/requirements.txt
- run: pip install -r plugins/python-build/scripts/requirements.txt
- name: check for a release
run: |
python plugins/python-build/scripts/add_cpython.py --verbose >added_versions.lst && rc=$? || rc=$?
echo "rc=$rc" >> $GITHUB_ENV
- name: set PR properties
shell: python
run: |
import os
import sys
versions=[l.rstrip() for l in open("added_versions.lst")]
with open(os.environ['GITHUB_ENV'],'a') as f:
f.write(f'branch_name=auto_add_version/{"_".join(versions)}\n')
f.write(f'pr_name=Add CPython {", ".join(versions)}\n')
os.remove("added_versions.lst")
- name: Create Pull Request
uses: peter-evans/create-pull-request@v8
if: env.rc == 0
with:
branch: ${{ env.branch_name }}
title: ${{ env.pr_name }}

View File

@ -10,14 +10,19 @@ jobs:
fail-fast: false
matrix:
python-version:
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
runs-on: macos-latest
steps:
- uses: actions/checkout@v6
# Normally, we would use the superbly maintained...
# - uses: actions/setup-python@v2
# with:
# python-version: ${{ matrix.python-version }}
# ... but in the repo, we want to test pyenv builds on macOS
- run: |
brew install openssl readline sqlite3 xz tcl-tk@8 libb2 zstd
# https://github.com/pyenv/pyenv#installation

View File

@ -6,7 +6,6 @@ jobs:
outputs:
versions: ${{steps.modified-versions.outputs.versions}}
versions_cpython_only: ${{steps.modified-versions.outputs.versions_cpython_only}}
versions_macos_build_exclude: ${{steps.modified-versions.outputs.versions_macos_build_exclude}}
steps:
- uses: actions/checkout@v6
- run: git fetch origin "$GITHUB_BASE_REF"
@ -27,47 +26,10 @@ jobs:
echo "versions_cpython_only<<$EOF" >> $GITHUB_ENV;
echo "$versions_cpython_only" >> $GITHUB_ENV;
echo "$EOF" >> $GITHUB_ENV;
- run: pip install packaging
- name: Build exclusions JSON
shell: python
run: |
import os
import json
import random
import re
import subprocess
import packaging.version
result=[]
for line in os.environ['versions'].splitlines():
if m:=re.match(r'([^-]+)-(\d+\.\d+)-(\d+\.\d+.\d+)', line):
name, version = m.group(1), packaging.version.Version(m.group(3))
# Miniconda dropped MacOS x64 support
if (name == 'miniconda3' and version >= packaging.version.Version('25.9.1')):
result.append({'os':'macos-15-intel','python-version':line})
if m:=re.match(r'([^-]+)-(\d+\.\d+)', line):
name, version = m.group(1), packaging.version.Version(m.group(2))
# Anaconda dropped MacOS x64 support
if name == 'anaconda3' and version >= packaging.version.Version('2025.12'):
result.append({'os':'macos-15-intel','python-version':line})
EOF = str(random.getrandbits(15*8))
with open(os.environ['GITHUB_ENV'],'w') as f:
f.write(f"versions_macos_build_exclude_json<<{EOF}\n")
json.dump(result, f)
f.write(f'\n{EOF}\n')
- id: modified-versions
run: |
echo "versions=`echo "${{ env.versions }}" | jq -R . | jq -sc .`" >> $GITHUB_OUTPUT
echo "versions_cpython_only=`echo "${{ env.versions_cpython_only }}" | jq -R . | jq -sc .`" >> $GITHUB_OUTPUT
echo 'versions_macos_build_exclude=${{ env.versions_macos_build_exclude_json }}' >> $GITHUB_OUTPUT
macos_build:
needs: discover_modified_scripts
if: needs.discover_modified_scripts.outputs.versions != '[""]'
@ -76,7 +38,6 @@ jobs:
matrix:
python-version: ${{fromJson(needs.discover_modified_scripts.outputs.versions)}}
os: ["macos-14", "macos-15", "macos-15-intel"]
exclude: ${{fromJson(needs.discover_modified_scripts.outputs.versions_macos_build_exclude)}}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
@ -129,7 +90,6 @@ jobs:
- run: |
pyenv global system
rm -f "$(pyenv root)"/shims/*
macos_build_bundled_dependencies:
needs: discover_modified_scripts
@ -161,22 +121,37 @@ jobs:
pyenv --debug install ${{ matrix.python-version }} && rc=$? || rc=$?
if [[ $rc -ne 0 ]]; then echo config.log:; cat $TMPDIR/python-build*/*/config.log; false; fi
pyenv global ${{ matrix.python-version }}
# Micropython doesn't support --version
- run: |
#print version
python --version
python -m pip --version
if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then
python -c 'import sys; print(sys.version)'
else
python --version
python -m pip --version
fi
# Micropython doesn't support sys.executable, os.path, older versions even os
- env:
EXPECTED_PYTHON: ${{ matrix.python-version }}
run: |
#check
python -c '
import os, sys, os.path
correct_dir = os.path.join(
os.environ["PYENV_ROOT"],
"versions",
os.environ["EXPECTED_PYTHON"],
"bin")
assert os.path.dirname(sys.executable) == correct_dir'
if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then
[[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1
python -c 'import sys; assert sys.implementation.name == "micropython"'
else
python -c 'if True:
import os, sys, os.path
correct_dir = os.path.join(
os.environ["PYENV_ROOT"],
"versions",
os.environ["EXPECTED_PYTHON"],
"bin")
assert os.path.dirname(sys.executable) == correct_dir'
fi
# bundled executables in some Anaconda releases cause the post-run step to hang in MacOS
- run: |
pyenv global system
rm -f "$(pyenv root)"/shims/*
ubuntu_build:
needs: discover_modified_scripts
@ -237,10 +212,6 @@ jobs:
"bin")
assert os.path.dirname(sys.executable) == correct_dir'
fi
# bundled executables in some Anaconda releases cause the post-run step to break
- run: |
pyenv global system
rm -f "$(pyenv root)"/shims/*
ubuntu_build_tar_gz:
needs: discover_modified_scripts
if: needs.discover_modified_scripts.outputs.versions_cpython_only != '[""]'
@ -274,19 +245,30 @@ jobs:
pyenv --debug install ${{ matrix.python-version }} && rc=$? || rc=$?
if [[ $rc -ne 0 ]]; then echo config.log:; cat $TMPDIR/python-build*/*/config.log; false; fi
pyenv global ${{ matrix.python-version }}
# Micropython doesn't support --version
- run: |
#print version
python --version
python -m pip --version
if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then
python -c 'import sys; print(sys.version)'
else
python --version
python -m pip --version
fi
# Micropython doesn't support sys.executable, os.path, older versions even os
- env:
EXPECTED_PYTHON: ${{ matrix.python-version }}
run: |
#check
python -c '
import os, sys, os.path
correct_dir = os.path.join(
os.environ["PYENV_ROOT"],
"versions",
os.environ["EXPECTED_PYTHON"],
"bin")
assert os.path.dirname(sys.executable) == correct_dir'
if [[ "${{ matrix.python-version }}" == "micropython-"* ]]; then
[[ $(pyenv which python) == "${{ env.PYENV_ROOT }}/versions/${{ matrix.python-version }}/bin/python" ]] || exit 1
python -c 'import sys; assert sys.implementation.name == "micropython"'
else
python -c 'if True:
import os, sys, os.path
correct_dir = os.path.join(
os.environ["PYENV_ROOT"],
"versions",
os.environ["EXPECTED_PYTHON"],
"bin")
assert os.path.dirname(sys.executable) == correct_dir'
fi

View File

@ -13,14 +13,26 @@ jobs:
- ubuntu-24.04
- ubuntu-22.04
- macos-15-intel
- macos-15
- macos-14
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
# Normally, we would use the superbly maintained...
# - uses: actions/setup-python@v2
# with:
# python-version: ${{ matrix.python-version }}
# ... but in the repo, we want to test pyenv builds on Ubuntu
# - run: |
# sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
# libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
# xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
# https://github.com/pyenv/pyenv#installation
- run: |
if test "$RUNNER_OS" == "macOS"; then
brew install coreutils fish
elif [[ $(lsb_release -sr | awk -F. '{print $1}') -ge 20 ]]; then
# Ubuntu 18 has fish 2 which lacks many features that facilitate testing
sudo apt install fish -yq
fi
- run: pwd
- env:

View File

@ -10,14 +10,19 @@ jobs:
fail-fast: false
matrix:
python-version:
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
# Normally, we would use the superbly maintained...
# - uses: actions/setup-python@v2
# with:
# python-version: ${{ matrix.python-version }}
# ... but in the repo, we want to test pyenv builds on Ubuntu
- run: |
sudo apt-get update -q; sudo apt install -yq make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \

View File

@ -1,24 +1,5 @@
# Version History
## Release v2.6.19
* Add CPython 3.15.0a4 by @nedbat in https://github.com/pyenv/pyenv/pull/3390
## Release v2.6.18
* Fix an infinite loop if a shim is symlinked to and called from a different location with "system" version active by @native-api in https://github.com/pyenv/pyenv/pull/3375
* CI: Update and cleanup workflow scripts by @native-api in https://github.com/pyenv/pyenv/pull/3372
* Add PowerShell support by @fblanchetNaN in https://github.com/pyenv/pyenv/pull/2749
* rehash: support older BSD `mktemp` by @native-api in https://github.com/pyenv/pyenv/pull/3376
* rehash: report final lock acquisition error while silencing provisional ones; init: don't silence automatic rehash by @native-api in https://github.com/pyenv/pyenv/pull/3377
* pyenv launcher: introduce and export _PYENV_INSTALL_PREFIX by @rockandska in https://github.com/pyenv/pyenv/pull/3334
* README: Document how to change Python version in a shell spawned from a Python-based program (e.g. Jupyter) by @native-api in https://github.com/pyenv/pyenv/pull/3380
* Recognize an argument to -j in MAKEFLAGS when building extensions in 3.10-3.11 and latest 3.5-3.9 by @native-api in https://github.com/pyenv/pyenv/pull/3379
* CI: add a script to autogenerate CPython build scripts by @native-api in https://github.com/pyenv/pyenv/pull/3358
* Add miniconda3-25.11.1-1 by @binbjz in https://github.com/pyenv/pyenv/pull/3382
* CI: exclude unsupported MacOS-x64 for recent Miniconda versions by @binbjz in https://github.com/pyenv/pyenv/pull/3385
* Auto-accept TOS for miniconda3-25+ by @native-api in https://github.com/pyenv/pyenv/pull/3386
* Add anaconda-2025.12-1 by @native-api in https://github.com/pyenv/pyenv/pull/3387
* CI: automatically check for CPython releases and generate PRs by @native-api in https://github.com/pyenv/pyenv/pull/3388
## Release v2.6.17
* Add miniforge 25.9.1-0, 25.11.0-1 by @13steinj in https://github.com/pyenv/pyenv/pull/3371
* miniconda3-latest: auto accept TOS by @native-api in https://github.com/pyenv/pyenv/pull/3373

View File

@ -67,7 +67,6 @@ This project was forked from [rbenv](https://github.com/rbenv/rbenv) and
* [Locating Pyenv-provided Python Installations](#locating-pyenv-provided-python-installations)
* [Advanced Configuration](#advanced-configuration)
* [Using Pyenv without shims](#using-pyenv-without-shims)
* [Running nested shells from Python-based programs](#running-nested-shells-from-python-based-programs)
* [Environment variables](#environment-variables)
* **[Development](#development)**
* [Contributing](#contributing)
@ -272,20 +271,6 @@ See [Advanced configuration](#advanced-configuration) for details and more confi
</details>
#### Microsoft PowerShell
<details>
Add the commands to `$profile.CurrentUserAllHosts` by running the following in your terminal:
~~~ pwsh
echo '$Env:PYENV_ROOT="$Env:HOME/.pyenv"' >> $profile.CurrentUserAllHosts
echo 'if (Test-Path -LP "$Env:PYENV_ROOT/bin" -PathType Container) {
$Env:PATH="$Env:PYENV_ROOT/bin:$Env:PATH" }' >> $profile.CurrentUserAllHosts
echo 'iex ((pyenv init -) -join "`n")' >> $profile.CurrentUserAllHosts
~~~
</details>
### C. Restart your shell
----
@ -704,7 +689,7 @@ opposed to this idea. Here's what `eval "$(pyenv init -)"` actually does:
3. **Installs autocompletion.** This is entirely optional but pretty
useful. Sourcing `<pyenv installation prefix>/completions/pyenv.bash` will set that
up. There are also completions for Zsh, Fish and PowerShell.
up. There are also completions for Zsh and Fish.
4. **Rehashes shims.** From time to time you'll need to rebuild your
shim files. Doing this on init makes sure everything is up to
@ -755,32 +740,6 @@ as currently configured.
`pyenv exec` works by prepending `$(pyenv root)/versions/<selected version>/bin`
to `PATH` in the `<command>`'s environment, the same as what e.g. RVM does.
### Running nested shells from Python-based programs
In addition to altering `PATH`, `pyenv exec` sets `PYENV_VERSION` in the
executed program's environment to ensure that it won't spontaneouly switch to
using a different Python version.
Some Python-based programs (e.g. Jupyter) can spawn nested shell sessions.
`pyenv version` in such a shell would dutily report that the current version was
set by an environment variable.
Depending on your use case, this version lock may be undesirable.
In this case, you need to change or unset the environment variable,
either directly or via `pyenv shell`.
To automate this, you can do so in your shell's interactive startup file,
detecting the nested shell session via some characteristic environment variable
that the spawning application sets.
E.g. in Jupyter's case (as of this writing), it's `JUPYTER_SERVER_ROOT`,
and the corresponding `~/.bashrc` line may look like this:
```bash
[[ -n $JUPYTER_SERVER_ROOT ]] && unset PYENV_VERSION
```
### Environment variables

View File

@ -1,17 +0,0 @@
$scriptblock = {
param($wordToComplete, $commandAst, $cursorPosition)
$words = $commandAst.ToString()
if ( $wordToComplete ) {
$matches = (($words[0..$cursorPosition] -join '') | Select-String -Pattern "\s+" -AllMatches).Matches
if ( $matches ) {
$cursorPosition = $matches[-1].Index - 1
}
}
$words = $words[0..$cursorPosition] -join '' -split "\s+"
if ( $words.Count -ge 2 ) {
pyenv completions $words[1] | where { $_ -match $wordToComplete }
} else {
pyenv commands | where { $_ -match $wordToComplete }
}
}
Register-ArgumentCompleter -Native -CommandName pyenv -ScriptBlock $scriptblock

View File

@ -76,27 +76,23 @@ export PYENV_DIR
shopt -s nullglob
_PYENV_INSTALL_PREFIX="$(abs_dirname "$0")"
_PYENV_INSTALL_PREFIX="${_PYENV_INSTALL_PREFIX%/*}"
export _PYENV_INSTALL_PREFIX
for plugin_bin in "${_PYENV_INSTALL_PREFIX}"/plugins/*/bin; do
bin_path="$(abs_dirname "$0")"
for plugin_bin in "${bin_path%/*}"/plugins/*/bin; do
PATH="${plugin_bin}:${PATH}"
done
# PYENV_ROOT can be set to anything, so it may happen to be equal to the base path above,
# resulting in duplicate PATH entries
if [ "${_PYENV_INSTALL_PREFIX}" != "$PYENV_ROOT" ]; then
if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then
for plugin_bin in "${PYENV_ROOT}"/plugins/*/bin; do
PATH="${plugin_bin}:${PATH}"
done
fi
export PATH="${_PYENV_INSTALL_PREFIX}/libexec:${PATH}"
export PATH="${bin_path}:${PATH}"
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${PYENV_ROOT}/pyenv.d"
if [ "${_PYENV_INSTALL_PREFIX}" != "$PYENV_ROOT" ]; then
if [ "${bin_path%/*}" != "$PYENV_ROOT" ]; then
# Add pyenv's own `pyenv.d` unless pyenv was cloned to PYENV_ROOT
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${_PYENV_INSTALL_PREFIX}/pyenv.d"
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:${bin_path%/*}/pyenv.d"
fi
PYENV_HOOK_PATH="${PYENV_HOOK_PATH}:/usr/etc/pyenv.d:/usr/local/etc/pyenv.d:/etc/pyenv.d:/usr/lib/pyenv/hooks"
for plugin_hook in "${PYENV_ROOT}/plugins/"*/etc/pyenv.d; do

View File

@ -12,7 +12,7 @@
set -e
[ -n "$PYENV_DEBUG" ] && set -x
version="2.6.19"
version="2.6.17"
git_revision=""
if cd "${BASH_SOURCE%/*}" 2>/dev/null && git remote -v 2>/dev/null | grep -q pyenv; then

View File

@ -29,17 +29,8 @@ if [ -z "$PYENV_COMMAND" ]; then
exit 1
fi
if [[ -n $_PYENV_SHIM_PATH ]]; then
PROGRAM="$(echo "$PYENV_COMMAND" | tr a-z- A-Z_ | sed 's/[^A-Z0-9_]/_/g')"
NR_PYENV_SHIM_PATHS_PROGRAM="_PYENV_SHIM_PATHS_${PROGRAM}"
export -- "$NR_PYENV_SHIM_PATHS_PROGRAM=$_PYENV_SHIM_PATH${!NR_PYENV_SHIM_PATHS_PROGRAM:+:${!NR_PYENV_SHIM_PATHS_PROGRAM}}"
unset PROGRAM NR_PYENV_SHIM_PATHS_PROGRAM
unset _PYENV_SHIM_PATH
fi
PYENV_COMMAND_PATH="$(pyenv-which "$PYENV_COMMAND")"
PYENV_BIN_PATH="${PYENV_COMMAND_PATH%/*}"
export PYENV_VERSION
OLDIFS="$IFS"

View File

@ -15,7 +15,6 @@ if [ "$1" = "--complete" ]; then
echo bash
echo fish
echo ksh
echo pwsh
echo zsh
exit
fi
@ -103,10 +102,6 @@ function detect_profile() {
profile_explain="~/.bash_profile if it exists, otherwise ~/.profile"
rc='~/.bashrc'
;;
pwsh )
profile='~/.config/powershell/profile.ps1'
rc='~/.config/powershell/profile.ps1'
;;
zsh )
profile='~/.zprofile'
rc='~/.zshrc'
@ -155,15 +150,6 @@ function help_() {
echo 'pyenv init - fish | source'
echo
;;
pwsh )
echo '# Load pyenv automatically by appending'
echo "# the following to $profile :"
echo
echo '$Env:PYENV_ROOT="$Env:HOME/.pyenv"'
echo 'if (Test-Path -LP "$Env:PYENV_ROOT/bin" -PathType Container) {'
echo ' $Env:PATH="$Env:PYENV_ROOT/bin:$Env:PATH" }'
echo 'iex ((pyenv init -) -join "`n")'
;;
* )
echo '# Load pyenv automatically by appending'
echo -n "# the following to "
@ -200,11 +186,6 @@ function print_path() {
print_path_prepend_shims
echo 'end'
;;
pwsh )
echo 'if ( $Env:PATH -notmatch "'"${PYENV_ROOT}/shims"'" ) {'
print_path_prepend_shims
echo '}'
;;
* )
echo 'if [[ ":$PATH:" != *'\':"${PYENV_ROOT}"/shims:\''* ]]; then'
print_path_prepend_shims
@ -218,10 +199,6 @@ function print_path() {
echo 'set -eg PATH[$pyenv_index]; end; set -e pyenv_index'
print_path_prepend_shims
;;
pwsh )
echo '$Env:PATH="$(($Env:PATH -split '"':'"' | where { -not ($_ -match '"'${PYENV_ROOT}/shims'"') }) -join '"':'"')"'
print_path_prepend_shims
;;
* )
# Some distros (notably Debian-based) set Bash's SSH_SOURCE_BASHRC compilation option
# that makes it source `bashrc` under SSH even when not interactive.
@ -246,9 +223,6 @@ function print_path_prepend_shims() {
fish )
echo 'set -gx PATH '\'"${PYENV_ROOT}/shims"\'' $PATH'
;;
pwsh )
echo '$Env:PATH="'"${PYENV_ROOT}"'/shims:$Env:PATH"'
;;
* )
echo 'export PATH="'"${PYENV_ROOT}"'/shims:${PATH}"'
;;
@ -260,9 +234,6 @@ function print_env() {
fish )
echo "set -gx PYENV_SHELL $shell"
;;
pwsh )
echo '$Env:PYENV_SHELL="'"$shell"'"'
;;
* )
echo "export PYENV_SHELL=$shell"
;;
@ -270,29 +241,15 @@ function print_env() {
}
function print_completion() {
completion="${_PYENV_INSTALL_PREFIX}/completions/pyenv.${shell}"
completion="${0%/*/*}/completions/pyenv.${shell}"
if [ -r "$completion" ]; then
case "$shell" in
pwsh )
echo "iex (gc $completion -Raw)"
;;
* )
echo "source '$completion'"
;;
esac
echo "source '$completion'"
fi
}
function print_rehash() {
if [ -z "$no_rehash" ]; then
case "$shell" in
pwsh )
echo '& pyenv rehash'
;;
* )
echo 'command pyenv rehash'
;;
esac
echo 'command pyenv rehash 2>/dev/null'
fi
}
@ -313,25 +270,6 @@ function print_shell_function() {
end
end'
;;
pwsh )
cat <<EOS
function pyenv {
\$command=""
if ( \$args.Count -gt 0 ) {
\$command, \$args = \$args
}
if ( ("${commands[*]}" -split ' ') -contains \$command ) {
\$shell_cmds = (& (get-command -commandtype application pyenv) sh-\$command \$args)
if ( \$shell_cmds.Count -gt 0 ) {
iex (\$shell_cmds -join "\`n")
}
} else {
& (get-command -commandtype application pyenv) \$command \$args
}
}
EOS
;;
ksh | ksh93 | mksh )
echo \
'function pyenv {
@ -343,8 +281,8 @@ EOS
local command=${1:-}'
;;
esac
if [ "$shell" != "fish" ] && [ "$shell" != "pwsh" ]; then
if [ "$shell" != "fish" ]; then
IFS="|"
echo \
' [ "$#" -gt 0 ] && shift

View File

@ -10,8 +10,6 @@ PROTOTYPE_SHIM_PATH="${SHIM_PATH}/.pyenv-shim"
# Create the shims directory if it doesn't already exist.
mkdir -p "$SHIM_PATH"
declare last_acquire_error
acquire_lock() {
# Ensure only one instance of pyenv-rehash is running at a time by
# setting the shell's `noclobber` option and attempting to write to
@ -19,11 +17,15 @@ acquire_lock() {
# to stderr and exit with a non-zero status.
local ret
set -o noclobber
last_acquire_error="$( { ( echo -n > "$PROTOTYPE_SHIM_PATH"; ) 2>&1 1>&3 3>&1-; } 3>&1)" || ret=1
echo > "$PROTOTYPE_SHIM_PATH" 2>| /dev/null || ret=1
set +o noclobber
[ -z "${ret}" ]
}
# If we were able to obtain a lock, register a trap to clean up the
# prototype shim when the process exits.
trap release_lock EXIT
remove_prototype_shim() {
rm -f "$PROTOTYPE_SHIM_PATH"
}
@ -37,17 +39,11 @@ if [ ! -w "$SHIM_PATH" ]; then
exit 1
fi
declare acquired tested_for_other_write_errors
declare start=$SECONDS
PYENV_REHASH_TIMEOUT=${PYENV_REHASH_TIMEOUT:-60}
while (( SECONDS <= start + PYENV_REHASH_TIMEOUT )); do
if acquire_lock; then
unset acquired
start=$SECONDS
while (( SECONDS <= start + ${PYENV_REHASH_TIMEOUT:-60} )); do
if acquire_lock 2>/dev/null; then
acquired=1
# If we were able to obtain a lock, register a trap to clean up the
# prototype shim when the process exits.
trap release_lock EXIT
break
else
#Landlock sandbox subsystem in the Linux kernel returns false information in access() as of 6.14.0,
@ -56,8 +52,8 @@ while (( SECONDS <= start + PYENV_REHASH_TIMEOUT )); do
#So check for writablity by trying to write to a different file,
# in a way that taxes the usual use case as little as possible.
if [[ -z $tested_for_other_write_errors ]]; then
( t="$(TMPDIR="$SHIM_PATH" mktemp)" && rm "$t" ) && tested_for_other_write_errors=1 ||
{ echo "pyenv: cannot rehash: $SHIM_PATH isn't writable" >&2; break; }
( t="$(mktemp -p "$SHIM_PATH")" && rm "$t" ) && tested_for_other_write_errors=1 ||
{ echo "pyenv: cannot rehash: $SHIM_PATH isnt writable" >&2; break; }
fi
# POSIX sleep(1) doesn't provide subsecond precision, but many others do
sleep 0.1 2>/dev/null || sleep 1
@ -66,9 +62,7 @@ done
if [ -z "${acquired}" ]; then
if [[ -n $tested_for_other_write_errors ]]; then
echo "pyenv: cannot rehash: couldn't acquire lock"\
"$PROTOTYPE_SHIM_PATH for $PYENV_REHASH_TIMEOUT seconds. Last error message:" >&2
echo "$last_acquire_error" >&2
echo "pyenv: cannot rehash: $PROTOTYPE_SHIM_PATH exists" >&2
fi
exit 1
fi
@ -88,10 +82,6 @@ set -e
program="\${0##*/}"
export PYENV_ROOT="$PYENV_ROOT"
SHIM_PATH=\${0%/*}
if [[ \$SHIM_PATH != "$PYENV_ROOT/shims" ]]; then
export _PYENV_SHIM_PATH="\$SHIM_PATH"
fi
exec "$(command -v pyenv)" exec "\$program" "\$@"
SH
chmod +x "$PROTOTYPE_SHIM_PATH"

View File

@ -11,17 +11,11 @@ shell="$(basename "${PYENV_SHELL:-$SHELL}")"
# When pyenv shell integration is enabled, delegate to pyenv-rehash,
# then tell the shell to empty its command lookup cache.
case "$shell" in
pwsh)
echo "& (get-command pyenv -commandtype application) rehash"
;;
*)
echo "command pyenv rehash"
esac
echo "command pyenv rehash"
case "$shell" in
fish | pwsh )
# no executable cache
fish )
# no rehash support
;;
* )
echo "hash -r 2>/dev/null || true"

View File

@ -48,9 +48,6 @@ if [ "$versions" = "--unset" ]; then
echo 'set -gu PYENV_VERSION_OLD "$PYENV_VERSION"'
echo "set -e PYENV_VERSION"
;;
pwsh )
echo '$Env:PYENV_VERSION, $Env:PYENV_VERSION_OLD = $null, $Env:PYENV_VERSION'
;;
* )
echo 'PYENV_VERSION_OLD="${PYENV_VERSION-}"'
echo "unset PYENV_VERSION"
@ -77,16 +74,6 @@ else
echo "pyenv: PYENV_VERSION_OLD is not set" >&2
false
end
EOS
;;
pwsh )
cat <<EOS
if ( Get-Item -Path Env:\PYENV_VERSION* ) {
\$Env:PYENV_VERSION, \$Env:PYENV_VERSION_OLD = \$Env:PYENV_VERSION_OLD, \$Env:PYENV_VERSION
} else {
Write-Error "pyenv: Env:PYENV_VERSION_OLD is not set"
return \$false
}
EOS
;;
* )
@ -122,9 +109,6 @@ if pyenv-prefix "${versions[@]}" >/dev/null; then
echo 'set -gu PYENV_VERSION_OLD "$PYENV_VERSION"'
echo "set -gx PYENV_VERSION \"$version\""
;;
pwsh )
echo '$Env:PYENV_VERSION, $Env:PYENV_VERSION_OLD = "'"${version}"'", $Env:PYENV_VERSION'
;;
* )
echo 'PYENV_VERSION_OLD="${PYENV_VERSION-}"'
echo "export PYENV_VERSION=\"${version}\""

View File

@ -42,19 +42,15 @@ done
remove_from_path() {
local -a paths_to_remove
IFS=: paths_to_remove=($1)
local path_to_remove path_before
local path_to_remove="$1"
local path_before
local result=":${PATH//\~/$HOME}:"
for path_to_remove in "${paths_to_remove[@]}"; do
while true; do
path_before="$result"
result="${result//:$path_to_remove:/:}"
if [[ ${#path_before} == "${#result}" ]]; then break; fi
done
while [ "$path_before" != "$result" ]; do
path_before="$result"
result="${result//:$path_to_remove:/:}"
done
result="${result:1:${#result}-2}"
echo "$result"
result="${result%:}"
echo "${result#:}"
}
if [ -z "$PYENV_COMMAND" ]; then
@ -70,10 +66,8 @@ declare -a nonexistent_versions
for version in "${versions[@]}" "$system"; do
if [ "$version" = "system" ]; then
PROGRAM="$(echo "$PYENV_COMMAND" | tr a-z- A-Z_ | sed 's/[^A-Z0-9_]/_/g')"
NR_CUSTOM_SHIM_PATHS="_PYENV_SHIM_PATHS_$PROGRAM"
SEARCH_PATH="$(remove_from_path "${PYENV_ROOT}/shims${!NR_CUSTOM_SHIM_PATHS:+:${!NR_CUSTOM_SHIM_PATHS}}")"
PYENV_COMMAND_PATH="$(PATH="$SEARCH_PATH" command -v "$PYENV_COMMAND" || true)"
PATH="$(remove_from_path "${PYENV_ROOT}/shims")"
PYENV_COMMAND_PATH="$(command -v "$PYENV_COMMAND" || true)"
else
# $version may be a prefix to be resolved by pyenv-latest
version_path="$(pyenv-prefix "${version}" 2>/dev/null)" || \

View File

@ -256,6 +256,7 @@ for DEFINITION in "${DEFINITIONS[@]}"; do
# Display a more helpful message if the definition wasn't found.
if [ "$STATUS" == "2" ]; then
{ candidates="$(definitions "$DEFINITION")"
here="$(dirname "${0%/*}")/../.."
if [ -n "$candidates" ]; then
echo
echo "The following versions contain \`$DEFINITION' in the name:"
@ -265,13 +266,12 @@ for DEFINITION in "${DEFINITIONS[@]}"; do
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
if [ "$here" != "${here#$(brew --prefix 2>/dev/null)}" ]; then
printf ":\n\n"
echo " brew update && brew upgrade pyenv"
elif [ -d "${_PYENV_INSTALL_PREFIX}/.git" ]; then
elif [ -d "${here}/.git" ]; then
printf ":\n\n"
echo " cd ${_PYENV_INSTALL_PREFIX} && git pull && cd -"
echo " cd ${here} && git pull && cd -"
else
printf ".\n"
fi

View File

@ -14,7 +14,7 @@
# -g/--debug Build a debug version
#
PYTHON_BUILD_VERSION="2.6.19"
PYTHON_BUILD_VERSION="2.6.17"
OLDIFS="$IFS"
@ -1769,16 +1769,12 @@ build_package_mac_openssl() {
local nokerberos
[[ "$1" != openssl-1.0.* ]] || nokerberos=1
# switches introduced in OpenSSL 1.1.1
local notests
[[ $(openssl_version $1) -ge 10101 ]] && notests=1
# switches introduced in OpenSSL 3.2
local extra_no_features
[[ $(openssl_version $1) -ge 30200 ]] && extra_no_features=1
# Compile a shared lib with zlib dynamically linked.
package_option openssl configure --openssldir="$OPENSSLDIR" zlib-dynamic no-ssl3 shared ${nokerberos:+no-ssl2 no-krb5} ${extra_no_features:+no-docs no-apps} ${notests:+no-tests}
package_option openssl configure --openssldir="$OPENSSLDIR" zlib-dynamic no-ssl3 shared ${nokerberos:+no-ssl2 no-krb5} ${extra_no_features:+no-docs no-apps} no-tests
build_package_standard "$@"

View File

@ -1 +0,0 @@
/venv

View File

@ -1,624 +0,0 @@
#!/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
logger = logging.getLogger(__name__)
CUTOFF_VERSION=packaging.version.Version('3.9')
EXCLUDED_VERSIONS= {
packaging.version.Version("3.9.3") #recalled upstream
}
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"
previous_thunk_path = OUT_DIR / previous_thunk_name
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))
else:
logger.info(f"Deleting {previous_thunk_path}")
previous_thunk_path.unlink()
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()
for initial_release in (v for v in frozenset(VersionDirectory.available.keys())
if v.micro == 0 and v not in VersionDirectory.existing):
# may actually be a prerelease
VersionDirectory.available.get_store_available_source_downloads(initial_release, True)
del initial_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} for {download_version} "
f"at page {entry.download_page_url} for {version}")
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").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).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)
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)
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())

View File

@ -32,11 +32,7 @@ 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}
* )
@ -219,9 +215,7 @@ class CondaVersion(NamedTuple):
# 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
# https://docs.anaconda.com/free/anaconda/reference/release-notes/
if v >= (2024,6):
return PyVersion.PY312
if v >= (2023,7):
@ -239,13 +233,6 @@ class CondaVersion(NamedTuple):
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):
@ -315,8 +302,7 @@ def make_script(specs: List[CondaSpec]):
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):

View File

@ -124,25 +124,20 @@ def add_version(release, distributions):
else:
logger.info('Did not find specs for %(distribution)s', locals())
for release in requests.get(f'https://api.github.com/repos/{MINIFORGE_REPO}/releases').json():
version = release['tag_name']
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
if version in SKIPPED_RELEASES:
continue
logger.info('Looking for %(version)s in %(out_dir)s', locals())
logger.info('Looking for %(version)s in %(out_dir)s', locals())
# 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
# 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('Downloading %(version)s', locals())
add_version(release, distributions)
if __name__ == '__main__':
main()
if any(not list(out_dir.glob(f'{distribution}*-{version}')) for distribution in distributions):
logger.info('Downloading %(version)s', locals())
add_version(release, distributions)

View File

@ -1,9 +1,2 @@
more_itertools
requests-html
fake_useragent<2
lxml[html_clean]
packaging
requests
sortedcontainers
tqdm
jc @ git+https://github.com/native-api/jc@haslib_mode

View File

@ -4,7 +4,7 @@ export PYTHON_BUILD_TCLTK_USE_PKGCONFIG=1
install_package "openssl-3.6.0" "https://github.com/openssl/openssl/releases/download/openssl-3.6.0/openssl-3.6.0.tar.gz#b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9" 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.15.0a4" "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a4.tar.xz#a0a521d5c480b89979da1aefce29750eb158128c0178728ebfef7511c21b4e77" standard verify_py315 copy_python_gdb ensurepip
install_package "Python-3.15.0a3" "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a3.tar.xz#6ab02cdac24505779877bb1d9189432d67e90ddf2a9b8b7b373ead54ac07b607" standard verify_py315 copy_python_gdb ensurepip
else
install_package "Python-3.15.0a4" "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a4.tgz#c6e450064e38f903cb2857018fc31cff8fcdedae04820b0bfff0825d690ff85f" standard verify_py315 copy_python_gdb ensurepip
install_package "Python-3.15.0a3" "https://www.python.org/ftp/python/3.15.0/Python-3.15.0a3.tgz#a8afd71361baf8f02f459a4ab9b73eb4cdf2895991218b8418cf7ba49c96bef7" standard verify_py315 copy_python_gdb ensurepip
fi

View File

@ -1,15 +1,15 @@
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Anaconda3-2025.06-0-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-aarch64.sh#e6177f844f6156f07978c85b1f18ca3b7724d5ab5dba44b88a7f6b2452ba6271" "anaconda" verify_py313
install_script "Anaconda3-2025.06-0-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-aarch64.sh#e6177f844f6156f07978c85b1f18ca3b7724d5ab5dba44b88a7f6b2452ba6271" "anaconda" verify_py312
;;
"Linux-x86_64" )
install_script "Anaconda3-2025.06-0-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-x86_64.sh#08db13f6db5dd4f99b3a6db96c68d064d50ea23742013b70f588e3a27a5204da" "anaconda" verify_py313
install_script "Anaconda3-2025.06-0-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-x86_64.sh#08db13f6db5dd4f99b3a6db96c68d064d50ea23742013b70f588e3a27a5204da" "anaconda" verify_py312
;;
"MacOSX-arm64" )
install_script "Anaconda3-2025.06-0-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-MacOSX-arm64.sh#195f234204e2f18803cea38bbebefcaac5a3d8d95e2e4ee106d1b87b23b9fc4a" "anaconda" verify_py313
install_script "Anaconda3-2025.06-0-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-MacOSX-arm64.sh#195f234204e2f18803cea38bbebefcaac5a3d8d95e2e4ee106d1b87b23b9fc4a" "anaconda" verify_py312
;;
"MacOSX-x86_64" )
install_script "Anaconda3-2025.06-0-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-MacOSX-x86_64.sh#8625a155ff1d2848afa360e70357e14c25f0ac7ac21e4e4bf15015bc58b08d06" "anaconda" verify_py313
install_script "Anaconda3-2025.06-0-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-0-MacOSX-x86_64.sh#8625a155ff1d2848afa360e70357e14c25f0ac7ac21e4e4bf15015bc58b08d06" "anaconda" verify_py312
;;
* )
{ echo

View File

@ -1,15 +1,15 @@
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Anaconda3-2025.06-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-Linux-aarch64.sh#98dfb82732991f3f4d385a265da5fd2190d65ec31ceafa0b93f3c5edf4431a5b" "anaconda" verify_py313
install_script "Anaconda3-2025.06-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-Linux-aarch64.sh#98dfb82732991f3f4d385a265da5fd2190d65ec31ceafa0b93f3c5edf4431a5b" "anaconda" verify_py312
;;
"Linux-x86_64" )
install_script "Anaconda3-2025.06-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-Linux-x86_64.sh#82976426a2c91fe1453281def386f9ebebd8fdb45dc6c970b54cfef4e9120857" "anaconda" verify_py313
install_script "Anaconda3-2025.06-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-Linux-x86_64.sh#82976426a2c91fe1453281def386f9ebebd8fdb45dc6c970b54cfef4e9120857" "anaconda" verify_py312
;;
"MacOSX-arm64" )
install_script "Anaconda3-2025.06-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-MacOSX-arm64.sh#f9366a024ac6f043dc224986c54f1b4e1226e6ccb6291d83bdadb489f159d847" "anaconda" verify_py313
install_script "Anaconda3-2025.06-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-MacOSX-arm64.sh#f9366a024ac6f043dc224986c54f1b4e1226e6ccb6291d83bdadb489f159d847" "anaconda" verify_py312
;;
"MacOSX-x86_64" )
install_script "Anaconda3-2025.06-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-MacOSX-x86_64.sh#58139fe195337f3041259e3a611339ed3afa4d164cc9aa2a7e8e84c0673e3670" "anaconda" verify_py313
install_script "Anaconda3-2025.06-1-MacOSX-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.06-1-MacOSX-x86_64.sh#58139fe195337f3041259e3a611339ed3afa4d164cc9aa2a7e8e84c0673e3670" "anaconda" verify_py312
;;
* )
{ echo

View File

@ -1,19 +0,0 @@
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Anaconda3-2025.12-1-Linux-aarch64" "https://repo.anaconda.com/archive/Anaconda3-2025.12-1-Linux-aarch64.sh#9ba6b32919dfd1964377a4ac5c5e4de645b6bd09efab4a25aaf6e121a60e525c" "anaconda" verify_py313
;;
"Linux-x86_64" )
install_script "Anaconda3-2025.12-1-Linux-x86_64" "https://repo.anaconda.com/archive/Anaconda3-2025.12-1-Linux-x86_64.sh#132f1f312d05e391906b959ad83aa411b97ece55966bb34df011ef41ba60a35c" "anaconda" verify_py313
;;
"MacOSX-arm64" )
install_script "Anaconda3-2025.12-1-MacOSX-arm64" "https://repo.anaconda.com/archive/Anaconda3-2025.12-1-MacOSX-arm64.sh#f998f0918b9f06e08c3444f2b2c897fd3036da6725441ca064aa71ad47c75481" "anaconda" verify_py313
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Anaconda is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.1.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-aarch64.sh#d8a975d2194aab5ace390c273c5328be89342b956711c1648d02c87e4c4ffeb1" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-aarch64.sh#d8a975d2194aab5ace390c273c5328be89342b956711c1648d02c87e4c4ffeb1" "miniconda" verify_py310
;;
"Linux-s390x" )
install_script "Miniconda3-py310_25.1.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-s390x.sh#087d1cb3708da2a07def69e925731a87b500a9b5befec5e7666422480a5edc67" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-s390x.sh#087d1cb3708da2a07def69e925731a87b500a9b5befec5e7666422480a5edc67" "miniconda" verify_py310
;;
"Linux-x86_64" )
install_script "Miniconda3-py310_25.1.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-x86_64.sh#2346f43213d3e96abca95d0a7df2575d52c66030f2feb90d3d58ed3eabe76aa3" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-Linux-x86_64.sh#2346f43213d3e96abca95d0a7df2575d52c66030f2feb90d3d58ed3eabe76aa3" "miniconda" verify_py310
;;
"MacOSX-arm64" )
install_script "Miniconda3-py310_25.1.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-MacOSX-arm64.sh#e52fabc1c331e79cb4a348eea0ac9fc75742609ed5a41370a1e8790a97c13449" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-MacOSX-arm64.sh#e52fabc1c331e79cb4a348eea0ac9fc75742609ed5a41370a1e8790a97c13449" "miniconda" verify_py310
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py310_25.1.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-MacOSX-x86_64.sh#3d9720b16428a924b09f460f942be1f841c28d9ceeff9149051a8f4241745839" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-0-MacOSX-x86_64.sh#3d9720b16428a924b09f460f942be1f841c28d9ceeff9149051a8f4241745839" "miniconda" verify_py310
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.1.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-aarch64.sh#a72a3247d4c5843bf9ba3e902218ada02e2b75b16260541befd7ac0961077fa9" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-aarch64.sh#"a72a3247d4c5843bf9ba3e902218ada02e2b75b16260541befd7ac0961077fa9 "miniconda" verify_py310
;;
"Linux-s390x" )
install_script "Miniconda3-py310_25.1.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-s390x.sh#072b62a97432048e5ad1e9a987c6739de719192f6c19c79b06d1e05424cd4c35" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-s390x.sh#072b62a97432048e5ad1e9a987c6739de719192f6c19c79b06d1e05424cd4c35" "miniconda" verify_py310
;;
"Linux-x86_64" )
install_script "Miniconda3-py310_25.1.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-x86_64.sh#585972959914f1f9be463284d477717eb10f7306bda63f2ec3c4c86047b9dd72" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-Linux-x86_64.sh#585972959914f1f9be463284d477717eb10f7306bda63f2ec3c4c86047b9dd72" "miniconda" verify_py310
;;
"MacOSX-arm64" )
install_script "Miniconda3-py310_25.1.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-MacOSX-arm64.sh#0be344f9eb9e7cf7c2d45598922674e599739c9a9f6c5ee1436238005da9dd03" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-MacOSX-arm64.sh#0be344f9eb9e7cf7c2d45598922674e599739c9a9f6c5ee1436238005da9dd03" "miniconda" verify_py310
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py310_25.1.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-MacOSX-x86_64.sh#497d6deb3932f8f0257a3db515419e871a0f1ecb155e0fd80d13ca7bbccbecac" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-1-MacOSX-x86_64.sh#497d6deb3932f8f0257a3db515419e871a0f1ecb155e0fd80d13ca7bbccbecac" "miniconda" verify_py310
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.1.1-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-aarch64.sh#5f61143e93d9d48a82aa99a1d7b1c77561f599b9a67ab954862e6e8d6a25c0cc" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-aarch64.sh#5f61143e93d9d48a82aa99a1d7b1c77561f599b9a67ab954862e6e8d6a25c0cc" "miniconda" verify_py310
;;
"Linux-s390x" )
install_script "Miniconda3-py310_25.1.1-2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-s390x.sh#89d689248a6855da3e6087cfeebaad6886e4ef46b4e96671bf251bb9aa6b1499" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-s390x.sh#89d689248a6855da3e6087cfeebaad6886e4ef46b4e96671bf251bb9aa6b1499" "miniconda" verify_py310
;;
"Linux-x86_64" )
install_script "Miniconda3-py310_25.1.1-2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-x86_64.sh#7f298109ab95b5436632973a04189a125282cc948f1dd1b03fa9cb6c71443915" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-Linux-x86_64.sh#7f298109ab95b5436632973a04189a125282cc948f1dd1b03fa9cb6c71443915" "miniconda" verify_py310
;;
"MacOSX-arm64" )
install_script "Miniconda3-py310_25.1.1-2-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-MacOSX-arm64.sh#119e3196d9e67f8eb0f88d4a3188849b5b8bf14a8dd87873c0bff7ce016eea52" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-MacOSX-arm64.sh#119e3196d9e67f8eb0f88d4a3188849b5b8bf14a8dd87873c0bff7ce016eea52" "miniconda" verify_py310
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py310_25.1.1-2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-MacOSX-x86_64.sh#543d635dcd34256ac87ffe7a242259cf8f639d51a503da4e4eb3e29ecf406302" "miniconda" verify_py310
install_script "Miniconda3-py310_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.1.1-2-MacOSX-x86_64.sh#543d635dcd34256ac87ffe7a242259cf8f639d51a503da4e4eb3e29ecf406302" "miniconda" verify_py310
;;
* )
{ echo

View File

@ -1,20 +0,0 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.11.1-1-Linux-aarch64.sh#cbac1da35d4c8635384f58b9a776c23fcb3c4dc0b936b8d4d0526f2d0a4b1c4c" "miniconda" verify_py310
;;
"Linux-x86_64" )
install_script "Miniconda3-py310_25.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.11.1-1-Linux-x86_64.sh#f6174765edd75e1ef2bb3f16e99266d291deebf6532f2f7e800569afc084d0eb" "miniconda" verify_py310
;;
"MacOSX-arm64" )
install_script "Miniconda3-py310_25.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.11.1-1-MacOSX-arm64.sh#c83c7a20dd45442ef05321637872bdd9ee13395098e9bb1a22a28b1dccdd9a31" "miniconda" verify_py310
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.3.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.3.1-1-Linux-aarch64.sh#7879e8e2c89d26d8c4776fbad72656afda697e67e2e70b9b8eef368b111d2253" "miniconda" verify_py310

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.5.1-0-Linux-aarch64.sh#6886af5e5db79dfb4429cde937b6f806d02b0e98dd11249c74917661fc7b1f4b" "miniconda" verify_py310

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.5.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.5.1-1-Linux-aarch64.sh#630f724622a3f45f66b3b08f708bc44e2cb595ad147f68750271c6352cb4d734" "miniconda" verify_py310

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.7.0-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.7.0-2-Linux-aarch64.sh#e13bd0e0b4f70841f78aea8a978eb35cd6afb0af3e2d2b8f85d24636bb56bc21" "miniconda" verify_py310

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.9.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.9.1-1-Linux-aarch64.sh#28fc3db9c7ee63cedab38b0e6006409f1f448be7ffc57b270623efd4422b0608" "miniconda" verify_py310

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py310_25.9.1-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py310_25.9.1-3-Linux-aarch64.sh#bc58460f17ec60d6c920d4352dd4d5e465aa22b56580bd4cd57c9693859761ec" "miniconda" verify_py310

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.1.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-aarch64.sh#737f02e2e6c192afbef000f6dba79f4dbbe852193c6890243516ea50d916d31c" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-aarch64.sh#737f02e2e6c192afbef000f6dba79f4dbbe852193c6890243516ea50d916d31c" "miniconda" verify_py311
;;
"Linux-s390x" )
install_script "Miniconda3-py311_25.1.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-s390x.sh#6244e894c56afc095eba0d2c2e88125af1a6a661187b136b8d1abc1392cca8eb" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-s390x.sh#6244e894c56afc095eba0d2c2e88125af1a6a661187b136b8d1abc1392cca8eb" "miniconda" verify_py311
;;
"Linux-x86_64" )
install_script "Miniconda3-py311_25.1.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-x86_64.sh#9bc631a7edfc015bbf944d5f48c3852e7c0c83aeae0359b75bee9f402942413a" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-Linux-x86_64.sh#9bc631a7edfc015bbf944d5f48c3852e7c0c83aeae0359b75bee9f402942413a" "miniconda" verify_py311
;;
"MacOSX-arm64" )
install_script "Miniconda3-py311_25.1.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-MacOSX-arm64.sh#0189917c28f8c3a8e9f113532225d4878e6f018d215739ccff92f99750fe7083" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-MacOSX-arm64.sh#0189917c28f8c3a8e9f113532225d4878e6f018d215739ccff92f99750fe7083" "miniconda" verify_py311
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py311_25.1.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-MacOSX-x86_64.sh#af0d2916b3e3aad814f246a85c48ec9658e2b5f4d1cc7f09246d197fa18169c8" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-0-MacOSX-x86_64.sh#af0d2916b3e3aad814f246a85c48ec9658e2b5f4d1cc7f09246d197fa18169c8" "miniconda" verify_py311
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.1.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-aarch64.sh#288aa5b21b97db7f09bf6da03323b3a3b97d461a4c5bf666be58312eb6b6e311" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-aarch64.sh#288aa5b21b97db7f09bf6da03323b3a3b97d461a4c5bf666be58312eb6b6e311" "miniconda" verify_py311
;;
"Linux-s390x" )
install_script "Miniconda3-py311_25.1.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-s390x.sh#e0c755e9e2e26f75cccda56fe978e7a964ed559f474486421a0022b7351bc108" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-s390x.sh#e0c755e9e2e26f75cccda56fe978e7a964ed559f474486421a0022b7351bc108" "miniconda" verify_py311
;;
"Linux-x86_64" )
install_script "Miniconda3-py311_25.1.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-x86_64.sh#03a253f7ca5cf1fdfca2aedced769d8479cb559b7c92e70f24c176fd9d23bc8e" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-Linux-x86_64.sh#03a253f7ca5cf1fdfca2aedced769d8479cb559b7c92e70f24c176fd9d23bc8e" "miniconda" verify_py311
;;
"MacOSX-arm64" )
install_script "Miniconda3-py311_25.1.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-MacOSX-arm64.sh#871ca583ee0be45d5fa36eba4143a6701e775c500c7b30ac519ef1a0205d78c3" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-MacOSX-arm64.sh#871ca583ee0be45d5fa36eba4143a6701e775c500c7b30ac519ef1a0205d78c3" "miniconda" verify_py311
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py311_25.1.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-MacOSX-x86_64.sh#deb025449147280611e6ca8bf89291cddb6eab06e2bff0114ac05f6f67b5ca89" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-1-MacOSX-x86_64.sh#deb025449147280611e6ca8bf89291cddb6eab06e2bff0114ac05f6f67b5ca89" "miniconda" verify_py311
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.1.1-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-aarch64.sh#8a1d4407fce7ec552ac6ed655ce93d83549e02b819cacefbb7f640f9051e638b" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-aarch64.sh#8a1d4407fce7ec552ac6ed655ce93d83549e02b819cacefbb7f640f9051e638b" "miniconda" verify_py311
;;
"Linux-s390x" )
install_script "Miniconda3-py311_25.1.1-2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-s390x.sh#0b4d5a3f16dcb2d230ba5dfdfdb848c854006aab6dd1bd3dbf29fcddf04b07a4" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-s390x.sh#0b4d5a3f16dcb2d230ba5dfdfdb848c854006aab6dd1bd3dbf29fcddf04b07a4" "miniconda" verify_py311
;;
"Linux-x86_64" )
install_script "Miniconda3-py311_25.1.1-2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-x86_64.sh#d8c1645776c0758214e4191c605abe5878002051316bd423f2b14b22d6cb4251" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-Linux-x86_64.sh#d8c1645776c0758214e4191c605abe5878002051316bd423f2b14b22d6cb4251" "miniconda" verify_py311
;;
"MacOSX-arm64" )
install_script "Miniconda3-py311_25.1.1-2-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-MacOSX-arm64.sh#140b80b4d285bbbcc8616891876ec3613e46acbedb02321b9ddc03ff0784c584" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-MacOSX-arm64.sh#140b80b4d285bbbcc8616891876ec3613e46acbedb02321b9ddc03ff0784c584" "miniconda" verify_py311
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py311_25.1.1-2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-MacOSX-x86_64.sh#41c4ed1ce9f44049346a7efd8311919f82a8115637eced8796b5d18599f50cae" "miniconda" verify_py311
install_script "Miniconda3-py311_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.1.1-2-MacOSX-x86_64.sh#41c4ed1ce9f44049346a7efd8311919f82a8115637eced8796b5d18599f50cae" "miniconda" verify_py311
;;
* )
{ echo

View File

@ -1,20 +0,0 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.11.1-1-Linux-aarch64.sh#ed0c6cc091802bc4d1440260d60d431b263f22d5cb9be5df71e7ff176c8f1cd8" "miniconda" verify_py311
;;
"Linux-x86_64" )
install_script "Miniconda3-py311_25.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.11.1-1-Linux-x86_64.sh#cf5fe14f1be074b82908f188ff759b61ddf87ed15a766f8641182ebf190832b4" "miniconda" verify_py311
;;
"MacOSX-arm64" )
install_script "Miniconda3-py311_25.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.11.1-1-MacOSX-arm64.sh#5d76efda2d459389e35d5406494230bb78635bdb99500bda7d7eb3c4e3742f1c" "miniconda" verify_py311
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.3.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.3.1-1-Linux-aarch64.sh#8d2470bdbee7e93d9b4972a3272b63673ba62113282378f98f23b423cc61ef59" "miniconda" verify_py311

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.5.1-0-Linux-aarch64.sh#3862c5ecba0949c3bdbeeb7d072664215924fbccb25f0d3f33782362c5405e22" "miniconda" verify_py311

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.5.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.5.1-1-Linux-aarch64.sh#39a6d853df41b74aabe37dd666732f7556f81584af789693d7e3005d7a04c64f" "miniconda" verify_py311

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.7.0-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.7.0-2-Linux-aarch64.sh#28ca561ec2d9a1ae72fbf3f833b8918c747ce21f57d79e218e47bf7d4d2ce792" "miniconda" verify_py311

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.9.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.9.1-1-Linux-aarch64.sh#4e0723b9d76aa491cf22511dac36f4fdec373e41d2a243ff875e19b8df39bf94" "miniconda" verify_py311

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py311_25.9.1-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py311_25.9.1-3-Linux-aarch64.sh#92a4df72178d87626072b39aca8fa4721f29d192ed0d70e268586f63b41f7657" "miniconda" verify_py311

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.1.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-aarch64.sh#ae9d3ea83df97e78fd51c452d0bc75005a28d504c22db6f1000822293f916b54" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-aarch64.sh#ae9d3ea83df97e78fd51c452d0bc75005a28d504c22db6f1000822293f916b54" "miniconda" verify_py312
;;
"Linux-s390x" )
install_script "Miniconda3-py312_25.1.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-s390x.sh#fa0b443ea73c71abd29eb51212c7b032d5089cbb2761aa07f91668b903a2a575" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-s390x.sh#fa0b443ea73c71abd29eb51212c7b032d5089cbb2761aa07f91668b903a2a575" "miniconda" verify_py312
;;
"Linux-x86_64" )
install_script "Miniconda3-py312_25.1.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-x86_64.sh#832de27a5a35b7963f0d83466abada3eb138e51985255f190e0dc350427a9dd1" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-Linux-x86_64.sh#832de27a5a35b7963f0d83466abada3eb138e51985255f190e0dc350427a9dd1" "miniconda" verify_py312
;;
"MacOSX-arm64" )
install_script "Miniconda3-py312_25.1.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-MacOSX-arm64.sh#24821d2c87598ae0f8e697e612cdf41d0dbc9ae563cae8aacd878d50d1a86e1e" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-MacOSX-arm64.sh#24821d2c87598ae0f8e697e612cdf41d0dbc9ae563cae8aacd878d50d1a86e1e" "miniconda" verify_py312
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py312_25.1.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-MacOSX-x86_64.sh#65f91c564abced759ce7fca099239b7ed4ae9835cb4b64a11923cd3b5f57f5f1" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-0-MacOSX-x86_64.sh#65f91c564abced759ce7fca099239b7ed4ae9835cb4b64a11923cd3b5f57f5f1" "miniconda" verify_py312
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.1.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-aarch64.sh#c8a2112c5ed07196a0e7cf0682ff39c9a28eac5862df49659af7d4f6906efa70" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-aarch64.sh#c8a2112c5ed07196a0e7cf0682ff39c9a28eac5862df49659af7d4f6906efa70" "miniconda" verify_py312
;;
"Linux-s390x" )
install_script "Miniconda3-py312_25.1.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-s390x.sh#f644f5c18985078e6cd1af9c517f9634dbb3199a86f75eb90a9fb303289ebf0b" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-s390x.sh#f644f5c18985078e6cd1af9c517f9634dbb3199a86f75eb90a9fb303289ebf0b" "miniconda" verify_py312
;;
"Linux-x86_64" )
install_script "Miniconda3-py312_25.1.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-x86_64.sh#2cc524b9b47b268e1a3ecca1f7f3c1bb4142f42a10001c88fb69c6664ca8a9a6" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-Linux-x86_64.sh#2cc524b9b47b268e1a3ecca1f7f3c1bb4142f42a10001c88fb69c6664ca8a9a6" "miniconda" verify_py312
;;
"MacOSX-arm64" )
install_script "Miniconda3-py312_25.1.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-MacOSX-arm64.sh#c8f316330308f712b94dd7ac2a6048f87d6b364c3354f4e619ed4aef6d99dfad" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-MacOSX-arm64.sh#c8f316330308f712b94dd7ac2a6048f87d6b364c3354f4e619ed4aef6d99dfad" "miniconda" verify_py312
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py312_25.1.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-MacOSX-x86_64.sh#29fce1ea800ff167e2f44d5a0dbd33124384b33520fd481378908e94de68b1a1" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-1-MacOSX-x86_64.sh#29fce1ea800ff167e2f44d5a0dbd33124384b33520fd481378908e94de68b1a1" "miniconda" verify_py312
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.1.1-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-aarch64.sh#6d05b9f9b7f327b90797a4cf56d68c81578bab2f63257a3e7a8b72cb0f0e4b5d" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-aarch64.sh#6d05b9f9b7f327b90797a4cf56d68c81578bab2f63257a3e7a8b72cb0f0e4b5d" "miniconda" verify_py312
;;
"Linux-s390x" )
install_script "Miniconda3-py312_25.1.1-2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-s390x.sh#55c681937c27e13a8ed818d1fec182e623e0308fffc1b10605896dac15f90077" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-s390x.sh#55c681937c27e13a8ed818d1fec182e623e0308fffc1b10605896dac15f90077" "miniconda" verify_py312
;;
"Linux-x86_64" )
install_script "Miniconda3-py312_25.1.1-2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-x86_64.sh#4766d85b5f7d235ce250e998ebb5a8a8210cbd4f2b0fea4d2177b3ed9ea87884" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-Linux-x86_64.sh#4766d85b5f7d235ce250e998ebb5a8a8210cbd4f2b0fea4d2177b3ed9ea87884" "miniconda" verify_py312
;;
"MacOSX-arm64" )
install_script "Miniconda3-py312_25.1.1-2-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-MacOSX-arm64.sh#16e7eea739d470d0c3451e9bb779bbfa169b98cfb283d2d6508945e0c6b36ada" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-MacOSX-arm64.sh#16e7eea739d470d0c3451e9bb779bbfa169b98cfb283d2d6508945e0c6b36ada" "miniconda" verify_py312
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py312_25.1.1-2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-MacOSX-x86_64.sh#0df9f4b7d063a78d18fd02af2b0a97121879af00b535ea79ee23d68d1005e6f8" "miniconda" verify_py312
install_script "Miniconda3-py312_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.1.1-2-MacOSX-x86_64.sh#0df9f4b7d063a78d18fd02af2b0a97121879af00b535ea79ee23d68d1005e6f8" "miniconda" verify_py312
;;
* )
{ echo

View File

@ -1,20 +0,0 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.11.1-1-Linux-aarch64.sh#f51aa82c395a2c5854c28ef8b7a24e252d5daca4a7a054ec8d9d6847d1d84518" "miniconda" verify_py312
;;
"Linux-x86_64" )
install_script "Miniconda3-py312_25.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.11.1-1-Linux-x86_64.sh#498ddb7c091002e4fd76e3496d91d2d915b183d1d850bef6e060fd45e2523213" "miniconda" verify_py312
;;
"MacOSX-arm64" )
install_script "Miniconda3-py312_25.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.11.1-1-MacOSX-arm64.sh#febaaeddd0deff2d3b034f7ef99efcab7169549d9be4175e1870170d59377a58" "miniconda" verify_py312
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.3.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.3.1-1-Linux-aarch64.sh#4b8078ef311bad880b2497c098d734cd0e7316410a4f4fa1a8dbf6ab9ade98ea" "miniconda" verify_py312

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.5.1-0-Linux-aarch64.sh#9bd5765f163568f4ac85b8189aa2b260d1febb1080d085bb2535a3cae2d7f0e4" "miniconda" verify_py312

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.5.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.5.1-1-Linux-aarch64.sh#b007c6307c9a2081b8abfa0ff16caf0117226a7a9485031853fea125795de7ca" "miniconda" verify_py312

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.7.0-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.7.0-2-Linux-aarch64.sh#edc03373d75b3a06de594a7f819ad351bd2fa7602854f392107998e62468c783" "miniconda" verify_py312

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.9.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.9.1-1-Linux-aarch64.sh#11ab86931679e6d9b15112f2e866dad1fcbd89a039a6442c0bce7b86fd282f0a" "miniconda" verify_py312

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py312_25.9.1-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py312_25.9.1-3-Linux-aarch64.sh#8c5c1d38011fed8053d7bdaaf7fab372c3f71dbb77791e07692fb8059b7828bd" "miniconda" verify_py312

View File

@ -1,20 +0,0 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.11.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.11.1-1-Linux-aarch64.sh#9f39cc8c46ca37afed5e563cc234b3add34fea2f1119e076dcae7a377ca6b8ee" "miniconda" verify_py313
;;
"Linux-x86_64" )
install_script "Miniconda3-py313_25.11.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.11.1-1-Linux-x86_64.sh#e0b10e050e8928e2eb9aad2c522ee3b5d31d30048b8a9997663a8a460d538cef" "miniconda" verify_py313
;;
"MacOSX-arm64" )
install_script "Miniconda3-py313_25.11.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.11.1-1-MacOSX-arm64.sh#9f84ad10ea513fb59bb714933bc8dc092bd25fdb03c236868f5d5af3c26a1fd4" "miniconda" verify_py313
;;
* )
{ echo
colorize 1 "ERROR"
echo ": The binary distribution of Miniconda is not available for $(anaconda_architecture 2>/dev/null || true)."
echo
} >&2
exit 1
;;
esac

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.3.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.3.1-1-Linux-aarch64.sh#4caa0c266ab726b440ccad40a74774167494e001da5de281b74f2d5673e4ace9" "miniconda" verify_py313

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.5.1-0-Linux-aarch64.sh#368d5250682c12d3e1810e8cf5ce4f08e95ccc56c96dcf559567a6b4f72b203d" "miniconda" verify_py313

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.5.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.5.1-1-Linux-aarch64.sh#b7d611dcaa638efd700a4a4eb24fbcb9f7b94cc1773d7c655959c330d0b68e16" "miniconda" verify_py313

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.7.0-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.7.0-2-Linux-aarch64.sh#350dc95067e0c87bcaa67367e60ea1caae01872adeb945c760bb4a67518d9673" "miniconda" verify_py313

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.9.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.9.1-1-Linux-aarch64.sh#a0de4562c368a8b5ca4385843f405684c79bea7aa3b75d7513ff99c0c6435d51" "miniconda" verify_py313

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py313_25.9.1-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py313_25.9.1-3-Linux-aarch64.sh#036053e7e6e5866435bc1a11711b41293e5bf0776bb4aa9a7ea46d01f30eda31" "miniconda" verify_py313

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.1.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-aarch64.sh#6813ed27242f8c6a000fcdc0b2bb93253411a22ef110eec915b7d1a4aab3587b" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-0-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-aarch64.sh#6813ed27242f8c6a000fcdc0b2bb93253411a22ef110eec915b7d1a4aab3587b" "miniconda" verify_py39
;;
"Linux-s390x" )
install_script "Miniconda3-py39_25.1.1-0-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-s390x.sh#8220e1e67cc73a51d90108f5bdf5451aefae0b00d400958ae7d42e21d9a32999" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-0-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-s390x.sh#8220e1e67cc73a51d90108f5bdf5451aefae0b00d400958ae7d42e21d9a32999" "miniconda" verify_py39
;;
"Linux-x86_64" )
install_script "Miniconda3-py39_25.1.1-0-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-x86_64.sh#13a5870ab5b5c75f23a54eac2ba8dbff38bd4bd33d52aecbc6154ca0ff488e10" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-0-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-Linux-x86_64.sh#13a5870ab5b5c75f23a54eac2ba8dbff38bd4bd33d52aecbc6154ca0ff488e10" "miniconda" verify_py39
;;
"MacOSX-arm64" )
install_script "Miniconda3-py39_25.1.1-0-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-MacOSX-arm64.sh#6d60e9a8e0f531e09791f033529a6142ceb39ec7d23f8fc8231d287e39cdb30d" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-0-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-MacOSX-arm64.sh#6d60e9a8e0f531e09791f033529a6142ceb39ec7d23f8fc8231d287e39cdb30d" "miniconda" verify_py39
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py39_25.1.1-0-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-MacOSX-x86_64.sh#3752cbfae31526e53cae1b2976e183787fc98782c63bbd048853ed8860616051" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-0-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-0-MacOSX-x86_64.sh#3752cbfae31526e53cae1b2976e183787fc98782c63bbd048853ed8860616051" "miniconda" verify_py39
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.1.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-aarch64.sh#ae55c260fd250154627f74d0ede010c99c20741698d7d687b2dfca0aa14ce2d5" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-1-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-aarch64.sh#ae55c260fd250154627f74d0ede010c99c20741698d7d687b2dfca0aa14ce2d5" "miniconda" verify_py39
;;
"Linux-s390x" )
install_script "Miniconda3-py39_25.1.1-1-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-s390x.sh#6957a17c17e86fe43ba3c2e18dcfc1415710410c4a36f7a1c46fbc64aab4fb27" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-1-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-s390x.sh#6957a17c17e86fe43ba3c2e18dcfc1415710410c4a36f7a1c46fbc64aab4fb27" "miniconda" verify_py39
;;
"Linux-x86_64" )
install_script "Miniconda3-py39_25.1.1-1-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-x86_64.sh#c5ec876718798ccd6ce93ce38eb3253ef103244ea6efaa8c978df19047ba916a" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-1-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-Linux-x86_64.sh#c5ec876718798ccd6ce93ce38eb3253ef103244ea6efaa8c978df19047ba916a" "miniconda" verify_py39
;;
"MacOSX-arm64" )
install_script "Miniconda3-py39_25.1.1-1-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-MacOSX-arm64.sh#d717fb09b137a048d9b2f6ee9d3e7ef63ab841e35d80cb37f40d20ac949915c2" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-1-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-MacOSX-arm64.sh#d717fb09b137a048d9b2f6ee9d3e7ef63ab841e35d80cb37f40d20ac949915c2" "miniconda" verify_py39
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py39_25.1.1-1-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-MacOSX-x86_64.sh#a01dd65f2463bdec15abc1f796847912c67caaf78ea1c67f038ec02aa8c3adaf" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-1-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-1-MacOSX-x86_64.sh#a01dd65f2463bdec15abc1f796847912c67caaf78ea1c67f038ec02aa8c3adaf" "miniconda" verify_py39
;;
* )
{ echo

View File

@ -1,19 +1,18 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.1.1-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-aarch64.sh#5afee04df06c923462341cfc87727100a67fa854550d0d7a2e6295005168e6b7" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-2-Linux-aarch64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-aarch64.sh#5afee04df06c923462341cfc87727100a67fa854550d0d7a2e6295005168e6b7" "miniconda" verify_py39
;;
"Linux-s390x" )
install_script "Miniconda3-py39_25.1.1-2-Linux-s390x" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-s390x.sh#94a10a8a43dfd0360ecad9df24ef768db1b776d1a76fc2df1928d76c0bbb5535" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-2-Linux-s390x.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-s390x.sh#94a10a8a43dfd0360ecad9df24ef768db1b776d1a76fc2df1928d76c0bbb5535" "miniconda" verify_py39
;;
"Linux-x86_64" )
install_script "Miniconda3-py39_25.1.1-2-Linux-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-x86_64.sh#b40682cedf1e1755c02555f8d3d98aadb4607a68da7caf72a9bbe1fb9ae0b904" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-2-Linux-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-x86_64.sh#b40682cedf1e1755c02555f8d3d98aadb4607a68da7caf72a9bbe1fb9ae0b904" "miniconda" verify_py39
;;
"MacOSX-arm64" )
install_script "Miniconda3-py39_25.1.1-2-MacOSX-arm64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-MacOSX-arm64.sh#b50b4c46b481d3c9cb4befdbcf18087748d85eee9148c56a35f199940d607933" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-2-MacOSX-arm64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-MacOSX-arm64.sh#b50b4c46b481d3c9cb4befdbcf18087748d85eee9148c56a35f199940d607933" "miniconda" verify_py39
;;
"MacOSX-x86_64" )
install_script "Miniconda3-py39_25.1.1-2-MacOSX-x86_64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-MacOSX-x86_64.sh#92109afe5edcc06d3a3c61b0faf1edd3e3e2539eaad637d2711305ccd0065046" "miniconda" verify_py39
install_script "Miniconda3-py39_25.1.1-2-MacOSX-x86_64.sh" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-MacOSX-x86_64.sh#92109afe5edcc06d3a3c61b0faf1edd3e3e2539eaad637d2711305ccd0065046" "miniconda" verify_py39
;;
* )
{ echo

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.3.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.3.1-1-Linux-aarch64.sh#435f9b5640716dd770e9abe404c54db7d3493cb61a814c5de1fe345ea017d4a6" "miniconda" verify_py39

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.5.1-0-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.5.1-0-Linux-aarch64.sh#e4311fcce812cce6a914e7a82fb1180d278eaa705e40be6789795781d375fe53" "miniconda" verify_py39

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.5.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.5.1-1-Linux-aarch64.sh#a1078a803928d8f8f1fd29a2bdad6689f19239844ee3beb84372f66f00cbfb19" "miniconda" verify_py39

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.7.0-2-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.7.0-2-Linux-aarch64.sh#18befc78dbfca5bbdc2c8085f2bedd0345a5fbf7d0f1e189fddaf2d17f31d3af" "miniconda" verify_py39

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.9.1-1-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.9.1-1-Linux-aarch64.sh#983ef280dec1d0f965b6b6133c585ce902e07136105d4977aa5de3aa027cfa55" "miniconda" verify_py39

View File

@ -1,4 +1,3 @@
export CONDA_PLUGINS_AUTO_ACCEPT_TOS=true
case "$(anaconda_architecture 2>/dev/null || true)" in
"Linux-aarch64" )
install_script "Miniconda3-py39_25.9.1-3-Linux-aarch64" "https://repo.anaconda.com/miniconda/Miniconda3-py39_25.9.1-3-Linux-aarch64.sh#2cf395401906b6968cfd2bc5b522ad4dca40374987e790c4daa83f049d132841" "miniconda" verify_py39

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

View File

@ -1,27 +0,0 @@
From 3fec519d6b326918f39ceb142ef762042ce8365f Mon Sep 17 00:00:00 2001
From: Ivan Pozdeev <vano@mail.mipt.ru>
Date: Fri, 26 Dec 2025 13:39:21 +0300
Subject: [PATCH] Recognize an argument to -j in MAKEFLAGS
---
setup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index ad8fb81b218..5666deaf67b 100644
--- a/setup.py
+++ b/setup.py
@@ -307,8 +307,8 @@ def __init__(self, dist):
self.failed_on_import = []
self.missing = []
self.disabled_configure = []
- if '-j' in os.environ.get('MAKEFLAGS', ''):
- self.parallel = True
+ if (m:=re.search(r'(?:^|\s)(?:-j|--jobs)(?:\s+|=)?(\d*)',os.environ.get('MAKEFLAGS', ''))) is not None:
+ self.parallel = int(m.group(1)) if m.group(1) else True
def add(self, ext):
self.extensions.append(ext)
--
2.36.1.windows.1

Some files were not shown because too many files have changed in this diff Show More