Commit cb14c70e by Arun Babu Neelicattu Committed by Steph Samson

pip installer: fix installed script executable

parent 3c9ced2e
import os
import sys
from pathlib import Path
from typing import Union
from poetry.exceptions import PoetryException
from poetry.utils.env import Env
from poetry.utils.env import EnvCommandError
from poetry.utils.env import ephemeral_environment
......@@ -14,9 +18,13 @@ def pip_install(
upgrade: bool = False,
) -> Union[int, str]:
path = Path(path) if isinstance(path, str) else path
is_wheel = path.suffix == ".whl"
args = ["install", "--prefix", str(environment.path)]
if not is_wheel:
args.insert(1, "--use-pep517")
if upgrade:
args.append("--upgrade")
......@@ -32,16 +40,21 @@ def pip_install(
args.append(str(path))
if path.is_file() and path.suffix == ".whl":
try:
return environment.run_pip(*args)
with ephemeral_environment(
executable=environment.python, pip=True, setuptools=True
) as env:
return env.run(
"pip",
*args,
)
except EnvCommandError as e:
if sys.version_info < (3, 7) and not is_wheel:
# Under certain Python3.6 installs vendored pip wheel does not contain zip-safe
# pep517 lib. In this cases we create an isolated ephemeral virtual environment.
with ephemeral_environment(
executable=environment.python, pip=True, setuptools=True
) as env:
return environment.run(
env._bin("pip"),
*args,
env={**os.environ, "PYTHONPATH": str(env.purelib)},
)
raise PoetryException(f"Failed to install {path.as_posix()}") from e
def pip_editable_install(directory: Path, environment: Env) -> Union[int, str]:
......
......@@ -137,7 +137,7 @@ Package operations: 4 installs, 1 update, 1 removal
expected = set(expected.splitlines())
output = set(io.fetch_output().splitlines())
assert expected == output
assert 4 == len(env.executed)
assert 5 == len(env.executed)
assert 0 == return_code
pip_editable_install.assert_called_once()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment