Source: python-pip
Version: 9.0.1-2
Severity: normal
Dear Maintainer,
When running "pip install --system" as a non-root user, the change in
set_user_default.patch forces the --ignore-installed flag to be enabled.
This has the effect of breaking pip for use cases that install packages as non-
root but don't use --user or virtualenv. When dependencies are shared among
multiple packages, the --ignore-installed option causes pip to blindly install
the latest version of each dependency requested by each package, even if a
compatible package version is already installed, and even if this breaks the
requirement spec of some other package. This results in package version
conflicts.
For example:
pip install pkg_A (requires pkg_B==1.0)
pip install pkg_C (requires pkg_B>=1.0)
Because of --ignore-installed, pkg_C ignores the existing pkg_B (which it is
otherwise compatible with) and installs the latest pkg_B==2.0, as a result this
breaks pkg_A.
Here's the relevant logic in pip/commands/install.py:
default_user = True
if running_under_virtualenv():
default_user = False
if os.geteuid() == 0:
default_user = False
cmd_opts.add_option(
'-I', '--ignore-installed',
dest='ignore_installed',
action='store_true',
default=default_user,
help='Ignore the installed packages (reinstalling instead).')
My preferred fix would be that when the --system flag is set, it should retain
the default behavior of pip, and not interfere with the unrelated --ignore-
installed flag.
Thanks,
Peter
-- System Information:
Debian Release: 9.1
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.9.0-3-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8),
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)