mirror of
				https://github.com/astral-sh/uv.git
				synced 2025-11-04 05:34:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
"""Install `pylint` and `numpy` into an embedded Python."""
 | 
						|
 | 
						|
import argparse
 | 
						|
import logging
 | 
						|
import os
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
import tempfile
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
 | 
						|
 | 
						|
    parser = argparse.ArgumentParser(
 | 
						|
        description="Check an embedded Python interpreter."
 | 
						|
    )
 | 
						|
    parser.add_argument("--uv", help="Path to a uv binary.")
 | 
						|
    args = parser.parse_args()
 | 
						|
 | 
						|
    uv: str = os.path.abspath(args.uv) if args.uv else "uv"
 | 
						|
 | 
						|
    # Create a temporary directory.
 | 
						|
    with tempfile.TemporaryDirectory() as temp_dir:
 | 
						|
        # Create a virtual environment with `uv`.
 | 
						|
        logging.info("Creating virtual environment with `uv`...")
 | 
						|
        subprocess.run(
 | 
						|
            [uv, "venv", ".venv", "--seed", "--python", sys.executable],
 | 
						|
            cwd=temp_dir,
 | 
						|
            check=True,
 | 
						|
        )
 | 
						|
 | 
						|
        if os.name == "nt":
 | 
						|
            executable = os.path.join(temp_dir, ".venv", "Scripts", "python.exe")
 | 
						|
        else:
 | 
						|
            executable = os.path.join(temp_dir, ".venv", "bin", "python")
 | 
						|
 | 
						|
        logging.info("Querying virtual environment...")
 | 
						|
        subprocess.run(
 | 
						|
            [executable, "--version"],
 | 
						|
            cwd=temp_dir,
 | 
						|
            check=True,
 | 
						|
        )
 | 
						|
 | 
						|
        logging.info("Installing into `uv` virtual environment...")
 | 
						|
 | 
						|
        # Disable the `CONDA_PREFIX` and `VIRTUAL_ENV` environment variables, so that
 | 
						|
        # we only rely on virtual environment discovery via the `.venv` directory.
 | 
						|
        # Our "system Python" here might itself be a Conda environment!
 | 
						|
        env = os.environ.copy()
 | 
						|
        env["CONDA_PREFIX"] = ""
 | 
						|
        env["VIRTUAL_ENV"] = ""
 | 
						|
 | 
						|
        # Install, verify, and uninstall a few packages.
 | 
						|
        for package in ["pylint", "numpy"]:
 | 
						|
            # Install the package.
 | 
						|
            logging.info(
 | 
						|
                f"Installing the package `{package}` into the virtual environment..."
 | 
						|
            )
 | 
						|
            subprocess.run(
 | 
						|
                [uv, "pip", "install", package, "--verbose"],
 | 
						|
                cwd=temp_dir,
 | 
						|
                check=True,
 | 
						|
                env=env,
 | 
						|
            )
 | 
						|
 | 
						|
            # Ensure that the package is installed in the virtual environment.
 | 
						|
            logging.info(f"Checking that `{package}` is installed.")
 | 
						|
            code = subprocess.run(
 | 
						|
                [executable, "-c", f"import {package}"],
 | 
						|
                cwd=temp_dir,
 | 
						|
            )
 | 
						|
            if code.returncode != 0:
 | 
						|
                raise Exception(
 | 
						|
                    f"The package `{package}` isn't installed in the virtual environment."
 | 
						|
                )
 | 
						|
 | 
						|
            # Uninstall the package.
 | 
						|
            logging.info(f"Uninstalling the package `{package}`.")
 | 
						|
            subprocess.run(
 | 
						|
                [uv, "pip", "uninstall", package, "--verbose"],
 | 
						|
                cwd=temp_dir,
 | 
						|
                check=True,
 | 
						|
                env=env,
 | 
						|
            )
 | 
						|
 | 
						|
            # Ensure that the package isn't installed in the virtual environment.
 | 
						|
            logging.info(f"Checking that `{package}` isn't installed.")
 | 
						|
            code = subprocess.run(
 | 
						|
                [executable, "-m", "pip", "show", package],
 | 
						|
                cwd=temp_dir,
 | 
						|
            )
 | 
						|
            if code.returncode == 0:
 | 
						|
                raise Exception(
 | 
						|
                    f"The package `{package}` is installed in the virtual environment (but shouldn't be)."
 | 
						|
                )
 |