add venv management
This commit is contained in:
parent
fe5bd7eb5b
commit
92f2082d88
151
src/pycage/venv.py
Normal file
151
src/pycage/venv.py
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
|
from pycage.helpers import get_interpreter
|
||||||
|
|
||||||
|
|
||||||
|
@click.group(help="manage virtual environment with downloaded standalone images")
|
||||||
|
def venv() -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@click.command(help="upgrade internal seeder packages for virtualenv")
|
||||||
|
def upgrade_seeders() -> None:
|
||||||
|
cmd: list[str] = [
|
||||||
|
sys.executable,
|
||||||
|
"-m",
|
||||||
|
"virtualenv",
|
||||||
|
"--upgrade-embed-wheels",
|
||||||
|
]
|
||||||
|
subprocess.run(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
@click.command(help="create virtual environments")
|
||||||
|
@click.option("-n", "--name", default=".venv", help="how the VENV folder schould be named")
|
||||||
|
@click.option(
|
||||||
|
"--clear", is_flag=True, default=False, help="clear VENV folder before creation"
|
||||||
|
)
|
||||||
|
def create(
|
||||||
|
name: str,
|
||||||
|
clear: bool,
|
||||||
|
) -> None:
|
||||||
|
try:
|
||||||
|
pth_intp = get_interpreter()
|
||||||
|
except RuntimeError:
|
||||||
|
click.echo("Base interpreter path could not be found", err=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
pth_venv = pth_intp.parent / name
|
||||||
|
cmd: list[str] = [
|
||||||
|
sys.executable,
|
||||||
|
"-m",
|
||||||
|
"virtualenv",
|
||||||
|
str(pth_venv),
|
||||||
|
"-p",
|
||||||
|
str(pth_intp),
|
||||||
|
"--always-copy",
|
||||||
|
"--no-setuptools",
|
||||||
|
"--no-periodic-update",
|
||||||
|
]
|
||||||
|
if clear:
|
||||||
|
cmd.append("--clear")
|
||||||
|
|
||||||
|
subprocess.run(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
def add_pkg(
|
||||||
|
interpreter: Path,
|
||||||
|
package: str,
|
||||||
|
index: str | None = None,
|
||||||
|
extra_index: str | None = None,
|
||||||
|
) -> None:
|
||||||
|
cmd: list[str] = [
|
||||||
|
str(interpreter),
|
||||||
|
"-m",
|
||||||
|
"pip",
|
||||||
|
"install",
|
||||||
|
"-U",
|
||||||
|
package,
|
||||||
|
]
|
||||||
|
if index is not None:
|
||||||
|
add_opts = ["--index-url", index]
|
||||||
|
cmd.extend(add_opts)
|
||||||
|
if extra_index is not None:
|
||||||
|
add_opts = ["--extra-index-url", extra_index]
|
||||||
|
cmd.extend(add_opts)
|
||||||
|
|
||||||
|
subprocess.run(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
@click.command(help="install packages directly into the virtual environment")
|
||||||
|
@click.option(
|
||||||
|
"-e", "--extra-index", default=None, help="extra index to lookup packages at by pip"
|
||||||
|
)
|
||||||
|
@click.option("-i", "--index", default=None, help="index to lookup packages at by pip")
|
||||||
|
@click.argument("package")
|
||||||
|
def add(
|
||||||
|
package: str,
|
||||||
|
index: str | None,
|
||||||
|
extra_index: str | None,
|
||||||
|
) -> None:
|
||||||
|
try:
|
||||||
|
pth_intp = get_interpreter()
|
||||||
|
except RuntimeError:
|
||||||
|
click.echo("Base interpreter path could not be found", err=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
add_pkg(
|
||||||
|
interpreter=pth_intp,
|
||||||
|
package=package,
|
||||||
|
index=index,
|
||||||
|
extra_index=extra_index,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@click.command(help="upgrades the integrated pip installation")
|
||||||
|
def upgrade_pip() -> None:
|
||||||
|
try:
|
||||||
|
pth_intp = get_interpreter()
|
||||||
|
except RuntimeError:
|
||||||
|
click.echo("Base interpreter path could not be found", err=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
add_pkg(
|
||||||
|
interpreter=pth_intp,
|
||||||
|
package="pip",
|
||||||
|
index=None,
|
||||||
|
extra_index=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@click.command(help="uninstall packages directly from the virtual environment")
|
||||||
|
@click.argument("package")
|
||||||
|
def remove(
|
||||||
|
package: str,
|
||||||
|
) -> None:
|
||||||
|
try:
|
||||||
|
pth_intp = get_interpreter()
|
||||||
|
except RuntimeError:
|
||||||
|
click.echo("Base interpreter path could not be found", err=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
cmd: list[str] = [
|
||||||
|
str(pth_intp),
|
||||||
|
"-m",
|
||||||
|
"pip",
|
||||||
|
"uninstall",
|
||||||
|
package,
|
||||||
|
]
|
||||||
|
subprocess.run(cmd)
|
||||||
|
|
||||||
|
|
||||||
|
venv.add_command(create)
|
||||||
|
venv.add_command(add)
|
||||||
|
venv.add_command(upgrade_pip)
|
||||||
|
venv.add_command(remove)
|
||||||
|
venv.add_command(upgrade_seeders)
|
||||||
Loading…
x
Reference in New Issue
Block a user