mirror of
https://github.com/pypa/pip
synced 2023-12-13 21:30:23 +01:00
The modern virtual environment structure does not allow us to enable "fake user site" while disabling the global site, so we need to do more fine-grained configuration to correctly set up test environments for each test case. With this done, we can also properly support the stdlib venv ad the test environment backend, since it basically works identically with modern virtualenv. The incompatible_with_test_venv is thus removed.
103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
"""
|
|
tests specific to uninstalling --user installs
|
|
"""
|
|
from os.path import isdir, isfile, normcase
|
|
|
|
import pytest
|
|
|
|
from tests.functional.test_install_user import _patch_dist_in_site_packages
|
|
from tests.lib import PipTestEnvironment, TestData, assert_all_changes
|
|
from tests.lib.venv import VirtualEnvironment
|
|
from tests.lib.wheel import make_wheel
|
|
|
|
|
|
@pytest.mark.usefixtures("enable_user_site")
|
|
class Tests_UninstallUserSite:
|
|
@pytest.mark.network
|
|
def test_uninstall_from_usersite(self, script: PipTestEnvironment) -> None:
|
|
"""
|
|
Test uninstall from usersite
|
|
"""
|
|
result1 = script.pip("install", "--user", "INITools==0.3")
|
|
result2 = script.pip("uninstall", "-y", "INITools")
|
|
assert_all_changes(result1, result2, [script.venv / "build", "cache"])
|
|
|
|
def test_uninstall_from_usersite_with_dist_in_global_site(
|
|
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
|
|
) -> None:
|
|
"""
|
|
Test uninstall from usersite (with same dist in global site)
|
|
"""
|
|
entry_points_txt = "[console_scripts]\nscript = pkg:func"
|
|
make_wheel(
|
|
"pkg",
|
|
"0.1",
|
|
extra_metadata_files={"entry_points.txt": entry_points_txt},
|
|
).save_to_dir(script.scratch_path)
|
|
make_wheel(
|
|
"pkg",
|
|
"0.1.1",
|
|
extra_metadata_files={"entry_points.txt": entry_points_txt},
|
|
).save_to_dir(script.scratch_path)
|
|
|
|
_patch_dist_in_site_packages(virtualenv)
|
|
|
|
script.pip(
|
|
"install",
|
|
"--no-index",
|
|
"--find-links",
|
|
script.scratch_path,
|
|
"--no-warn-script-location",
|
|
"pkg==0.1",
|
|
)
|
|
|
|
result2 = script.pip(
|
|
"install",
|
|
"--no-index",
|
|
"--find-links",
|
|
script.scratch_path,
|
|
"--no-warn-script-location",
|
|
"--user",
|
|
"pkg==0.1.1",
|
|
)
|
|
result3 = script.pip("uninstall", "-vy", "pkg")
|
|
|
|
# uninstall console is mentioning user scripts, but not global scripts
|
|
assert normcase(script.user_bin_path) in result3.stdout, str(result3)
|
|
assert normcase(script.bin_path) not in result3.stdout, str(result3)
|
|
|
|
# uninstall worked
|
|
assert_all_changes(result2, result3, [script.venv / "build", "cache"])
|
|
|
|
# site still has 0.2 (can't look in result1; have to check)
|
|
dist_info_folder = script.base_path / script.site_packages / "pkg-0.1.dist-info"
|
|
assert isdir(dist_info_folder)
|
|
|
|
def test_uninstall_editable_from_usersite(
|
|
self, script: PipTestEnvironment, data: TestData
|
|
) -> None:
|
|
"""
|
|
Test uninstall editable local user install
|
|
"""
|
|
assert script.user_site_path.exists()
|
|
|
|
# install
|
|
to_install = data.packages.joinpath("FSPkg")
|
|
result1 = script.pip("install", "--user", "-e", to_install)
|
|
egg_link = script.user_site / "FSPkg.egg-link"
|
|
result1.did_create(egg_link)
|
|
|
|
# uninstall
|
|
result2 = script.pip("uninstall", "-y", "FSPkg")
|
|
assert not isfile(script.base_path / egg_link)
|
|
|
|
assert_all_changes(
|
|
result1,
|
|
result2,
|
|
[
|
|
script.venv / "build",
|
|
"cache",
|
|
script.user_site / "easy-install.pth",
|
|
],
|
|
)
|