File: install_python_versions.py

package info (click to toggle)
opm-simulators 2025.10%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,460 kB
  • sloc: cpp: 193,029; sh: 1,807; python: 1,704; lisp: 1,108; makefile: 31; awk: 10
file content (64 lines) | stat: -rwxr-xr-x 2,581 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import os
import json
import subprocess

# This script is called from the Dockerfiles, e.g. docker/test_wheels/dockerfiles/.../Dockerfile
# It is used to install the Python versions specified in docker/python_versions.json
try:
    # Use the file copied by Docker build
    config_file = "/test/python_versions.json"
    with open(config_file) as f:
        config = json.load(f)
    full_version_map = config["supported_versions"]

    # Check if specific Python versions were requested via build argument
    build_versions = os.environ.get("BUILD_PYTHON_VERSIONS")
    if build_versions:
        requested_versions = [v.strip() for v in build_versions.split(",")]
        version_map = {v: full_version_map[v] for v in requested_versions if v in full_version_map}
        print(f"📋 Using requested Python versions: {list(version_map.keys())}")

        # Validate that all requested versions are supported
        missing_versions = [v for v in requested_versions if v not in full_version_map]
        if missing_versions:
            print(f"Error: Unsupported Python version(s): {missing_versions}")
            print(f"Supported versions: {list(full_version_map.keys())}")
            exit(1)
    else:
        version_map = full_version_map
        print(f"📋 Using all Python versions from python_versions.json: {list(version_map.keys())}")

except FileNotFoundError:
    print("Error: python_versions.json not found!")
    exit(1)
except KeyError as e:
    print(f"Error: Missing key {e} in python_versions.json")
    exit(1)

# Initialize pyenv
subprocess.run('eval "$(pyenv init -)"', shell=True, executable="/bin/bash")

# Install all full versions
for short, full in version_map.items():
    print(f"Installing Python {full} (for {short})...")
    subprocess.check_call(["pyenv", "install", full])

# Set global version to latest
latest_full_version = version_map[max(version_map)]
subprocess.check_call(["pyenv", "global", latest_full_version])
subprocess.run("pyenv rehash", shell=True)

# Create the version map file that entrypoint.py expects
version_map_output = "/test/common/python_version_map.json"
try:
    # Ensure the directory exists
    os.makedirs(os.path.dirname(version_map_output), exist_ok=True)

    # Write the version map to the expected location
    with open(version_map_output, "w") as f:
        json.dump(version_map, f, indent=2)
    print(f"Created version map file at {version_map_output}")
except Exception as e:
    print(f"Warning: Could not create version map file: {e}")

print("Python versions installed and pyenv configured.")