Skip to content

Commit

Permalink
pip installer: fix installed script executable
Browse files Browse the repository at this point in the history
  • Loading branch information
abn authored and kasteph committed Mar 26, 2021
1 parent 3c9ced2 commit cb14c70
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
31 changes: 22 additions & 9 deletions poetry/utils/pip.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
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


Expand All @@ -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")

Expand All @@ -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]:
Expand Down
2 changes: 1 addition & 1 deletion tests/installation/test_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ def test_execute_executes_a_batch_of_operations(
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()

Expand Down

0 comments on commit cb14c70

Please sign in to comment.