Skip to content

Commit 25aae99

Browse files
authored
Merge pull request #4011 from abn/env/default-with-pip
env: default to enabling pip/wheels/setuptools
2 parents 16031f0 + f0408d6 commit 25aae99

File tree

12 files changed

+276
-135
lines changed

12 files changed

+276
-135
lines changed

poetry.lock

+20-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

poetry/installation/executor.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,13 @@ def _download_link(self, operation: Union[Install, Update], link: Link) -> Link:
670670
archive = self._chef.prepare(archive)
671671

672672
if package.files:
673-
archive_hash = "sha256:" + FileDependency(package.name, archive).hash()
673+
archive_hash = (
674+
"sha256:"
675+
+ FileDependency(
676+
package.name,
677+
Path(archive.path) if isinstance(archive, Link) else archive,
678+
).hash()
679+
)
674680
if archive_hash not in {f["hash"] for f in package.files}:
675681
raise RuntimeError(
676682
f"Invalid hash for {package} using archive {archive.name}"

poetry/puzzle/solver.py

+23-4
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,31 @@ def __init__(
6363
self._overrides = []
6464
self._remove_untracked = remove_untracked
6565

66+
self._preserved_package_names = None
67+
6668
@property
6769
def provider(self) -> Provider:
6870
return self._provider
6971

72+
@property
73+
def preserved_package_names(self):
74+
if self._preserved_package_names is None:
75+
self._preserved_package_names = {
76+
self._package.name,
77+
*Provider.UNSAFE_PACKAGES,
78+
}
79+
80+
deps = {package.name for package in self._locked.packages}
81+
82+
# preserve pip/setuptools/wheel when not managed by poetry, this is so
83+
# to avoid externally managed virtual environments causing unnecessary
84+
# removals.
85+
for name in {"pip", "wheel", "setuptools"}:
86+
if name not in deps:
87+
self._preserved_package_names.add(name)
88+
89+
return self._preserved_package_names
90+
7091
@contextmanager
7192
def use_environment(self, env: Env) -> None:
7293
with self.provider.use_environment(env):
@@ -190,11 +211,9 @@ def solve(self, use_latest: List[str] = None) -> List["OperationTypes"]:
190211
locked_names = {locked.name for locked in self._locked.packages}
191212

192213
for installed in self._installed.packages:
193-
if installed.name == self._package.name:
194-
continue
195-
if installed.name in Provider.UNSAFE_PACKAGES:
196-
# Never remove pip, setuptools etc.
214+
if installed.name in self.preserved_package_names:
197215
continue
216+
198217
if installed.name not in locked_names:
199218
operations.append(Uninstall(installed))
200219

0 commit comments

Comments
 (0)