mirror of
https://github.com/enpaul/tox-poetry-installer.git
synced 2024-10-29 19:47:00 +00:00
Ethan Paul
7f0aeaf539
Remove custom package compatibility checks Add checks using poetry's built in package compatibility checking using markers Update venv integration to use poetry's venv processing tools Remove unused constants
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""Funcationality for performing virtualenv installation"""
|
|
# Silence this one globally to support the internal function imports for the proxied poetry module.
|
|
# See the docstring in 'tox_poetry_installer._poetry' for more context.
|
|
# pylint: disable=import-outside-toplevel
|
|
import typing
|
|
from typing import Sequence
|
|
from typing import Set
|
|
|
|
import tox
|
|
from poetry.core.packages import Package as PoetryPackage
|
|
from tox.venv import VirtualEnv as ToxVirtualEnv
|
|
|
|
from tox_poetry_installer import constants
|
|
from tox_poetry_installer import utilities
|
|
|
|
if typing.TYPE_CHECKING:
|
|
from tox_poetry_installer import _poetry
|
|
|
|
|
|
def install(
|
|
poetry: "_poetry.Poetry", venv: ToxVirtualEnv, packages: Sequence[PoetryPackage]
|
|
):
|
|
"""Install a bunch of packages to a virtualenv
|
|
|
|
:param poetry: Poetry object the packages were sourced from
|
|
:param venv: Tox virtual environment to install the packages to
|
|
:param packages: List of packages to install to the virtual environment
|
|
"""
|
|
from tox_poetry_installer import _poetry
|
|
|
|
tox.reporter.verbosity1(
|
|
f"{constants.REPORTER_PREFIX} Installing {len(packages)} packages to environment at {venv.envconfig.envdir}"
|
|
)
|
|
|
|
pip = _poetry.PipInstaller(
|
|
env=utilities.convert_virtualenv(venv),
|
|
io=_poetry.NullIO(),
|
|
pool=poetry.pool,
|
|
)
|
|
|
|
installed: Set[PoetryPackage] = set()
|
|
|
|
for dependency in packages:
|
|
if dependency not in installed:
|
|
tox.reporter.verbosity2(
|
|
f"{constants.REPORTER_PREFIX} Installing {dependency}"
|
|
)
|
|
pip.install(dependency)
|
|
installed.add(dependency)
|
|
else:
|
|
tox.reporter.verbosity2(
|
|
f"{constants.REPORTER_PREFIX} Skipping {dependency}, already installed"
|
|
)
|