Python 为什么pip卸载所需的软件包?

Python 为什么pip卸载所需的软件包?,python,pip,Python,Pip,pip似乎肆意卸载所需的软件包!如果一个包显式声明了一个包的特定版本,那么pip似乎应该无法卸载该包,但它没有。考虑: $ pip list | grep bar bar 1.0 $ cat setup.py from setuptools import setup, find_packages def do_setup(): setup( name='foo', description='the foo package'

pip似乎肆意卸载所需的软件包!如果一个包显式声明了一个包的特定版本,那么pip似乎应该无法卸载该包,但它没有。考虑:

$ pip list | grep bar
bar           1.0    
$ cat setup.py 

from setuptools import setup, find_packages

def do_setup():
    setup(
        name='foo',
        description='the foo package',
        license='MIT',
        version='1.0',
        install_requires=[
            'bar==1.0',
        ],
    )

if __name__ == "__main__":
    do_setup()
$ pip install .
Processing /Users/williamp/examples/pip/foo
  Requirement already satisfied (use --upgrade to upgrade): foo==1.0 from file:///Users/williamp/examples/pip/foo in /Users/williamp/tmp/virt/lib/python2.7/site-packages
Requirement already satisfied: bar==1.0 in /Users/williamp/tmp/virt/lib/python2.7/site-packages (from foo==1.0)
$ cd ../bar
$ pip install dist/bar-1.1.tar.gz 
Processing ./dist/bar-1.1.tar.gz
Building wheels for collected packages: bar
  Running setup.py bdist_wheel for bar ... done
  Stored in directory: /Users/williamp/Library/Caches/pip/wheels/bf/d3/68/6016190bb2084f62ba1107c63bea948f4cfbb2c129fa0cb102
Successfully built bar
Installing collected packages: bar
  Found existing installation: bar 1.0
    Uninstalling bar-1.0:
      Successfully uninstalled bar-1.0
Successfully installed bar-1.1

似乎我最后遇到了这样一种情况:安装包foo时显式依赖于bar==1.0,但pip已经卸载了bar 1.0,系统现在处于不稳定状态。是否有一些简单的配置选项可以传递给
pip
,告诉它不要这样做

Pip有一个标志,可以在没有依赖项的情况下安装库。试试看

pip install --no-dependencies dist/bar-1.1.tar.gz

否,但您可以通过运行
pip check
手动检查:

$ pip check
No broken requirements found.
$ pip uninstall pytz
Uninstalling pytz-2017.3:
  ...
Proceed (y/n)? y
  Successfully uninstalled pytz-2017.3
$ pip check
Django 2.0 requires pytz, which is not installed.

依赖项跟踪与pip已经有一段时间了。我希望它最终会得到修复。

我不想安装没有依赖项的软件包!我想依靠pip来确保所有的依赖项都已安装,但似乎没有一个干净的方法来实现您所寻找的。这似乎是相关的,因为pip正在尝试使用与包同名的依赖项安装。看起来,要确保它们已安装,您仍然需要运行pip检查。