mirror of
https://github.com/actions/python-versions.git
synced 2025-12-12 13:43:56 +00:00
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
This commit is contained in:
committed by
GitHub
parent
5c01d17435
commit
d5e8ad6406
@@ -31,14 +31,6 @@ class macOSPythonBuilder : NixPythonBuilder {
|
|||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
Prepare system environment by installing dependencies and required packages.
|
Prepare system environment by installing dependencies and required packages.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
if ($this.Version -eq "3.7.17") {
|
|
||||||
# We have preinstalled ncurses and readLine on the hoster runners. But we need to install bzip2 for
|
|
||||||
# setting up an environemnt
|
|
||||||
# If we get any issues realted to ncurses or readline we can try to run this command
|
|
||||||
# brew install ncurses readline
|
|
||||||
Execute-Command -Command "brew install bzip2"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[void] Configure() {
|
[void] Configure() {
|
||||||
@@ -58,46 +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
|
### 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 >=
|
### universal2 C extensions and wheels. This is supported by Python >= 3.10 and was backported to Python >=
|
||||||
### 3.9.1 and >= 3.8.10.
|
### 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.
|
### 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,
|
### 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.
|
### 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)
|
### Link to documentation (https://cpython-devguide.readthedocs.io/setup/#build-dependencies)
|
||||||
if ($this.Version -lt "3.7.0") {
|
$configureString += " --with-openssl=/usr/local/opt/openssl@3"
|
||||||
$env:LDFLAGS = "-L/usr/local/opt/openssl@3/lib -L/usr/local/opt/zlib/lib"
|
$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'"
|
||||||
$env:CFLAGS = "-I/usr/local/opt/openssl@3/include -I/usr/local/opt/zlib/include"
|
|
||||||
} else {
|
|
||||||
$configureString += " --with-openssl=/usr/local/opt/openssl@3"
|
|
||||||
|
|
||||||
# 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
|
### Compile with support of loadable sqlite extensions.
|
||||||
# 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" -or $this.Version -eq "3.7.17") {
|
|
||||||
$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/tcl-tk' --with-tcltk-libs='-L/usr/local/opt/tcl-tk/lib -ltcl8.6 -ltk8.6'"
|
|
||||||
# }
|
|
||||||
|
|
||||||
if ($this.Version -eq "3.7.17") {
|
|
||||||
$env:LDFLAGS += " -L$(brew --prefix bzip2)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix ncurses)/lib"
|
|
||||||
$env:CFLAGS += " -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(brew --prefix ncurses)/include"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
### Compile with support of loadable sqlite extensions. Unavailable for Python 2.*
|
|
||||||
### Link to documentation (https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.enable_load_extension)
|
### 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"
|
$env:LDFLAGS += " -L$(brew --prefix sqlite3)/lib"
|
||||||
$env:LDFLAGS += " -L$(brew --prefix sqlite3)/lib"
|
$env:CFLAGS += " -I$(brew --prefix sqlite3)/include"
|
||||||
$env:CFLAGS += " -I$(brew --prefix sqlite3)/include"
|
$env:CPPFLAGS += "-I$(brew --prefix sqlite3)/include"
|
||||||
$env:CPPFLAGS += "-I$(brew --prefix sqlite3)/include"
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "The passed configure options are: "
|
Write-Host "The passed configure options are: "
|
||||||
Write-Host $configureString
|
Write-Host $configureString
|
||||||
|
|||||||
@@ -61,8 +61,7 @@ class NixPythonBuilder : PythonBuilder {
|
|||||||
Return name of Python binary.
|
Return name of Python binary.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
if ($this.Version.Major -eq 2) { $pythonBinary = "python" } else { $pythonBinary = "python3" }
|
return "python3"
|
||||||
return $pythonBinary
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[string] Download() {
|
[string] Download() {
|
||||||
|
|||||||
@@ -61,8 +61,8 @@ class UbuntuPythonBuilder : NixPythonBuilder {
|
|||||||
Prepare system environment by installing dependencies and required packages.
|
Prepare system environment by installing dependencies and required packages.
|
||||||
#>
|
#>
|
||||||
|
|
||||||
if ($this.Version -lt "3.5.3") {
|
if ($this.Version -lt "3.9.0") {
|
||||||
Write-Host "Python versions lower than 3.5.3 are not supported"
|
Write-Host "Python versions lower than 3.9.0 are not supported"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,9 +42,7 @@ class WinPythonBuilder : PythonBuilder {
|
|||||||
Return extension for required version of Python executable.
|
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 ".exe"
|
||||||
|
|
||||||
return $extension
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[string] GetArchitectureExtension() {
|
[string] GetArchitectureExtension() {
|
||||||
@@ -55,11 +53,7 @@ class WinPythonBuilder : PythonBuilder {
|
|||||||
|
|
||||||
$ArchitectureExtension = ""
|
$ArchitectureExtension = ""
|
||||||
if ($this.GetHardwareArchitecture() -eq "x64") {
|
if ($this.GetHardwareArchitecture() -eq "x64") {
|
||||||
if ($this.Version -ge "3.5") {
|
$ArchitectureExtension = "-amd64"
|
||||||
$ArchitectureExtension = "-amd64"
|
|
||||||
} else {
|
|
||||||
$ArchitectureExtension = ".amd64"
|
|
||||||
}
|
|
||||||
} elseif ($this.GetHardwareArchitecture() -eq "arm64") {
|
} elseif ($this.GetHardwareArchitecture() -eq "arm64") {
|
||||||
$ArchitectureExtension = "-arm64"
|
$ArchitectureExtension = "-arm64"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,12 +11,7 @@ function Get-RegistryVersionFilter {
|
|||||||
)
|
)
|
||||||
|
|
||||||
$archFilter = if ($Architecture -eq 'x86') { "32-bit" } else { "64-bit" }
|
$archFilter = if ($Architecture -eq 'x86') { "32-bit" } else { "64-bit" }
|
||||||
### Python 2.7 x86 have no architecture postfix
|
"Python $MajorVersion.$MinorVersion.*($archFilter)"
|
||||||
if (($Architecture -eq "x86") -and ($MajorVersion -eq 2)) {
|
|
||||||
"Python $MajorVersion.$MinorVersion.\d+$"
|
|
||||||
} else {
|
|
||||||
"Python $MajorVersion.$MinorVersion.*($archFilter)"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Remove-RegistryEntries {
|
function Remove-RegistryEntries {
|
||||||
@@ -143,9 +138,7 @@ if ($IsFreeThreaded) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Create `python3` symlink"
|
Write-Host "Create `python3` symlink"
|
||||||
if ($MajorVersion -ne "2") {
|
New-Item -Path "$PythonArchPath\python3.exe" -ItemType SymbolicLink -Value "$PythonArchPath\python.exe"
|
||||||
New-Item -Path "$PythonArchPath\python3.exe" -ItemType SymbolicLink -Value "$PythonArchPath\python.exe"
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "Install and upgrade Pip"
|
Write-Host "Install and upgrade Pip"
|
||||||
$Env:PIP_ROOT_USER_ACTION = "ignore"
|
$Env:PIP_ROOT_USER_ACTION = "ignore"
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ Describe "Tests" {
|
|||||||
# }
|
# }
|
||||||
# }
|
# }
|
||||||
|
|
||||||
if (($Version -ge "3.2.0") -and ($Version -lt "3.11.0") -and (($Platform -ne "darwin") -or ($HardwareArchitecture -ne "arm64"))) {
|
if (($Version -lt "3.11.0") -and (($Platform -ne "darwin") -or ($HardwareArchitecture -ne "arm64"))) {
|
||||||
It "Check if sqlite3 module is installed" {
|
It "Check if sqlite3 module is installed" {
|
||||||
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
|
"python ./sources/python-sqlite3.py" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
@@ -92,16 +92,6 @@ 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" {
|
It "Check urlopen with HTTPS works" {
|
||||||
"python ./sources/python-urlopen-https.py" | Should -ReturnZeroExitCode
|
"python ./sources/python-urlopen-https.py" | Should -ReturnZeroExitCode
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,10 @@ Make sure all the optional modules are installed.
|
|||||||
This is needed for Linux since we build from source.
|
This is needed for Linux since we build from source.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import importlib
|
import importlib
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# The Python standard library as of Python 3.0
|
# The Python standard library as of Python 3.9
|
||||||
standard_library = [
|
standard_library = [
|
||||||
'abc',
|
'abc',
|
||||||
'aifc',
|
'aifc',
|
||||||
@@ -17,6 +15,7 @@ standard_library = [
|
|||||||
'ast',
|
'ast',
|
||||||
'asynchat',
|
'asynchat',
|
||||||
'asyncore',
|
'asyncore',
|
||||||
|
'asyncio',
|
||||||
'base64',
|
'base64',
|
||||||
'bdb',
|
'bdb',
|
||||||
'binhex',
|
'binhex',
|
||||||
@@ -34,14 +33,17 @@ standard_library = [
|
|||||||
'collections',
|
'collections',
|
||||||
'colorsys',
|
'colorsys',
|
||||||
'compileall',
|
'compileall',
|
||||||
|
'concurrent',
|
||||||
'configparser',
|
'configparser',
|
||||||
'contextlib',
|
'contextlib',
|
||||||
|
'contextvars',
|
||||||
'copy',
|
'copy',
|
||||||
'copyreg',
|
'copyreg',
|
||||||
'crypt',
|
'crypt',
|
||||||
'csv',
|
'csv',
|
||||||
'ctypes',
|
'ctypes',
|
||||||
'curses',
|
'curses',
|
||||||
|
'dataclasses',
|
||||||
'datetime',
|
'datetime',
|
||||||
'dbm',
|
'dbm',
|
||||||
'decimal',
|
'decimal',
|
||||||
@@ -49,9 +51,11 @@ standard_library = [
|
|||||||
'dis',
|
'dis',
|
||||||
'distutils',
|
'distutils',
|
||||||
'doctest',
|
'doctest',
|
||||||
'dummy_threading',
|
|
||||||
'email',
|
'email',
|
||||||
'encodings',
|
'encodings',
|
||||||
|
'ensurepip',
|
||||||
|
'enum',
|
||||||
|
'faulthandler',
|
||||||
'filecmp',
|
'filecmp',
|
||||||
'fileinput',
|
'fileinput',
|
||||||
'fnmatch',
|
'fnmatch',
|
||||||
@@ -77,13 +81,14 @@ standard_library = [
|
|||||||
'importlib',
|
'importlib',
|
||||||
'inspect',
|
'inspect',
|
||||||
'io',
|
'io',
|
||||||
|
'ipaddress',
|
||||||
'json',
|
'json',
|
||||||
'keyword',
|
'keyword',
|
||||||
'lib2to3',
|
'lib2to3',
|
||||||
'linecache',
|
'linecache',
|
||||||
'locale',
|
'locale',
|
||||||
'logging',
|
'logging',
|
||||||
'macpath',
|
'lzma',
|
||||||
'mailbox',
|
'mailbox',
|
||||||
'mailcap',
|
'mailcap',
|
||||||
'mimetypes',
|
'mimetypes',
|
||||||
@@ -98,6 +103,7 @@ standard_library = [
|
|||||||
'operator',
|
'operator',
|
||||||
'optparse',
|
'optparse',
|
||||||
'os',
|
'os',
|
||||||
|
'pathlib',
|
||||||
'pdb',
|
'pdb',
|
||||||
'pickle',
|
'pickle',
|
||||||
'pickletools',
|
'pickletools',
|
||||||
@@ -124,6 +130,8 @@ standard_library = [
|
|||||||
'rlcompleter',
|
'rlcompleter',
|
||||||
'runpy',
|
'runpy',
|
||||||
'sched',
|
'sched',
|
||||||
|
'secrets',
|
||||||
|
'selectors',
|
||||||
'shelve',
|
'shelve',
|
||||||
'shlex',
|
'shlex',
|
||||||
'shutil',
|
'shutil',
|
||||||
@@ -141,6 +149,7 @@ standard_library = [
|
|||||||
'ssl',
|
'ssl',
|
||||||
'_ssl',
|
'_ssl',
|
||||||
'stat',
|
'stat',
|
||||||
|
'statistics',
|
||||||
'string',
|
'string',
|
||||||
'stringprep',
|
'stringprep',
|
||||||
'struct',
|
'struct',
|
||||||
@@ -163,14 +172,17 @@ standard_library = [
|
|||||||
'tokenize',
|
'tokenize',
|
||||||
'trace',
|
'trace',
|
||||||
'traceback',
|
'traceback',
|
||||||
|
'tracemalloc',
|
||||||
'tty',
|
'tty',
|
||||||
'turtle',
|
'turtle',
|
||||||
'turtledemo',
|
'turtledemo',
|
||||||
'types',
|
'types',
|
||||||
|
'typing',
|
||||||
'unittest',
|
'unittest',
|
||||||
'urllib',
|
'urllib',
|
||||||
'uu',
|
'uu',
|
||||||
'uuid',
|
'uuid',
|
||||||
|
'venv',
|
||||||
'warnings',
|
'warnings',
|
||||||
'wave',
|
'wave',
|
||||||
'weakref',
|
'weakref',
|
||||||
@@ -179,83 +191,12 @@ standard_library = [
|
|||||||
'xdrlib',
|
'xdrlib',
|
||||||
'xml',
|
'xml',
|
||||||
'xmlrpc',
|
'xmlrpc',
|
||||||
|
'zipapp',
|
||||||
'zipfile'
|
'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
|
# Add new modules
|
||||||
# See https://docs.python.org/3/whatsnew/index.html
|
# 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
|
# 'symbol' and 'formatter' modules have been removed from Python 3.10
|
||||||
if sys.version_info >= (3, 10):
|
if sys.version_info >= (3, 10):
|
||||||
standard_library.remove('symbol')
|
standard_library.remove('symbol')
|
||||||
@@ -295,6 +236,11 @@ if sys.version_info >= (3, 13):
|
|||||||
standard_library.remove('uu')
|
standard_library.remove('uu')
|
||||||
standard_library.remove('xdrlib')
|
standard_library.remove('xdrlib')
|
||||||
|
|
||||||
|
if sys.version_info >= (3, 14):
|
||||||
|
standard_library.extend([
|
||||||
|
'annotationlib',
|
||||||
|
])
|
||||||
|
|
||||||
# Remove tkinter and Easter eggs
|
# Remove tkinter and Easter eggs
|
||||||
excluded_modules = [
|
excluded_modules = [
|
||||||
'antigravity',
|
'antigravity',
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
import sys
|
import sys
|
||||||
|
from urllib.request import urlopen
|
||||||
if sys.version_info[0] == 2:
|
|
||||||
from urllib2 import urlopen
|
|
||||||
else:
|
|
||||||
from urllib.request import urlopen
|
|
||||||
|
|
||||||
response = urlopen("https://raw.githubusercontent.com/actions/python-versions/c641695f6a07526c18f10e374e503e649fef9427/.gitignore")
|
response = urlopen("https://raw.githubusercontent.com/actions/python-versions/c641695f6a07526c18f10e374e503e649fef9427/.gitignore")
|
||||||
data = response.read()
|
data = response.read()
|
||||||
|
|||||||
Reference in New Issue
Block a user