Compare commits

...

111 Commits

Author SHA1 Message Date
Haritha
95601e8cfd changed schedule (#348) 2025-08-05 13:37:26 -05:00
github-actions[bot]
81bbab5835 Update versions-manifest (#347)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-07-23 11:19:13 -05:00
github-actions[bot]
e3b147457c Update versions-manifest (#346)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-07-08 22:55:51 -05:00
aparnajyothi-y
26223fb20b deprecate windows-2019 (#343) 2025-07-02 12:18:34 -05:00
github-actions[bot]
7406e1d9f7 Update versions-manifest (#345)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-06-18 12:21:13 -05:00
github-actions[bot]
94c566800e Update versions-manifest (#344)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-06-12 11:00:59 -05:00
github-actions[bot]
7c0308cd7d Update versions-manifest (#342)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-06-04 12:36:07 -05:00
github-actions[bot]
bcf6ecc82e Update versions-manifest (#341)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-05-28 00:12:01 -05:00
Matthieu Darbois
2eea8c8fed chore: use windows-11-arm runner instead of custom one (#338)
This allows contributors to test on GitHub hosted Windows ARM64 runners easily now that those runners are available for free for public repositories
2025-05-27 13:36:58 -05:00
Max Schmitt
56544d4840 fix(windows): verbose output on Windows (#339) 2025-05-15 22:11:05 -05:00
github-actions[bot]
96e291c21e Update versions-manifest (#340)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-05-07 23:34:45 -05:00
Hugo van Kemenade
d5e8ad6406 Remove EOL Python code, set 3.9 as base, add 3.14 stdlib module (#317)
* Remove redundant Python 2 code

* Use Python 3.2 as base version

* Use Python 3.3 as base version

* Use Python 3.4 as base version

* Use Python 3.5 as base version

* Use Python 3.6 as base version

* Use Python 3.7 as base version

* Use Python 3.8 as base version

* Use Python 3.9 as base version

* Add annotationlib for Python 3.14

* Fix syntax error
2025-04-24 15:29:21 -05:00
aparnajyothi-y
5c01d17435 Remove Ubuntu 20.04 and Update Stable and Unstable Versions for Tests (#336)
* Remove ubuntu-20.04 and updated the stable and unstable test cases

* arch update for freethreaded

* Remove duplicate 'ubuntu-latest' from matrix OS

---------

Co-authored-by: Haritha <73516759+HarithaVattikuti@users.noreply.github.com>
2025-04-16 12:06:27 -05:00
Matthieu Darbois
bc5b4d5490 chore: use ubuntu-*-arm runners instead of custom ones (#330)
This allows contributors to test on GitHub hosted Linux ARM64 runners easily now that those runners are available for free for public repositories: https://github.blog/changelog/2025-01-16-linux-arm64-hosted-runners-now-available-for-free-in-public-repositories-public-preview/
2025-04-15 14:45:36 -05:00
github-actions[bot]
a12e3a2eaa Update versions-manifest (#337)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-04-09 11:22:45 -05:00
github-actions[bot]
5ebefacc0b Update versions-manifest (#335)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-03-17 12:17:01 -05:00
github-actions[bot]
1c10cada84 Update versions-manifest (#334)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-03-10 13:40:46 -05:00
github-actions[bot]
3854fb534e Update versions-manifest (#333)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-02-24 12:29:37 -06:00
Sam Gross
d456108e6b Support building free-threaded CPython (#319)
* Support building free-threaded CPython

Add support for Python's free threading build mode where the global
interpreter lock is disabled. The packages are marked using a suffix on
the architecture, like 'x64-freethreaded' or 'arm64-freethreaded'.

* Match '-freethreaded' in arch

* Use type 'string' instead of 'str'

* On Linux, only delete Python installations with the same architecture.

This matches the macOS behavior and allows users to install both the
free-threading and default builds at the same time.
2025-02-20 08:42:21 -06:00
github-actions[bot]
e550a75036 Update versions-manifest (#332)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-02-12 09:42:34 -06:00
github-actions[bot]
4f85d6a62f Update versions-manifest (#331)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-02-05 09:02:58 -06:00
github-actions[bot]
e5b79ff409 Update versions-manifest (#329)
Co-authored-by: Service account <no-reply@microsoft.com>
2025-01-15 09:24:57 -06:00
priya-kinthali
4cee44596d Enhance workflows: Add Ubuntu-24 Testing (#326)
* include ubuntu24 testing in workflows

* included macos-13 testing
2024-12-19 13:08:49 -06:00
github-actions[bot]
d7df8df9ba Update versions-manifest (#327)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-12-18 11:26:47 -06:00
github-actions[bot]
54c77b6778 Update versions-manifest (#325)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-12-16 10:23:58 -06:00
HarithaVattikuti
87721c9ae3 Fix tkinter issues (#324) 2024-12-12 12:49:43 -06:00
github-actions[bot]
5bbc2cab12 Update versions-manifest (#322)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-12-04 13:29:08 -06:00
github-actions[bot]
771cbab387 Update versions-manifest (#321)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-11-20 08:31:56 -06:00
aparnajyothi-y
7069021fff Update openssl 1.1 to 3 (#316)
* Update openssl to 3

* openssl update 3
2024-11-04 19:18:59 -06:00
priya-kinthali
d8ae6ee095 updated the latest versions and included macos-13 (#315) 2024-10-21 15:25:52 -05:00
github-actions[bot]
dd24c2e5e7 Update versions-manifest (#314)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-10-16 11:26:00 -05:00
github-actions[bot]
48bcef9764 Update versions-manifest (#312)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-10-08 09:52:56 -05:00
github-actions[bot]
5d096de548 Update versions-manifest (#310)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-10-07 22:28:59 -05:00
github-actions[bot]
b0ba1dbe1e Update versions-manifest (#309)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-10-03 11:32:43 -05:00
github-actions[bot]
8eb4ff3a92 Update versions-manifest (#308)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-10-02 23:40:17 -05:00
github-actions[bot]
98e79473eb Update versions-manifest (#307)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-09-30 14:52:11 -05:00
github-actions[bot]
16955773ac Update versions-manifest (#306)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-09-09 14:30:08 -05:00
github-actions[bot]
c41d908608 Update versions-manifest (#305)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-08-29 11:27:37 -05:00
aparnajyothi-y
8dd72e5592 Fix for the build failures on the self-hosted Ubuntu 24.04 arm64 runner for no restart (#304)
* Update build-python-packages.yml

* Update build-python-packages.yml

* fix for ubuntu 24.04 issue for no restart
2024-08-29 09:03:33 -05:00
github-actions[bot]
b8cfd51f65 Update versions-manifest (#303)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-08-13 23:24:55 -05:00
aparnajyothi-y
bb9054d05d Fix for the build failures on the ubuntu 24.04 runner (#302)
* Update build-python-packages.yml

* Update build-python-packages.yml
2024-08-13 14:11:29 -05:00
github-actions[bot]
c8a840c660 Update versions-manifest (#301)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-08-07 10:12:25 -05:00
github-actions[bot]
b423327e4a Update versions-manifest (#300)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-08-06 08:44:31 -05:00
aparnajyothi-y
2f8ab97baf Fix for the Codeql-analysis.yml workflow failure (#299)
* Update codeql-analysis.yml

* Update codeql-analysis.yml

* Update codeql-analysis.yml

* Update codeql-analysis.yml
2024-07-25 08:47:57 -05:00
github-actions[bot]
9d3be767fc Update versions-manifest (#298)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-07-22 08:53:23 -05:00
github-actions[bot]
80d68b2b90 Update versions-manifest (#297)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-07-17 17:08:23 -05:00
github-actions[bot]
2438e271b9 Update versions-manifest (#296)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-07-16 08:56:00 -05:00
HarithaVattikuti
3970f04eb4 Add support for Ubuntu 24 arm64 runner (#294)
* Add support for Ubuntu 24 arm64 runner

* Update macos runner
2024-07-15 16:15:55 -05:00
github-actions[bot]
57f2d897a8 Update versions-manifest (#293)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-07-01 08:35:03 -05:00
github-actions[bot]
0c9a1f7cd6 Update versions-manifest (#292)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-06-26 12:15:49 -05:00
aparnajyothi-y
0e5f00e5d0 Add windows arm64 support (#291)
* Update build-python-packages.yml

* windows arm64 support

* Update build-python-packages.yml

* Update build-python-packages.yml

* Update build-python-packages.yml

* Update build-python-packages.yml

* Update build-python-packages.yml
2024-06-25 13:14:08 -05:00
github-actions[bot]
1d2e861434 Update versions-manifest (#289)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-06-23 23:48:32 -05:00
Matthieu Darbois
d55f04f8e6 build ubuntu-22.04_arm64 on setup-actions-ubuntu-arm64-2-core (#280) 2024-06-20 08:10:34 -05:00
Priya Gupta
cb2aecd6d9 Add Support for Linux arm64 Builds (#274)
* Included ubuntu-arm64 in  Build Python package yml

* Updated builder and installer scripts

* Updated test scripts

* Modified test file

* Replaced macos-11 with macos-13

* Update build-python-packages.yml
2024-06-13 09:17:40 -05:00
github-actions[bot]
1c85886f9c Update versions-manifest (#284)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-06-11 21:40:26 -05:00
HarithaVattikuti
f14b797a5d Fix for corrupted published artifacts (#286)
* Add skippublishercheck

* Update download-artifact

* Remove skipcheck
2024-06-11 11:36:42 -05:00
HarithaVattikuti
cc396a6be6 Add skippublishercheck (#283) 2024-06-10 09:35:28 -05:00
HarithaVattikuti
1693c7defb Revert "Update versions-manifest (#281)" (#282)
This reverts commit 8108f421b7.
2024-06-10 08:28:48 -05:00
github-actions[bot]
8108f421b7 Update versions-manifest (#281)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-06-09 23:48:30 -05:00
Priya Gupta
8bbb5413e0 Update build-python-packages.yml (#279) 2024-06-09 23:03:19 -05:00
Matthieu Darbois
c990e6da95 chore: update action versions (#267)
This removes Node.js 16 deprecation warnings
2024-05-22 08:08:47 -05:00
HarithaVattikuti
521be20d1e Updated arm64 versions (#273) 2024-05-10 12:16:17 -05:00
github-actions[bot]
064829bd03 Update versions-manifest (#272)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-05-09 21:56:46 -05:00
github-actions[bot]
b77a7dee85 Update versions-manifest (#270)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-05-09 10:10:04 -05:00
Matthieu Darbois
37e7166250 fix: always reinstall pip (#271)
* fix: always reinstall pip

If the default pip version is also the latest one,
then the `pip` executable will be missing as the default pip
is installed only as `pip3`/`pip3.x`.

In order to always provide a `pip` executable, always reinstall pip.

* chore(ci): change default version to 3.12.3

Default to the latest stable version.
2024-05-09 08:58:58 -05:00
Matthieu Darbois
eb9433f569 feat: add ubuntu-24.04 (#269)
* feat: add ubuntu-24.04

* chore: drop support for Python 2.x builds
2024-05-08 08:33:12 -05:00
Matthieu Darbois
7c3d29faf2 fix: use --upgrade rather than --ignore-installed to upgrade pip (#268)
* fix: use `--upgrade` rather than `--ignore-installed` to upgrade pip

This removes left over files when upgrading pip.

* remove all installed python on macOS
2024-05-08 08:32:38 -05:00
github-actions[bot]
c03f98f186 Update versions-manifest (#266)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-04-29 09:49:41 -05:00
Matthieu Darbois
2573fc9af9 fix: use environment variable for PIP_ROOT_USER_ACTION (#265)
* fix: error out on install failure in "Apply build artifact to the local machine" step

* fix: error out on pip installation / update failure

* fix: use environment variable for `PIP_ROOT_USER_ACTION`

This extends the fix from #259 since every platform for 3.8.10 / 3.9.13 has been rebuilt instead of just macOS arm64 being added.

The regression was introduced in #223
2024-04-29 08:32:44 -05:00
github-actions[bot]
b643f0d07f Update versions-manifest (#264)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-04-25 09:25:58 -05:00
Matthieu Darbois
29394d0042 fix: use environment variable for PIP_ROOT_USER_ACTION (#259)
The option does not exists in every pip version, using the environment variable allows for pip not to fail in this case.
2024-04-24 22:44:10 -05:00
github-actions[bot]
3545308dfe Update versions-manifest (#263)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-04-10 08:55:23 -05:00
github-actions[bot]
fa96e2aca9 Update versions-manifest (#262)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-04-03 08:08:11 -05:00
github-actions[bot]
1dbece3419 Update versions-manifest (#261)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-03-20 23:04:31 -05:00
github-actions[bot]
627cd1691f Update versions-manifest (#260)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-03-12 22:55:28 -05:00
github-actions[bot]
c685daccab Update versions-manifest (#258)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-02-16 09:17:14 -06:00
HarithaVattikuti
eaf1258a7f version update (#257) 2024-02-14 11:34:20 -06:00
github-actions[bot]
9903e2d963 Update versions-manifest (#256)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-02-07 22:49:09 -06:00
github-actions[bot]
310d6e4aea Update versions-manifest (#255)
Co-authored-by: Service account <no-reply@microsoft.com>
2024-01-19 08:31:57 -06:00
github-actions[bot]
af22c2b8e4 Update versions-manifest (#251)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-12-08 10:03:33 +01:00
github-actions[bot]
e605eda13a Update versions-manifest (#250)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-12-05 17:14:53 +01:00
github-actions[bot]
96dae786ca Update versions-manifest (#249)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-11-23 16:02:00 +01:00
github-actions[bot]
e642abaef8 Update versions-manifest (#248)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-10-16 11:25:28 +02:00
Edgar Ramírez Mondragón
381057ce36 Update modules removed in Python 3.13 (#247) 2023-10-16 10:51:58 +02:00
github-actions[bot]
5da3a44cc2 Update versions-manifest (#244)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-10-03 11:05:53 +02:00
Dmitry Shibanov
3880dd814a add logic with generation hash (#246) 2023-09-22 15:04:14 +02:00
Marko Zivic
ba0b46a6a1 Merge pull request #245 from actions/deprecation-policy
Add Support Notification Policy
2023-09-20 14:01:26 +02:00
Dusan Trickovic
b81fc1cff7 Update README.md and Add Support Notification Policy 2023-09-20 12:53:45 +02:00
github-actions[bot]
f4b33352f0 Update versions-manifest (#243)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-09-19 18:28:50 +02:00
github-actions[bot]
8e2e28992d Update versions-manifest (#242)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-09-06 17:04:12 +02:00
github-actions[bot]
38c560b52f Update versions-manifest (#241)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-08-28 15:43:34 +02:00
github-actions[bot]
3dca5896d3 Update versions-manifest (#240)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-08-07 15:33:08 +02:00
Dmitry Shibanov
1d88a8f21b add apt-get update (#239) 2023-08-07 14:16:32 +02:00
github-actions[bot]
c4456b9062 Update versions-manifest (#238) 2023-07-12 11:47:06 +02:00
github-actions[bot]
9d3aa48b3c Update versions-manifest (#237) 2023-06-23 15:51:47 +02:00
Dmitry Shibanov
c1cf5de988 Fix for python 3.7.17 macOS (#236) 2023-06-23 14:39:13 +02:00
github-actions[bot]
5a451d6492 Update versions-manifest (#235) 2023-06-21 15:16:24 +02:00
github-actions[bot]
87d20c715f Update versions-manifest (#234)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-06-19 12:33:22 +02:00
github-actions[bot]
225ba42747 Update versions-manifest (#232)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-06-09 13:32:30 +02:00
Dmitry Shibanov
ab4e944c0f Add fixes for 3.7.17 (#233) 2023-06-08 15:24:29 +02:00
github-actions[bot]
7693cef346 Update versions-manifest (#228)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-05-25 16:09:27 +02:00
Dmitry Shibanov
c7573bf15e Remove tests for deprecated libraries (#229) 2023-05-24 18:52:49 +02:00
Dmitry Shibanov
80893f523f change regex for creating pr (#227) 2023-05-19 16:11:02 +02:00
Matthieu Darbois
6d04944fbd feat: build macOS arm64 packages (#214) 2023-05-17 13:58:51 +02:00
MaksimZhukov
256e6ddd57 Remove code related to Ubuntu 18.04. (#226) 2023-04-06 10:10:28 +02:00
github-actions[bot]
c6bbc68f56 Update versions-manifest (#225)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-04-06 10:10:11 +02:00
Dmitry Shibanov
b539ede4c3 add root-user-action=ignore and check for .complete file (#223) 2023-03-09 11:18:26 +01:00
github-actions[bot]
e952c806a5 Update versions-manifest (#224)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-03-08 12:24:05 +01:00
github-actions[bot]
ed7a676026 Update versions-manifest (#222)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-03-06 14:21:40 +01:00
github-actions[bot]
b8accc4e9f Update versions-manifest (#221)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-02-08 12:18:54 +01:00
github-actions[bot]
6f472a7a9e Update versions-manifest (#220)
Co-authored-by: Service account <no-reply@microsoft.com>
2023-02-07 15:33:29 +01:00
27 changed files with 7170 additions and 589 deletions

View File

@@ -1,21 +1,26 @@
name: Build Python package
run-name: Generate Python ${{ inputs.VERSION || '3.11.0' }}
run-name: Generate Python ${{ inputs.VERSION || '3.12.3' }}
on:
workflow_dispatch:
inputs:
VERSION:
description: 'Python version to build and upload'
default: '3.11.0'
default: '3.12.3'
required: true
PUBLISH_RELEASES:
description: 'Whether to publish releases'
required: true
type: boolean
default: false
THREADING_BUILD_MODES:
description: 'CPython threading build modes'
required: true
type: string
default: 'default,freethreaded'
PLATFORMS:
description: 'Platforms for execution in "os" or "os_arch" format (arch is "x64" by default)'
required: true
default: 'ubuntu-18.04,ubuntu-20.04,ubuntu-22.04,macos-11,windows-2019_x64,windows-2019_x86'
default: 'ubuntu-22.04,ubuntu-22.04_arm64,ubuntu-24.04,ubuntu-24.04_arm64,macos-13_x64,macos-14_arm64,windows-2022_x64,windows-2022_x86,windows-11_arm64'
pull_request:
paths-ignore:
- 'versions-manifest.json'
@@ -25,7 +30,7 @@ on:
- 'main'
env:
VERSION: ${{ inputs.VERSION || '3.11.0' }}
VERSION: ${{ inputs.VERSION || '3.12.3' }}
defaults:
run:
shell: pwsh
@@ -39,26 +44,37 @@ jobs:
- name: Generate execution matrix
id: generate-matrix
run: |
[String[]]$configurations = "${{ inputs.platforms || 'ubuntu-18.04,ubuntu-20.04,ubuntu-22.04,macos-11,windows-2019_x64,windows-2019_x86' }}".Split(",").Trim()
[String[]]$configurations = "${{ inputs.platforms || 'ubuntu-22.04,ubuntu-22.04_arm64,ubuntu-24.04,ubuntu-24.04_arm64,macos-13,macos-14_arm64,windows-2022_x64,windows-2022_x86,windows-11_arm64' }}".Split(",").Trim()
[String[]]$buildModes = "${{ inputs.threading_build_modes || 'default' }}".Split(",").Trim()
$matrix = @()
foreach ($configuration in $configurations) {
$parts = $configuration.Split("_")
$os = $parts[0]
$arch = if ($parts[1]) {$parts[1]} else {"x64"}
switch -wildcard ($os) {
"*ubuntu*" { $platform = $os.Replace("ubuntu","linux")}
"*macos*" { $platform = 'darwin' }
"*windows*" { $platform = 'win32' }
}
$matrix += @{
'platform' = $platform
'os' = $os
'arch' = $arch
foreach ($buildMode in $buildModes) {
$parts = $configuration.Split("_")
$os = $parts[0]
$arch = if ($parts[1]) {$parts[1]} else {"x64"}
switch -wildcard ($os) {
"*ubuntu*" { $platform = $os.Replace("ubuntu","linux"); if ($arch -eq "arm64" ) { $os = "${os}-arm" } }
"*macos*" { $platform = 'darwin' }
"*windows*" { $platform = 'win32'; if ($arch -eq "arm64" ) { $os = "${os}-arm" } }
}
if ($buildMode -eq "freethreaded") {
if ([semver]"${{ inputs.VERSION }}" -lt [semver]"3.13.0") {
continue;
}
$arch += "-freethreaded"
}
$matrix += @{
'platform' = $platform
'os' = $os
'arch' = $arch
}
}
}
echo "matrix=$($matrix | ConvertTo-Json -Compress -AsArray)" >> $env:GITHUB_OUTPUT
build_python:
needs: generate_matrix
strategy:
@@ -67,24 +83,28 @@ jobs:
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
runs-on: ${{ matrix.os }}
env:
ARTIFACT_NAME: python-${{ inputs.VERSION || '3.11.0' }}-${{ matrix.platform }}-${{ matrix.arch }}
ARTIFACT_NAME: python-${{ inputs.VERSION || '3.12.3' }}-${{ matrix.platform }}-${{ matrix.arch }}
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
submodules: true
- name: Adding Symlink
if: matrix.os == 'macos-13'
run: ln -sf /usr/local/opt/tcl-tk@8 /usr/local/opt/tcl-tk
- name: Build Python ${{ env.VERSION }}
run: |
./builders/build-python.ps1 -Version $env:VERSION `
-Platform ${{ matrix.platform }} -Architecture ${{ matrix.arch }}
- name: Publish artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.ARTIFACT_NAME }}
path: ${{ runner.temp }}/artifact
if-no-files-found: error
test_python:
needs: [generate_matrix, build_python]
@@ -94,21 +114,26 @@ jobs:
include: ${{ fromJson(needs.generate_matrix.outputs.matrix) }}
runs-on: ${{ matrix.os }}
env:
ARTIFACT_NAME: python-${{ inputs.VERSION || '3.11.0' }}-${{ matrix.platform }}-${{ matrix.arch }}
ARTIFACT_NAME: python-${{ inputs.VERSION || '3.12.3' }}-${{ matrix.platform }}-${{ matrix.arch }}
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
submodules: true
- name: Fully cleanup the toolcache directory before testing
run: ./helpers/clean-toolcache.ps1 -ToolName "Python"
- name: Delete macOS /Library/Frameworks/Python.framework
if: matrix.platform == 'darwin'
shell: bash
run: if [ -d /Library/Frameworks/Python.framework ]; then sudo rm -rf /Library/Frameworks/Python.framework; fi
- name: Download artifact
uses: actions/download-artifact@v3
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}
name: ${{ env.ARTIFACT_NAME }}
path: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
- name: Extract files
run: |
@@ -123,6 +148,7 @@ jobs:
- name: Apply build artifact to the local machine
run: |
$PSNativeCommandUseErrorActionPreference = $true
if ('${{ matrix.platform }}' -eq 'win32') {
powershell ./setup.ps1
} else {
@@ -132,11 +158,14 @@ jobs:
working-directory: ${{ runner.temp }}/${{ env.ARTIFACT_NAME }}
- name: Setup Python ${{ env.VERSION }}
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ env.VERSION }}
architecture: ${{ matrix.arch }}
- name: Python version
run: python -VVV
- name: Verbose sysconfig dump
if: runner.os == 'Linux' || runner.os == 'macOS'
run: python ./sources/python-config-output.py
@@ -150,11 +179,12 @@ jobs:
- name: Run tests
run: |
Install-Module Pester -Force -Scope CurrentUser
Install-Module Pester -Force -Scope CurrentUser -SkipPublisherCheck
Import-Module Pester
$pesterContainer = New-PesterContainer -Path './python-tests.ps1' -Data @{
Version="${{ env.VERSION }}";
Platform="${{ matrix.platform }}";
Architecture="${{ matrix.arch }}";
}
$Result = Invoke-Pester -Container $pesterContainer -PassThru
if ($Result.FailedCount -gt 0) {
@@ -169,7 +199,7 @@ jobs:
needs: test_python
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v3
- uses: actions/download-artifact@v4
- name: Publish Release ${{ env.VERSION }}
id: create_release
@@ -182,21 +212,34 @@ jobs:
body: |
Python ${{ env.VERSION }}
- name: Generate hash for packages
run: |
$childItems = Get-Childitem -Path '.'
$childItems | Foreach-Object {
$packageObj = Get-Childitem -Path $_.FullName | Select-Object -First 1
Write-Host "Package: $($packageObj.Name)"
$actualHash = (Get-FileHash -Path $packageObj.FullName -Algorithm sha256).Hash
$hashString = "$actualHash $($packageObj.Name)"
Write-Host "$hashString"
Add-Content -Path ./hashes.sha256 -Value "$hashString"
}
- name: Upload release assets
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require('fs');
for (let artifactDir of fs.readdirSync('.')) {
let artifactName = fs.readdirSync(`${artifactDir}`)[0];
let artifactName = fs.lstatSync(artifactDir).isDirectory() ? fs.readdirSync(`${artifactDir}`)[0] : artifactDir;
console.log(`Upload ${artifactName} asset`);
github.rest.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ steps.create_release.outputs.id }},
name: artifactName,
data: fs.readFileSync(`./${artifactDir}/${artifactName}`)
data: fs.lstatSync(artifactDir).isDirectory() ? fs.readFileSync(`./${artifactDir}/${artifactName}`) : fs.readFileSync(`./${artifactName}`).toString()
});
}
@@ -206,7 +249,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Trigger "Create Pull Request" workflow
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
@@ -216,4 +259,3 @@ jobs:
workflow_id: 'create-pr.yml',
ref: 'main'
});

View File

@@ -13,4 +13,5 @@ jobs:
name: CodeQL analysis
uses: actions/reusable-workflows/.github/workflows/codeql-analysis.yml@main
with:
languages: "['python']"
languages: '["python"]'

View File

@@ -1,7 +1,7 @@
name: Get Python versions
on:
schedule:
- cron: '0 3,15 * * *'
- cron: '0 0,12 * * *'
workflow_dispatch:
jobs:
@@ -10,4 +10,4 @@ jobs:
with:
tool-name: "Python"
image-url: "https://avatars.githubusercontent.com/u/1525981?s=200&v=4"
secrets: inherit
secrets: inherit

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
submodules: true

View File

@@ -14,11 +14,11 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04]
python: [3.5.4, 3.6.7, 3.7.5, 3.8.1]
os: [macos-latest, windows-latest, ubuntu-22.04, ubuntu-latest, macos-13]
python: [3.9.13, 3.10.11, 3.11.8, 3.12.7, 3.13.0]
steps:
- name: setup-python ${{ matrix.python }}
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}

View File

@@ -17,7 +17,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest, ubuntu-18.04, ubuntu-20.04]
os: [macos-latest, windows-latest, ubuntu-22.04, ubuntu-latest, macos-13]
steps:
- name: Setup Python ${{ github.event.inputs.version }}
uses: actions/setup-python@main

View File

@@ -21,5 +21,7 @@ We aim to make new versions of Python available as soon as they are released. Bo
When a new version of an operating system is released and made available for use with [GitHub hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources), we will provide the **latest existing patch versions of Python for all major versions that have not reached [end-of-life](https://devguide.python.org/versions/)**. Any subsequent Python versions will be made available for the new OS as well.
Beginning **approximately six months prior** to the removal of a Python version from the [versions-manifest.json](https://github.com/actions/python-versions/blob/main/versions-manifest.json) file, a pinned issue will be created in the [setup-python](https://github.com/actions/setup-python) repository. This pinned issue will provide important details about the upcoming end of support, including the specific date, as well as any other notes, relevant updates or alternatives. We encourage users to regularly check pinned issues for updates on tool versions they are using for maximum transparency, security, performance and overall compatibility with their projects.
## Contribution
Contributions are welcome! See [Contributor's Guide](./CONTRIBUTING.md) for more details about contribution process and code structure

View File

@@ -7,7 +7,7 @@ class macOSPythonBuilder : NixPythonBuilder {
.DESCRIPTION
Contains methods that required to build macOS Python artifact from sources. Inherited from base NixPythonBuilder.
While python.org provides precompiled binaries for macOS, switching to them risks breaking existing customers.
If we wanted to start using the official binaries instead of building from source, we should avoid changing previous versions
so we remain backwards compatible.
@@ -50,41 +50,20 @@ class macOSPythonBuilder : NixPythonBuilder {
### will never be used itself by a Github Actions runner but using a universal2 Python is the only way to build
### universal2 C extensions and wheels. This is supported by Python >= 3.10 and was backported to Python >=
### 3.9.1 and >= 3.8.10.
### Disabled, discussion: https://github.com/actions/python-versions/pull/114
# if ($this.Version -ge "3.8.10" -and $this.Version -ne "3.8.13" -and $this.Version -ne "3.9.0" ) {
# $configureString += " --enable-universalsdk --with-universal-archs=universal2"
# }
### OS X 10.11, Apple no longer provides header files for the deprecated system version of OpenSSL.
### Solution is to install these libraries from a third-party package manager,
### and then add the appropriate paths for the header and library files to configure command.
### Link to documentation (https://cpython-devguide.readthedocs.io/setup/#build-dependencies)
if ($this.Version -lt "3.7.0") {
$env:LDFLAGS = "-L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/zlib/lib"
$env:CFLAGS = "-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/zlib/include"
} else {
$configureString += " --with-openssl=/usr/local/opt/openssl@1.1"
$configureString += " --with-openssl=/usr/local/opt/openssl@3"
$configureString += " --with-tcltk-includes='-I /usr/local/opt/tcl-tk/include/tcl-tk' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'"
# For Python 3.7.2 and 3.7.3 we need to provide PATH for zlib to pack it properly. Otherwise the build will fail
# with the error: zipimport.ZipImportError: can't decompress data; zlib not available
if ($this.Version -eq "3.7.2" -or $this.Version -eq "3.7.3") {
$env:LDFLAGS = "-L/usr/local/opt/zlib/lib"
$env:CFLAGS = "-I/usr/local/opt/zlib/include"
}
if ($this.Version -gt "3.7.12") {
$configureString += " --with-tcltk-includes='-I /usr/local/opt/tcl-tk/include' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'"
}
}
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
### Compile with support of loadable sqlite extensions.
### Link to documentation (https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.enable_load_extension)
if ($this.Version -ge "3.2.0") {
$configureString += " --enable-loadable-sqlite-extensions"
$env:LDFLAGS += " -L$(brew --prefix sqlite3)/lib"
$env:CFLAGS += " -I$(brew --prefix sqlite3)/include"
$env:CPPFLAGS += "-I$(brew --prefix sqlite3)/include"
}
$configureString += " --enable-loadable-sqlite-extensions"
$env:LDFLAGS += " -L$(brew --prefix sqlite3)/lib"
$env:CFLAGS += " -I$(brew --prefix sqlite3)/include"
$env:CPPFLAGS += "-I$(brew --prefix sqlite3)/include"
Write-Host "The passed configure options are: "
Write-Host $configureString
@@ -138,6 +117,37 @@ class macOSPythonBuilder : NixPythonBuilder {
return $pkgLocation
}
[string] GetFrameworkName() {
<#
.SYNOPSIS
Get the Python installation Package name.
#>
if ($this.IsFreeThreaded()) {
return "PythonT.framework"
} else {
return "Python.framework"
}
}
[string] GetPkgChoices() {
<#
.SYNOPSIS
Reads the configuration XML file for the Python installer
#>
$config = if ($this.IsFreeThreaded()) { "freethreaded" } else { "default" }
$choicesFile = Join-Path $PSScriptRoot "../config/macos-pkg-choices-$($config).xml"
$choicesTemplate = Get-Content -Path $choicesFile -Raw
$variablesToReplace = @{
"{{__VERSION_MAJOR_MINOR__}}" = "$($this.Version.Major).$($this.Version.Minor)";
}
$variablesToReplace.keys | ForEach-Object { $choicesTemplate = $choicesTemplate.Replace($_, $variablesToReplace[$_]) }
return $choicesTemplate
}
[void] CreateInstallationScriptPkg() {
<#
.SYNOPSIS
@@ -151,6 +161,9 @@ class macOSPythonBuilder : NixPythonBuilder {
$variablesToReplace = @{
"{{__VERSION_FULL__}}" = $this.Version;
"{{__PKG_NAME__}}" = $this.GetPkgName();
"{{__ARCH__}}" = $this.Architecture;
"{{__FRAMEWORK_NAME__}}" = $this.GetFrameworkName();
"{{__PKG_CHOICES__}}" = $this.GetPkgChoices();
}
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
@@ -166,7 +179,7 @@ class macOSPythonBuilder : NixPythonBuilder {
$PkgVersion = [semver]"3.11.0-beta.1"
if ($this.Version -ge $PkgVersion) {
if (($this.Version -ge $PkgVersion) -or ($this.Architecture -eq "arm64")) {
Write-Host "Download Python $($this.Version) [$($this.Architecture)] package..."
$this.DownloadPkg()

View File

@@ -61,8 +61,7 @@ class NixPythonBuilder : PythonBuilder {
Return name of Python binary.
#>
if ($this.Version.Major -eq 2) { $pythonBinary = "python" } else { $pythonBinary = "python3" }
return $pythonBinary
return "python3"
}
[string] Download() {
@@ -97,6 +96,7 @@ class NixPythonBuilder : PythonBuilder {
$variablesToReplace = @{
"{{__VERSION_FULL__}}" = $this.Version;
"{{__ARCH__}}" = $this.Architecture;
}
$variablesToReplace.keys | ForEach-Object { $installationTemplateContent = $installationTemplateContent.Replace($_, $variablesToReplace[$_]) }
@@ -114,7 +114,7 @@ class NixPythonBuilder : PythonBuilder {
Write-Debug "make Python $($this.Version)-$($this.Architecture) $($this.Platform)"
$buildOutputLocation = New-Item -Path $this.WorkFolderLocation -Name "build_output.txt" -ItemType File
Execute-Command -Command "make 2>&1 | tee $buildOutputLocation" -ErrorAction Continue
Execute-Command -Command "make 2>&1 | tee $buildOutputLocation" -ErrorAction Continue
Execute-Command -Command "make install" -ErrorAction Continue
Write-Debug "Done; Make log location: $buildOutputLocation"

View File

@@ -94,6 +94,24 @@ class PythonBuilder {
return "$($this.Version.Major).$($this.Version.Minor).$($this.Version.Patch)"
}
[string] GetHardwareArchitecture() {
<#
.SYNOPSIS
The hardware architecture (x64, arm64) without any Python free threading suffix.
#>
return $this.Architecture.Replace("-freethreaded", "")
}
[bool] IsFreeThreaded() {
<#
.SYNOPSIS
Check if Python version is free threaded.
#>
return $this.Architecture.EndsWith("-freethreaded")
}
[void] PreparePythonToolcacheLocation() {
<#
.SYNOPSIS

View File

@@ -37,16 +37,17 @@ class UbuntuPythonBuilder : NixPythonBuilder {
$configureString += " --enable-shared"
$configureString += " --enable-optimizations"
### Compile with ucs4 for Python 2.x. On 3.x, ucs4 is enabled by default
if ($this.Version -lt "3.0.0") {
$configureString += " --enable-unicode=ucs4"
if ($this.IsFreeThreaded()) {
if ($this.Version -lt "3.13.0") {
Write-Host "Python versions lower than 3.13.0 do not support free threading"
exit 1
}
$configureString += " --disable-gil"
}
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
### Compile with support of loadable sqlite extensions.
### Link to documentation (https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.enable_load_extension)
if ($this.Version -ge "3.2.0") {
$configureString += " --enable-loadable-sqlite-extensions"
}
$configureString += " --enable-loadable-sqlite-extensions"
Write-Host "The passed configure options are: "
Write-Host $configureString
@@ -60,18 +61,15 @@ class UbuntuPythonBuilder : NixPythonBuilder {
Prepare system environment by installing dependencies and required packages.
#>
if (($this.Version -gt "3.0.0") -and ($this.Version -lt "3.5.3")) {
Write-Host "Python3 versions lower than 3.5.3 are not supported"
if ($this.Version -lt "3.9.0") {
Write-Host "Python versions lower than 3.9.0 are not supported"
exit 1
}
### Compile with tkinter support
if ($this.Version -gt "3.0.0") {
$tkinterInstallString = "sudo apt-get install -y --allow-downgrades python3-tk tk-dev"
} else {
$tkinterInstallString = "sudo apt install -y python-tk tk-dev"
}
$tkinterInstallString = "sudo apt-get install -y --allow-downgrades python3-tk tk-dev"
Execute-Command -Command "sudo apt-get update"
Execute-Command -Command $tkinterInstallString
### Install dependent packages
@@ -84,7 +82,8 @@ class UbuntuPythonBuilder : NixPythonBuilder {
"libsqlite3-dev",
"libncursesw5-dev",
"libreadline-dev",
"libgdbm-dev"
"libgdbm-dev",
"liblzma-dev"
) | ForEach-Object {
Execute-Command -Command "sudo apt install -y $_"
}

View File

@@ -42,9 +42,7 @@ class WinPythonBuilder : PythonBuilder {
Return extension for required version of Python executable.
#>
$extension = if ($this.Version -lt "3.5" -and $this.Version -ge "2.5") { ".msi" } else { ".exe" }
return $extension
return ".exe"
}
[string] GetArchitectureExtension() {
@@ -54,12 +52,10 @@ class WinPythonBuilder : PythonBuilder {
#>
$ArchitectureExtension = ""
if ($this.Architecture -eq "x64") {
if ($this.Version -ge "3.5") {
$ArchitectureExtension = "-amd64"
} else {
$ArchitectureExtension = ".amd64"
}
if ($this.GetHardwareArchitecture() -eq "x64") {
$ArchitectureExtension = "-amd64"
} elseif ($this.GetHardwareArchitecture() -eq "arm64") {
$ArchitectureExtension = "-arm64"
}
return $ArchitectureExtension
@@ -111,6 +107,7 @@ class WinPythonBuilder : PythonBuilder {
$variablesToReplace = @{
"{{__ARCHITECTURE__}}" = $this.Architecture;
"{{__HARDWARE_ARCHITECTURE__}}" = $this.GetHardwareArchitecture();
"{{__VERSION__}}" = $this.Version;
"{{__PYTHON_EXEC_NAME__}}" = $pythonExecName
}

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
</dict>
</array>
</plist>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>attributeSetting</key>
<integer>1</integer>
<key>choiceAttribute</key>
<string>selected</string>
<key>choiceIdentifier</key>
<string>org.python.Python.PythonTFramework-{{__VERSION_MAJOR_MINOR__}}</string>
</dict>
</array>
</plist>

View File

@@ -1,5 +1,5 @@
{
"regex": "python-\\d+\\.\\d+\\.\\d+-(\\w+\\.\\d+)?-?(\\w+)-(\\d+\\.\\d+)?-?(x\\d+)",
"regex": "python-\\d+\\.\\d+\\.\\d+-(\\w+\\.\\d+)?-?(\\w+)-(\\d+\\.\\d+)?-?((x|arm)\\d+(-freethreaded)?)",
"groups": {
"arch": 4,
"platform": 2,

Submodule helpers updated: 896369fc7d...6fbb1f0f20

View File

@@ -2,6 +2,12 @@ set -e
PYTHON_FULL_VERSION="{{__VERSION_FULL__}}"
PYTHON_PKG_NAME="{{__PKG_NAME__}}"
PYTHON_FRAMEWORK_NAME="{{__FRAMEWORK_NAME__}}"
PYTHON_PKG_CHOICES=$(cat << 'EOF'
{{__PKG_CHOICES__}}
EOF
)
ARCH="{{__ARCH__}}"
MAJOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 1)
MINOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 2)
@@ -18,8 +24,8 @@ fi
PYTHON_TOOLCACHE_PATH=$TOOLCACHE_ROOT/Python
PYTHON_TOOLCACHE_VERSION_PATH=$PYTHON_TOOLCACHE_PATH/$PYTHON_FULL_VERSION
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/x64
PYTHON_FRAMEWORK_PATH="/Library/Frameworks/Python.framework/Versions/${MAJOR_VERSION}.${MINOR_VERSION}"
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/$ARCH
PYTHON_FRAMEWORK_PATH="/Library/Frameworks/${PYTHON_FRAMEWORK_NAME}/Versions/${MAJOR_VERSION}.${MINOR_VERSION}"
PYTHON_APPLICATION_PATH="/Applications/Python ${MAJOR_VERSION}.${MINOR_VERSION}"
echo "Check if Python hostedtoolcache folder exist..."
@@ -29,16 +35,19 @@ if [ ! -d $PYTHON_TOOLCACHE_PATH ]; then
else
# remove ALL other directories for same major.minor python versions
find $PYTHON_TOOLCACHE_PATH -name "${MAJOR_VERSION}.${MINOR_VERSION}.*"|while read python_version;do
python_version_x64="$python_version/x64"
if [ -e "$python_version_x64" ];then
echo "Deleting Python $python_version_x64"
rm -rf "$python_version_x64"
python_version_arch="$python_version/$ARCH"
if [ -e "$python_version_arch" ];then
echo "Deleting Python $python_version_arch"
rm -rf "$python_version_arch"
fi
done
fi
PYTHON_PKG_CHOICES_FILES=$(mktemp)
echo "$PYTHON_PKG_CHOICES" > $PYTHON_PKG_CHOICES_FILES
echo "Install Python binaries from prebuilt package"
sudo installer -pkg $PYTHON_PKG_NAME -target /
sudo installer -pkg $PYTHON_PKG_NAME -applyChoiceChangesXML $PYTHON_PKG_CHOICES_FILES -target /
echo "Create hostedtoolcach symlinks (Required for the backward compatibility)"
echo "Create Python $PYTHON_FULL_VERSION folder"
@@ -52,27 +61,34 @@ ln -s "${PYTHON_FRAMEWORK_PATH}/lib" lib
echo "Create additional symlinks (Required for the UsePythonVersion Azure Pipelines task and the setup-python GitHub Action)"
ln -s ./bin/$PYTHON_MAJOR_DOT_MINOR python
chmod +x python
# Note that bin is a symlink so referencing .. from bin will not work as expected
cd bin/
# This symlink already exists if Python version with the same major.minor version is installed,
# This symlink already exists if Python version with the same major.minor version is installed,
# since we do not remove the framework folder
if [ ! -f $PYTHON_MAJOR_MINOR ]; then
ln -s $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR
fi
if [ ! -f $PYTHON_MAJOR ]; then
ln -s $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR
fi
if [ ! -f python ]; then
ln -s $PYTHON_MAJOR_DOT_MINOR python
fi
chmod +x ../python $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR python
chmod +x $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJOR_MINOR python
echo "Upgrading pip..."
export PIP_ROOT_USER_ACTION=ignore
./python -m ensurepip
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location
./python -m pip install --upgrade --force-reinstall pip --disable-pip-version-check --no-warn-script-location
echo "Install OpenSSL certificates"
sh -e "${PYTHON_APPLICATION_PATH}/Install Certificates.command"
echo "Create complete file"
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete
touch $PYTHON_TOOLCACHE_VERSION_PATH/${ARCH}.complete

View File

@@ -1,6 +1,7 @@
set -e
PYTHON_FULL_VERSION="{{__VERSION_FULL__}}"
ARCH="{{__ARCH__}}"
MAJOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 1)
MINOR_VERSION=$(echo $PYTHON_FULL_VERSION | cut -d '.' -f 2)
@@ -17,15 +18,15 @@ fi
PYTHON_TOOLCACHE_PATH=$TOOLCACHE_ROOT/Python
PYTHON_TOOLCACHE_VERSION_PATH=$PYTHON_TOOLCACHE_PATH/$PYTHON_FULL_VERSION
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/x64
PYTHON_TOOLCACHE_VERSION_ARCH_PATH=$PYTHON_TOOLCACHE_VERSION_PATH/$ARCH
echo "Check if Python hostedtoolcache folder exist..."
if [ ! -d $PYTHON_TOOLCACHE_PATH ]; then
echo "Creating Python hostedtoolcache folder..."
mkdir -p $PYTHON_TOOLCACHE_PATH
elif [ -d $PYTHON_TOOLCACHE_VERSION_PATH ]; then
echo "Deleting Python $PYTHON_FULL_VERSION"
rm -rf $PYTHON_TOOLCACHE_VERSION_PATH
elif [ -d $PYTHON_TOOLCACHE_VERSION_ARCH_PATH ]; then
echo "Deleting Python $PYTHON_FULL_VERSION ($ARCH)"
rm -rf $PYTHON_TOOLCACHE_VERSION_ARCH_PATH
fi
echo "Create Python $PYTHON_FULL_VERSION folder"
@@ -49,8 +50,9 @@ fi
chmod +x ../python $PYTHON_MAJOR $PYTHON_MAJOR_DOT_MINOR $PYTHON_MAJORMINOR python
echo "Upgrading pip..."
export PIP_ROOT_USER_ACTION=ignore
./python -m ensurepip
./python -m pip install --ignore-installed pip --disable-pip-version-check --no-warn-script-location
./python -m pip install --upgrade --force-reinstall pip --disable-pip-version-check --no-warn-script-location
echo "Create complete file"
touch $PYTHON_TOOLCACHE_VERSION_PATH/x64.complete
touch $PYTHON_TOOLCACHE_VERSION_PATH/$ARCH.complete

View File

@@ -1,4 +1,5 @@
[String] $Architecture = "{{__ARCHITECTURE__}}"
[String] $HardwareArchitecture = "{{__HARDWARE_ARCHITECTURE__}}"
[String] $Version = "{{__VERSION__}}"
[String] $PythonExecName = "{{__PYTHON_EXEC_NAME__}}"
@@ -10,12 +11,7 @@ function Get-RegistryVersionFilter {
)
$archFilter = if ($Architecture -eq 'x86') { "32-bit" } else { "64-bit" }
### Python 2.7 x86 have no architecture postfix
if (($Architecture -eq "x86") -and ($MajorVersion -eq 2)) {
"Python $MajorVersion.$MinorVersion.\d+$"
} else {
"Python $MajorVersion.$MinorVersion.*($archFilter)"
}
"Python $MajorVersion.$MinorVersion.*($archFilter)"
}
function Remove-RegistryEntries {
@@ -25,7 +21,7 @@ function Remove-RegistryEntries {
[Parameter(Mandatory)][Int32] $MinorVersion
)
$versionFilter = Get-RegistryVersionFilter -Architecture $Architecture -MajorVersion $MajorVersion -MinorVersion $MinorVersion
$versionFilter = Get-RegistryVersionFilter -Architecture $HardwareArchitecture -MajorVersion $MajorVersion -MinorVersion $MinorVersion
$regPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
if (Test-Path -Path Registry::$regPath) {
@@ -61,13 +57,15 @@ function Remove-RegistryEntries {
function Get-ExecParams {
param(
[Parameter(Mandatory)][Boolean] $IsMSI,
[Parameter(Mandatory)][Boolean] $IsFreeThreaded,
[Parameter(Mandatory)][String] $PythonArchPath
)
if ($IsMSI) {
"TARGETDIR=$PythonArchPath ALLUSERS=1"
} else {
"DefaultAllUsersTargetDir=$PythonArchPath InstallAllUsers=1"
$Include_freethreaded = if ($IsFreeThreaded) { "Include_freethreaded=1" } else { "" }
"DefaultAllUsersTargetDir=$PythonArchPath InstallAllUsers=1 $Include_freethreaded"
}
}
@@ -81,6 +79,7 @@ $PythonVersionPath = Join-Path -Path $PythonToolcachePath -ChildPath $Version
$PythonArchPath = Join-Path -Path $PythonVersionPath -ChildPath $Architecture
$IsMSI = $PythonExecName -match "msi"
$IsFreeThreaded = $Architecture -match "-freethreaded"
$MajorVersion = $Version.Split('.')[0]
$MinorVersion = $Version.Split('.')[1]
@@ -101,7 +100,9 @@ if ($null -ne $InstalledVersions) {
if (Test-Path -Path $InstalledVersion) {
Write-Host "Deleting $InstalledVersion..."
Remove-Item -Path $InstalledVersion -Recurse -Force
Remove-Item -Path "$($InstalledVersion.Parent.FullName)/${Architecture}.complete" -Force -Verbose
if (Test-Path -Path "$($InstalledVersion.Parent.FullName)/${Architecture}.complete") {
Remove-Item -Path "$($InstalledVersion.Parent.FullName)/${Architecture}.complete" -Force -Verbose
}
}
}
} else {
@@ -118,21 +119,29 @@ Write-Host "Copy Python binaries to $PythonArchPath"
Copy-Item -Path ./$PythonExecName -Destination $PythonArchPath | Out-Null
Write-Host "Install Python $Version in $PythonToolcachePath..."
$ExecParams = Get-ExecParams -IsMSI $IsMSI -PythonArchPath $PythonArchPath
$ExecParams = Get-ExecParams -IsMSI $IsMSI -IsFreeThreaded $IsFreeThreaded -PythonArchPath $PythonArchPath
cmd.exe /c "cd $PythonArchPath && call $PythonExecName $ExecParams /quiet"
if ($LASTEXITCODE -ne 0) {
Throw "Error happened during Python installation"
}
Write-Host "Create `python3` symlink"
if ($MajorVersion -ne "2") {
New-Item -Path "$PythonArchPath\python3.exe" -ItemType SymbolicLink -Value "$PythonArchPath\python.exe"
if ($IsFreeThreaded) {
# Delete python.exe and create a symlink to free-threaded exe
Remove-Item -Path "$PythonArchPath\python.exe" -Force
New-Item -Path "$PythonArchPath\python.exe" -ItemType SymbolicLink -Value "$PythonArchPath\python${MajorVersion}.${MinorVersion}t.exe"
}
Write-Host "Create `python3` symlink"
New-Item -Path "$PythonArchPath\python3.exe" -ItemType SymbolicLink -Value "$PythonArchPath\python.exe"
Write-Host "Install and upgrade Pip"
$Env:PIP_ROOT_USER_ACTION = "ignore"
$PythonExePath = Join-Path -Path $PythonArchPath -ChildPath "python.exe"
cmd.exe /c "$PythonExePath -m ensurepip && $PythonExePath -m pip install --upgrade pip --no-warn-script-location"
cmd.exe /c "$PythonExePath -m ensurepip && $PythonExePath -m pip install --upgrade --force-reinstall pip --no-warn-script-location"
if ($LASTEXITCODE -ne 0) {
Throw "Error happened during pip installation / upgrade"
}
Write-Host "Create complete file"
New-Item -ItemType File -Path $PythonVersionPath -Name "$Architecture.complete" | Out-Null

View File

@@ -4,19 +4,33 @@ $ConfigurationFile = Join-Path $PSScriptRoot "../config/python-manifest-config.j
$Configuration = Read-ConfigurationFile -Filepath $ConfigurationFile
$stableTestCases = @(
@{ ReleaseName = "python-3.8.3-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.8.3-linux-18.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "18.04"; arch = "x64"} },
@{ ReleaseName = "python-3.8.3-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
@{ ReleaseName = "python-3.8.3-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.8.3-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} }
@{ ReleaseName = "python-3.13.0-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.13.0-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
@{ ReleaseName = "python-3.13.0-linux-22.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "22.04"; arch = "x64"} },
@{ ReleaseName = "python-3.13.0-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.13.0-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} },
@{ ReleaseName = "python-3.13.0-darwin-x64-freethreaded.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.13.0-linux-20.04-x64-freethreaded.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.13.0-linux-22.04-x64-freethreaded.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "22.04"; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.13.0-win32-x64-freethreaded.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.13.0-win32-x86-freethreaded.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86-freethreaded"} }
) | ForEach-Object { $_.Configuration = $Configuration; $_ }
$unstableTestCases = @(
@{ ReleaseName = "python-3.9.0-alpha.2-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.9.0-rc.4-linux-18.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "18.04"; arch = "x64"} },
@{ ReleaseName = "python-3.9.0-beta.2-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
@{ ReleaseName = "python-3.9.0-beta.2-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.9.0-beta.2-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} }
@{ ReleaseName = "python-3.14.0-alpha.5-darwin-x64.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.14.0-alpha.5-linux-20.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64"} },
@{ ReleaseName = "python-3.14.0-alpha.5-linux-22.04-x64.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "22.04"; arch = "x64"} },
@{ ReleaseName = "python-3.14.0-alpha.5-win32-x64.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64"} },
@{ ReleaseName = "python-3.14.0-alpha.5-win32-x86.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86"} },
@{ ReleaseName = "python-3.14.0-alpha.5-darwin-x64-freethreaded.tar.gz"; ExpectedResult = @{ platform = "darwin"; platform_version = $null; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.14.0-alpha.5-linux-20.04-x64-freethreaded.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "20.04"; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.14.0-alpha.5-linux-22.04-x64-freethreaded.tar.gz"; ExpectedResult = @{ platform = "linux"; platform_version = "22.04"; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.14.0-alpha.5-win32-x64-freethreaded.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x64-freethreaded"} },
@{ ReleaseName = "python-3.14.0-alpha.5-win32-x86-freethreaded.zip"; ExpectedResult = @{ platform = "win32"; platform_version = $null; arch = "x86-freethreaded"} }
) | ForEach-Object { $_.Configuration = $Configuration; $_ }
Describe "Python manifest config" {

View File

@@ -2,9 +2,13 @@ param (
[semver] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
$Version,
[string] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
$Platform
$Platform,
[string] [Parameter (Mandatory = $true)] [ValidateNotNullOrEmpty()]
$Architecture
)
$HardwareArchitecture = $Architecture -replace "-freethreaded", ""
Import-Module (Join-Path $PSScriptRoot "../helpers/pester-extensions.psm1")
Import-Module (Join-Path $PSScriptRoot "../helpers/common-helpers.psm1")
Import-Module (Join-Path $PSScriptRoot "../builders/python-version.psm1")
@@ -56,7 +60,7 @@ Describe "Tests" {
# }
# }
if (($Version -ge "3.2.0") -and ($Version -lt "3.11.0")) {
if (($Version -lt "3.11.0") -and (($Platform -ne "darwin") -or ($HardwareArchitecture -ne "arm64"))) {
It "Check if sqlite3 module is installed" {
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
}
@@ -80,7 +84,7 @@ Describe "Tests" {
It "Check if python configuration is correct" {
$nativeVersion = Convert-Version -version $Version
"python ./sources/python-config-test.py $Version $nativeVersion" | Should -ReturnZeroExitCode
"python ./sources/python-config-test.py $Version $nativeVersion $Architecture" | Should -ReturnZeroExitCode
}
It "Check if shared libraries are linked correctly" {
@@ -88,17 +92,11 @@ Describe "Tests" {
}
}
# Pyinstaller 3.5 does not support Python 3.8.0. Check issue https://github.com/pyinstaller/pyinstaller/issues/4311
if ($Version -lt "3.8.0" -and $Version.Major -ne "2") {
It "Validate Pyinstaller" {
"pip install pyinstaller" | Should -ReturnZeroExitCode
"pyinstaller --onefile ./sources/simple-test.py" | Should -ReturnZeroExitCode
$distPath = [IO.Path]::Combine($pwd, "dist", "simple-test")
"$distPath" | Should -ReturnZeroExitCode
}
}
It "Check urlopen with HTTPS works" {
"python ./sources/python-urlopen-https.py" | Should -ReturnZeroExitCode
}
It "Check a single dist-info per distribution is present" {
"python ./sources/dist-info.py" | Should -ReturnZeroExitCode
}
}

View File

@@ -0,0 +1,24 @@
import glob
import os.path
import sysconfig
from collections import defaultdict
def check_dist_info():
paths = set([sysconfig.get_path("purelib"), sysconfig.get_path("platlib")])
versions = defaultdict(list)
for path in paths:
pattern = os.path.join(path, "*.dist-info")
for dist_info in glob.glob(pattern):
name = os.path.basename(dist_info).split("-", maxsplit=1)[0]
versions[name].append(dist_info)
exit_code = 0
for name in versions:
if len(versions[name]) > 1:
print("multiple dist-info found for {}: {}".format(name, versions[name]))
exit_code = 1
exit(exit_code)
if __name__ == "__main__":
check_dist_info()

View File

@@ -1,6 +1,4 @@
import distutils.sysconfig
import sysconfig
from pprint import pprint
pprint(sysconfig.get_config_vars())
pprint(distutils.sysconfig.get_config_vars())

View File

@@ -1,5 +1,3 @@
import distutils.sysconfig
from distutils.version import LooseVersion
import sysconfig
import sys
import platform
@@ -9,27 +7,34 @@ import os
os_type = platform.system()
version = sys.argv[1]
nativeVersion = sys.argv[2]
architecture = sys.argv[3]
hw_architecture = architecture.replace('-freethreaded', '')
versions=version.split(".")
version_major=int(versions[0])
version_minor=int(versions[1])
pkg_installer = os_type == 'Darwin' and (version_major == 3 and version_minor >= 11)
pkg_installer = os_type == 'Darwin' and ((version_major == 3 and version_minor >= 11) or (hw_architecture == "arm64"))
lib_dir_path = sysconfig.get_config_var('LIBDIR')
ld_library_name = sysconfig.get_config_var('LDLIBRARY')
is_shared = sysconfig.get_config_var('Py_ENABLE_SHARED')
have_libreadline = sysconfig.get_config_var("HAVE_LIBREADLINE")
is_free_threaded = sysconfig.get_config_var('Py_GIL_DISABLED')
### Define expected variables
if os_type == 'Linux': expected_ld_library_extension = 'so'
if os_type == 'Darwin': expected_ld_library_extension = 'dylib'
if is_free_threaded:
framework_name = 'PythonT.framework'
else:
framework_name = 'Python.framework'
if pkg_installer:
expected_lib_dir_path = f'/Library/Frameworks/Python.framework/Versions/{version_major}.{version_minor}/lib'
expected_lib_dir_path = f'/Library/Frameworks/{framework_name}/Versions/{version_major}.{version_minor}/lib'
else:
expected_lib_dir_path = f'{os.getenv("AGENT_TOOLSDIRECTORY")}/Python/{version}/x64/lib'
expected_lib_dir_path = f'{os.getenv("AGENT_TOOLSDIRECTORY")}/Python/{version}/{architecture}/lib'
# Check modules
### Validate libraries path
@@ -40,7 +45,7 @@ if lib_dir_path != expected_lib_dir_path:
### Validate shared libraries
if is_shared:
print('%s was built with shared extensions' % ld_library_name)
### Validate libpython extension
ld_library_extension = ld_library_name.split('.')[-1]
if ld_library_extension != expected_ld_library_extension:
@@ -54,17 +59,17 @@ else:
### Validate macOS
if os_type == 'Darwin':
### Validate openssl links
if LooseVersion(nativeVersion) < LooseVersion("3.7.0"):
expected_ldflags = '-L/usr/local/opt/openssl@1.1/lib'
if version_major == 3 and version_minor < 7:
expected_ldflags = '-L/usr/local/opt/openssl@3/lib'
ldflags = sysconfig.get_config_var('LDFLAGS')
if not expected_ldflags in ldflags:
print('Invalid ldflags: %s; Expected: %s' % (ldflags, expected_ldflags))
exit(1)
else:
expected_openssl_includes = '-I/usr/local/opt/openssl@1.1/include'
expected_openssl_ldflags ='-L/usr/local/opt/openssl@1.1/lib'
expected_openssl_includes = '-I/usr/local/opt/openssl@3/include'
expected_openssl_ldflags ='-L/usr/local/opt/openssl@3/lib'
openssl_includes = sysconfig.get_config_var('OPENSSL_INCLUDES')
openssl_ldflags = sysconfig.get_config_var('OPENSSL_LDFLAGS')
@@ -81,4 +86,4 @@ if os_type == 'Darwin':
if sys.version_info < (3, 12):
if not have_libreadline:
print('Missing libreadline')
exit(1)
exit(1)

View File

@@ -3,13 +3,10 @@ Make sure all the optional modules are installed.
This is needed for Linux since we build from source.
"""
from __future__ import print_function
import importlib
import sys
import platform
# The Python standard library as of Python 3.0
# The Python standard library as of Python 3.9
standard_library = [
'abc',
'aifc',
@@ -18,6 +15,7 @@ standard_library = [
'ast',
'asynchat',
'asyncore',
'asyncio',
'base64',
'bdb',
'binhex',
@@ -35,14 +33,17 @@ standard_library = [
'collections',
'colorsys',
'compileall',
'concurrent',
'configparser',
'contextlib',
'contextvars',
'copy',
'copyreg',
'crypt',
'csv',
'ctypes',
'curses',
'dataclasses',
'datetime',
'dbm',
'decimal',
@@ -50,9 +51,11 @@ standard_library = [
'dis',
'distutils',
'doctest',
'dummy_threading',
'email',
'encodings',
'ensurepip',
'enum',
'faulthandler',
'filecmp',
'fileinput',
'fnmatch',
@@ -78,13 +81,14 @@ standard_library = [
'importlib',
'inspect',
'io',
'ipaddress',
'json',
'keyword',
'lib2to3',
'linecache',
'locale',
'logging',
'macpath',
'lzma',
'mailbox',
'mailcap',
'mimetypes',
@@ -99,6 +103,7 @@ standard_library = [
'operator',
'optparse',
'os',
'pathlib',
'pdb',
'pickle',
'pickletools',
@@ -125,6 +130,8 @@ standard_library = [
'rlcompleter',
'runpy',
'sched',
'secrets',
'selectors',
'shelve',
'shlex',
'shutil',
@@ -142,6 +149,7 @@ standard_library = [
'ssl',
'_ssl',
'stat',
'statistics',
'string',
'stringprep',
'struct',
@@ -164,14 +172,17 @@ standard_library = [
'tokenize',
'trace',
'traceback',
'tracemalloc',
'tty',
'turtle',
'turtledemo',
'types',
'typing',
'unittest',
'urllib',
'uu',
'uuid',
'venv',
'warnings',
'wave',
'weakref',
@@ -180,83 +191,12 @@ standard_library = [
'xdrlib',
'xml',
'xmlrpc',
'zipapp',
'zipfile'
]
# Modules that had different names in Python 2
if sys.version_info.major == 2:
def replace(lst, old, new):
lst[lst.index(old)] = new
# Keys are the Python 2 names
# Values are the Python 3 names
renames = {
'ConfigParser': 'configparser',
'copy_reg': 'copyreg',
'HTMLParser': 'html',
'httplib': 'http',
'Queue': 'queue',
'repr': 'reprlib',
'SocketServer': 'socketserver',
'xmlrpclib': 'xmlrpc',
'Tkinter': 'tkinter'
}
# All of the Python 3 names should be in the list
for python2name, python3name in renames.items():
replace(standard_library, python3name, python2name)
# Add new modules
# See https://docs.python.org/3/whatsnew/index.html
if sys.version_info >= (3, 2):
standard_library.extend([
'concurrent',
])
if sys.version_info >= (3, 3):
standard_library.extend([
'ipaddress',
'faulthandler',
'lzma',
'venv',
])
if sys.version_info >= (3, 4):
standard_library.extend([
'asyncio',
'ensurepip',
'enum',
'pathlib',
'selectors',
'statistics',
'tracemalloc',
])
if sys.version_info >= (3, 5):
standard_library.extend([
'typing',
'zipapp',
])
if sys.version_info >= (3, 6):
standard_library.extend([
'secrets',
])
if sys.version_info >= (3, 7):
standard_library.extend([
'contextvars',
'dataclasses',
])
# 'macpath' module has been removed from Python 3.8
if sys.version_info > (3, 7):
standard_library.remove('macpath')
# 'dummy_threading' module has been removed from Python 3.9
if sys.version_info > (3, 8):
standard_library.remove('dummy_threading')
# 'symbol' and 'formatter' modules have been removed from Python 3.10
if sys.version_info >= (3, 10):
standard_library.remove('symbol')
@@ -266,17 +206,41 @@ if sys.version_info >= (3, 10):
if sys.version_info >= (3, 11):
standard_library.remove('binhex')
# Exclude tkinter and turtle for Python 3.11 alpha temporarily
if sys.version_info >= (3, 11) and platform.system() == 'Linux' and '18.04' in platform.version():
standard_library.remove('tkinter')
standard_library.remove('turtle')
# 'smtpd', 'asyncore' and 'asynchat' modules have been removed from Python 3.12
# https://docs.python.org/dev/whatsnew/3.12.html
if sys.version_info >= (3, 12):
standard_library.remove('distutils')
standard_library.remove('imp')
standard_library.remove('smtpd')
standard_library.remove('asyncore')
standard_library.remove('asynchat')
# 'aifc', 'cgi', 'cgitb', 'chunk', 'crypt', 'imghdr', 'lib2to3', 'mailcap', 'nntplib',
# 'pipes', 'sndhdr', 'sunau', 'telnetlib', 'uu' and 'xdrlib' modules have been removed
# from Python 3.13
# https://docs.python.org/dev/whatsnew/3.13.html
if sys.version_info >= (3, 13):
standard_library.remove('aifc')
standard_library.remove('cgi')
standard_library.remove('cgitb')
standard_library.remove('chunk')
standard_library.remove('crypt')
standard_library.remove('imghdr')
standard_library.remove('lib2to3')
standard_library.remove('mailcap')
standard_library.remove('nntplib')
standard_library.remove('pipes')
standard_library.remove('sndhdr')
standard_library.remove('sunau')
standard_library.remove('telnetlib')
standard_library.remove('uu')
standard_library.remove('xdrlib')
if sys.version_info >= (3, 14):
standard_library.extend([
'annotationlib',
])
# Remove tkinter and Easter eggs
excluded_modules = [
'antigravity',

View File

@@ -1,9 +1,5 @@
import sys
if sys.version_info[0] == 2:
from urllib2 import urlopen
else:
from urllib.request import urlopen
from urllib.request import urlopen
response = urlopen("https://raw.githubusercontent.com/actions/python-versions/c641695f6a07526c18f10e374e503e649fef9427/.gitignore")
data = response.read()

File diff suppressed because it is too large Load Diff