Skip to content

Commit 714ff65

Browse files
committed
Respect --skip-lock option for uninstall
- Fixes #2848 Signed-off-by: Dan Ryan <dan@danryan.co>
1 parent 785f2be commit 714ff65

File tree

4 files changed

+33
-9
lines changed

4 files changed

+33
-9
lines changed

news/2848.bugfix.rst

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Updated ``pipenv uninstall`` to respect the ``--skip-lock`` argument.

pipenv/cli/command.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ def install(
253253

254254

255255
@cli.command(short_help="Un-installs a provided package and removes it from Pipfile.")
256-
@option("--lock", is_flag=True, default=True, help="Lock afterwards.")
256+
@option("--skip-lock/--lock", is_flag=True, default=False, help="Lock afterwards.")
257257
@option(
258258
"--all-dev",
259259
is_flag=True,
@@ -272,7 +272,7 @@ def install(
272272
def uninstall(
273273
ctx,
274274
state,
275-
lock=False,
275+
skip_lock=False,
276276
all_dev=False,
277277
all=False,
278278
**kwargs
@@ -286,7 +286,7 @@ def uninstall(
286286
three=state.three,
287287
python=state.python,
288288
system=state.system,
289-
lock=lock,
289+
lock=not skip_lock,
290290
all_dev=all_dev,
291291
all=all,
292292
keep_outdated=state.installstate.keep_outdated,

pipenv/cli/options.py

+1
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,7 @@ def uninstall_options(f):
353353
def lock_options(f):
354354
f = install_base_options(f)
355355
f = requirements_flag(f)
356+
f = skip_lock_option(f)
356357
f = pre_option(f)
357358
return f
358359

pipenv/core.py

+28-6
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,7 @@ def do_create_virtualenv(python=None, site_packages=False, pypi_mirror=None):
919919
pip_config = {}
920920

921921
# Actually create the virtualenv.
922-
nospin = os.environ.get("PIPENV_ACTIVE", environments.PIPENV_NOSPIN)
922+
nospin = environments.PIPENV_NOSPIN
923923
c = vistir.misc.run(cmd, verbose=False, return_object=True,
924924
spinner_name=environments.PIPENV_SPINNER, combine_stderr=False,
925925
block=False, nospin=nospin, env=pip_config)
@@ -934,7 +934,7 @@ def do_create_virtualenv(python=None, site_packages=False, pypi_mirror=None):
934934
project_file_name = os.path.join(project.virtualenv_location, ".project")
935935
with open(project_file_name, "w") as f:
936936
f.write(vistir.misc.fs_str(project.project_directory))
937-
937+
fix_venv_site(project.env_paths["lib"])
938938
# Say where the virtualenv is.
939939
do_where(virtualenv=True, bare=False)
940940

@@ -2039,6 +2039,7 @@ def do_uninstall(
20392039
):
20402040
from .environments import PIPENV_USE_SYSTEM
20412041
from .vendor.requirementslib.models.requirements import Requirement
2042+
from .vendor.requirementslib.models.lockfile import Lockfile
20422043
from .vendor.packaging.utils import canonicalize_name
20432044

20442045
# Automatically use an activated virtualenv.
@@ -2117,9 +2118,17 @@ def do_uninstall(
21172118
)
21182119
do_purge(allow_global=system)
21192120
removed = package_names - bad_pkgs
2120-
project.remove_packages_from_pipfile(removed)
2121-
if lock:
2122-
do_lock(system=system, keep_outdated=keep_outdated, pypi_mirror=pypi_mirror)
2121+
if pipfile_remove:
2122+
project.remove_packages_from_pipfile(removed)
2123+
if lock:
2124+
do_lock(system=system, keep_outdated=keep_outdated, pypi_mirror=pypi_mirror)
2125+
else:
2126+
lockfile = project.get_or_create_lockfile()
2127+
for key in lockfile.default.keys():
2128+
del lockfile.default[key]
2129+
for key in lockfile.develop.keys():
2130+
del lockfile.develop[key]
2131+
lockfile.write()
21232132
return
21242133
if all_dev:
21252134
package_names = develop
@@ -2141,7 +2150,7 @@ def do_uninstall(
21412150
# Uninstall the package.
21422151
if package_name in packages_to_remove:
21432152
cmd = "{0} uninstall {1} -y".format(
2144-
escape_grouped_arguments(which_pip()), package_name
2153+
escape_grouped_arguments(which_pip(allow_global=system)), package_name
21452154
)
21462155
if environments.is_verbose():
21472156
click.echo("$ {0}".format(cmd))
@@ -2154,6 +2163,19 @@ def do_uninstall(
21542163
in_dev_packages = project.get_package_name_in_pipfile(
21552164
package_name, dev=True
21562165
)
2166+
if normalized in lockfile_packages:
2167+
click.echo("{0} {1} {2} {3}".format(
2168+
crayons.blue("Removing"),
2169+
crayons.green(package_name),
2170+
crayons.blue("from"),
2171+
crayons.white(fix_utf8("Pipfile.lock…")))
2172+
)
2173+
lockfile = project.get_or_create_lockfile()
2174+
if normalized in lockfile.default:
2175+
del lockfile.default[normalized]
2176+
if normalized in lockfile.develop:
2177+
del lockfile.develop[normalized]
2178+
lockfile.write()
21572179
if not (in_dev_packages or in_packages):
21582180
if normalized in lockfile_packages:
21592181
continue

0 commit comments

Comments
 (0)