Revert "mach: switch to uv for managing python venv (#34504)" (#34548)

This reverts commit 4103421ba5.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This commit is contained in:
Mukilan Thiyagarajan 2024-12-10 09:13:50 +05:30 committed by GitHub
parent 3f69ef2303
commit 2f64dde623
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 80 additions and 100 deletions

View file

@ -1,20 +0,0 @@
name: Setup Python and uv
inputs:
skip-python-setup:
required: false
description: "Whether to skip installing python using Github's `setup-python` action"
default: false
runs:
using: "composite"
steps:
# Use the setup-python action to take advantage of the cache. uv will
# symlink to this version.
- name: Setup system python
if: ${{ inputs.skip-python-setup != 'true' }}
uses: actions/setup-python@v5
with:
python-version-file: '.python-version'
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
version: "0.5.6"

View file

@ -59,8 +59,8 @@ jobs:
uses: mozilla-actions/sccache-action@v0.0.6
- name: Install crown
run: cargo install --path support/crown
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Bootstrap Python
run: python3 -m pip install --upgrade pip virtualenv
- name: Bootstrap dependencies
run: sudo apt update && python3 ./mach bootstrap --skip-lints
- name: Set up JDK 17

View file

@ -13,10 +13,9 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Bootstrap
run: |
python3 -m pip install --upgrade pip
sudo apt update
python3 ./mach bootstrap --skip-lints
- name: Set LIBCLANG_PATH # This is needed for bindgen in mozangle.

View file

@ -31,8 +31,9 @@ jobs:
uses: mozilla-actions/sccache-action@v0.0.6
- name: Set LIBCLANG_PATH env # needed for bindgen in mozangle
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
- name: Setup Python
uses: ./.github/actions/setup-python
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Install taplo
uses: baptiste0928/cargo-install@v3
with:
@ -45,6 +46,8 @@ jobs:
locked: true
# 0.16.2 requires Rust 1.81 or newer.
version: '0.16.1'
- name: Bootstrap Python
run: python3 -m pip install --upgrade pip
- name: Bootstrap dependencies
run: |
sudo apt update

View file

@ -52,10 +52,9 @@ jobs:
path: ${{ inputs.profile }}-binary-linux
- name: unPackage binary
run: tar -xzf ${{ inputs.profile }}-binary-linux/target.tar.gz
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Bootstrap dependencies
run: |
python3 -m pip install --upgrade pip
sudo apt update
sudo apt install -qy --no-install-recommends mesa-vulkan-drivers
python3 ./mach bootstrap --skip-lints

View file

@ -139,10 +139,13 @@ jobs:
- name: Set LIBCLANG_PATH env # needed for bindgen in mozangle
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) && !inputs.upload }} # not needed on ubuntu 20.04 used for nightly
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
- name: Setup Python
uses: ./.github/actions/setup-python
- uses: actions/setup-python@v5
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
with:
skip-python-setup: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) }}
python-version: '3.10'
- name: Bootstrap Python
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
run: python3 -m pip install --upgrade pip
- name: Bootstrap dependencies
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
run: |

View file

@ -41,11 +41,15 @@ jobs:
- uses: actions/download-artifact@v4
with:
name: ${{ inputs.profile }}-binary-macos
- name: Setup Python
uses: ./.github/actions/setup-python
# Python 3.13 breaks wptrunner, so pin the version until
# web-platform-tests/wpt#48585 is fixed.
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Prep test environment
run: |
gtar -xzf target.tar.gz
python3 -m pip install --upgrade pip
python3 ./mach bootstrap --skip-lints
- name: Smoketest
run: python3 ./mach smoketest --${{ inputs.profile }}

View file

@ -77,14 +77,18 @@ jobs:
if: github.event_name == 'pull_request_target'
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Setup Python
uses: ./.github/actions/setup-python
# Python 3.13 breaks wptrunner, so pin the version until
# web-platform-tests/wpt#48585 is fixed.
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.6
- name: Install crown
run: cargo install --path support/crown
- name: Bootstrap
run: |
python3 -m pip install --upgrade pip
python3 ./mach bootstrap --skip-lints
brew install gnu-tar
- name: Build (${{ inputs.profile }})

View file

@ -20,16 +20,15 @@ jobs:
outputs:
configuration: ${{ steps.configuration.outputs.result }}
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: |
python/servo/try_parser.py
.github/actions/setup-python
.python-version
sparse-checkout-cone-mode: false
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Get Configuration
id: configuration
run: |

View file

@ -53,8 +53,8 @@ jobs:
uses: mozilla-actions/sccache-action@v0.0.6
- name: Install crown
run: cargo install --path support/crown
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Bootstrap Python
run: python3 -m pip install --upgrade pip virtualenv
- name: Bootstrap dependencies
run: sudo apt update && python3 ./mach bootstrap --skip-lints
- name: Setup OpenHarmony SDK

View file

@ -28,16 +28,10 @@ jobs:
# using the token specified here.
# See https://github.com/actions/checkout/issues/162.
token: ${{ secrets.WPT_SYNC_TOKEN }}
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Install requirements
run: |
uv venv
uv pip install -r servo/python/requirements.txt
run: pip install -r servo/python/requirements.txt
- name: Process pull request
run: |
source .venv/bin/activate
servo/python/wpt/export.py
run: servo/python/wpt/export.py
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
WPT_SYNC_TOKEN: ${{ secrets.WPT_SYNC_TOKEN }}

View file

@ -35,10 +35,9 @@ jobs:
- uses: actions/download-artifact@v4
with:
name: wpt-full-logs-linux-layout-2020
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Prep environment
run: |
python3 -m pip install --upgrade pip
sudo apt update
python3 ./mach bootstrap
- name: Add upstream remote

View file

@ -77,15 +77,14 @@ jobs:
}
return try_string;
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- uses: actions/checkout@v4
with:
sparse-checkout: |
python/servo/try_parser.py
.github/actions/setup-python
.python-version
sparse-checkout-cone-mode: false
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Parse Labels
if: ${{ steps.try_string.outputs.result }}
id: configuration

View file

@ -32,16 +32,15 @@ jobs:
outputs:
configuration: ${{ steps.configuration.outputs.result }}
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: |
python/servo/try_parser.py
.github/actions/setup-python
.python-version
sparse-checkout-cone-mode: false
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Get Full Configuration
id: full_config
run: |

View file

@ -114,13 +114,13 @@ jobs:
choco install wixtoolset
echo "C:\\Program Files (x86)\\WiX Toolset v3.11\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- uses: actions/setup-python@v5
- name: Setup Python
uses: ./.github/actions/setup-python
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
with:
skip-python-setup: ${{ fromJSON(needs.runner-select.outputs.is-self-hosted) }}
python-version: "3.10"
- name: Bootstrap
if: ${{ ! fromJSON(needs.runner-select.outputs.is-self-hosted) }}
run: |
python -m pip install --upgrade pip
python mach fetch
python mach bootstrap-gstreamer
# For some reason WiX isn't currently on the GitHub runner path. This is a

View file

@ -1 +0,0 @@
3.12

View file

@ -17,8 +17,7 @@ For more detailed build instructions, see the Servo book under [Setting up your
### macOS
- Download and install [`python`](https://www.python.org/downloads/macos/), [Xcode](https://developer.apple.com/xcode/), and [`brew`](https://brew.sh/).
- Install `uv`: `curl -LsSf https://astral.sh/uv/install.sh | sh`
- Download and install [`python`](https://www.python.org/downloads/macos/) (version 3.10 to 3.12), [Xcode](https://developer.apple.com/xcode/), and [`brew`](https://brew.sh/).
- Install `rustup`: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`
- Restart your shell to make sure `cargo` is available
- Install the other dependencies: `./mach bootstrap`
@ -26,12 +25,11 @@ For more detailed build instructions, see the Servo book under [Setting up your
### Linux
- Install `curl` and `python`:
- Arch: `sudo pacman -S --needed curl python`
- Debian, Ubuntu: `sudo apt install curl`
- Fedora: `sudo dnf install curl python3`
- Gentoo: `sudo emerge net-misc/curl`
- Install `uv`: `curl -LsSf https://astral.sh/uv/install.sh | sh`
- Install `curl` and `python` (version 3.10 to 3.12):
- Arch: `sudo pacman -S --needed curl python python-pip`
- Debian, Ubuntu: `sudo apt install curl python3-pip python3-venv python3-setuptools`
- Fedora: `sudo dnf install curl python3 python3-pip python3-devel`
- Gentoo: `sudo emerge net-misc/curl dev-python/pip`
- Install `rustup`: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`
- Restart your shell to make sure `cargo` is available
- Install the other dependencies: `./mach bootstrap`
@ -39,7 +37,7 @@ For more detailed build instructions, see the Servo book under [Setting up your
### Windows
- Download and install [`python`](https://www.python.org/downloads/windows/), [`uv`](https://docs.astral.sh/uv/getting-started/installation/#standalone-installer), [`choco`](https://chocolatey.org/install#individual), and [`rustup`](https://win.rustup.rs/)
- Download and install [`python`](https://www.python.org/downloads/windows/) (version 3.10 to 3.12), [`choco`](https://chocolatey.org/install#individual), and [`rustup`](https://win.rustup.rs/)
- Be sure to select *Quick install via the Visual Studio Community installer*
- In the Visual Studio Installer, ensure the following components are installed:
- **Windows 10 SDK (10.0.19041.0)** (`Microsoft.VisualStudio.Component.Windows10SDK.19041`)

7
mach
View file

@ -9,9 +9,10 @@ import sys
# Destructure because version_info > max_ver is true when running the same version.
ver = (sys.version_info[0], sys.version_info[1])
min_ver = (3, 10)
if ver < min_ver:
print("mach requires at least version 3.{0} of Python. The version of Python installed in this system is {1}.{2}" \
.format(min_ver[1], ver[0], ver[1]))
max_ver = (3, 12) # WPT does not support Python 3.13. See issue #34095.
if ver < min_ver or ver > max_ver:
print("mach does not support python {0}.{1}, please install 3.{2} <= python <= 3.{3}" \
.format(ver[0], ver[1], min_ver[1], max_ver[1]))
sys.exit(1)
def main(args):

View file

@ -4,6 +4,7 @@
import hashlib
import os
import platform
import site
import subprocess
import sys
@ -92,11 +93,9 @@ def _get_virtualenv_script_dir():
def _get_virtualenv_lib_dir():
if os.name == "nt" and os.sep != "/":
return os.path.join("Lib", "site-packages")
with open(".python-version", "r") as python_version_file:
python_version = python_version_file.read().strip()
return os.path.join(
"lib",
f"python{python_version}",
f"python{sys.version_info[0]}.{sys.version_info[1]}",
"site-packages"
)
@ -132,8 +131,11 @@ def install_virtual_env_requirements(project_path: str, python: str, virtualenv_
requirements_hash = requirements_hasher.hexdigest()
if marker_hash != requirements_hash:
print(" * Upgrading pip...")
_process_exec([python, "-m", "pip", "install", "--upgrade", "pip"])
print(" * Installing Python requirements...")
_process_exec(["uv", "pip", "install",
_process_exec([python, "-m", "pip", "install", "-I",
"-r", requirements_paths[0],
"-r", requirements_paths[1],
"-r", requirements_paths[2]])
@ -142,14 +144,14 @@ def install_virtual_env_requirements(project_path: str, python: str, virtualenv_
def _activate_virtualenv(topdir):
virtualenv_path = os.path.join(topdir, ".venv")
virtualenv_path = os.path.join(topdir, "python", "_venv%d.%d" % (sys.version_info[0], sys.version_info[1]))
python = sys.executable
if os.environ.get("VIRTUAL_ENV") != virtualenv_path:
venv_script_path = os.path.join(virtualenv_path, _get_virtualenv_script_dir())
if not os.path.exists(virtualenv_path):
print(" * Setting up virtual environment...")
_process_exec(["uv", "venv"])
_process_exec([python, "-m", "venv", "--system-site-packages", virtualenv_path])
# This general approach is taken from virtualenv's `activate_this.py`.
os.environ["PATH"] = os.pathsep.join([venv_script_path, *os.environ.get("PATH", "").split(os.pathsep)])
@ -169,11 +171,6 @@ def _activate_virtualenv(topdir):
install_virtual_env_requirements(topdir, python, virtualenv_path)
# Turn off warnings about deprecated syntax in our indirect dependencies.
# TODO: Find a better approach for doing this.
import warnings
warnings.filterwarnings('ignore', category=SyntaxWarning, module=r'.*.venv')
def _ensure_case_insensitive_if_windows():
# The folder is called 'python'. By deliberately checking for it with the wrong case, we determine if the file
@ -224,6 +221,13 @@ def bootstrap(topdir):
print('Current path:', topdir)
sys.exit(1)
# Ensure we are running Python 3.10+. We put this check here so we generate a
# user-friendly error message rather than a cryptic stack trace on module import.
if sys.version_info < (3, 10):
print('Python3 (>=3.10) is required to run mach.')
print('You are running Python', platform.python_version())
sys.exit(1)
_activate_virtualenv(topdir)
def populate_context(context, key=None):

View file

@ -175,7 +175,7 @@ class MachCommands(CommandBase):
return status
@Command('clean',
description='Clean the target/ and Python virtual environment directories',
description='Clean the target/ and python/_venv[version]/ directories',
category='build')
@CommandArgument('--manifest-path',
default=None,
@ -188,7 +188,8 @@ class MachCommands(CommandBase):
def clean(self, manifest_path=None, params=[], verbose=False):
self.ensure_bootstrapped()
virtualenv_path = path.join(self.get_top_dir(), '.venv')
virtualenv_fname = '_venv%d.%d' % (sys.version_info[0], sys.version_info[1])
virtualenv_path = path.join(self.get_top_dir(), 'python', virtualenv_fname)
if path.exists(virtualenv_path):
print('Removing virtualenv directory: %s' % virtualenv_path)
shutil.rmtree(virtualenv_path)

View file

@ -117,6 +117,7 @@ directories = [
"./tests/wpt/mozilla/tests/mozilla/referrer-policy",
"./tests/wpt/mozilla/tests/webgl",
"./python/tidy/tests",
"./python/_v*",
"./python/mach",
# Generated and upstream code combined with our own. Could use cleanup
"./target",

View file

@ -84,13 +84,7 @@ stdenv.mkDerivation (androidEnvironment // {
# Build utilities
cmake dbus gcc git pkg-config which llvm perl yasm m4
# Ensure the Python version is same as the one in `.python-version` file so
# that `uv` will just symlink to the one in nix store. Otherwise `uv` will
# download a pre-built binary that won't work on nix.
# FIXME: dbus python module needs to be installed into the virtual environment.
python312
uv
(python3.withPackages (ps: with ps; [virtualenv pip dbus]))
# This pins gnumake to 4.3 since 4.4 breaks jobserver
# functionality in mozjs and causes builds to be extremely