Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pip升级最初通过apt安装的软件包_Python_Linux_Pip_Debian_Apt - Fatal编程技术网

Python 使用pip升级最初通过apt安装的软件包

Python 使用pip升级最初通过apt安装的软件包,python,linux,pip,debian,apt,Python,Linux,Pip,Debian,Apt,我想通过pip安装最新版本的docutils,但它不知道如何升级通过apt安装的系统版本 $ sudo --set-home python2 -m pip install --upgrade docutils Collecting docutils Using cached https://files.pythonhosted.org/packages/3a/dc/bf2b15d1fa15a6f7a9e77a61b74ecbbae7258558fcda8ffc9a6638a6b327/doc

我想通过
pip
安装最新版本的
docutils
,但它不知道如何升级通过
apt
安装的系统版本

$ sudo --set-home python2 -m pip install --upgrade docutils
Collecting docutils
  Using cached https://files.pythonhosted.org/packages/3a/dc/bf2b15d1fa15a6f7a9e77a61b74ecbbae7258558fcda8ffc9a6638a6b327/docutils-0.15.2-py2-none-any.whl
Installing collected packages: docutils
  Found existing installation: docutils 0.14
ERROR: Cannot uninstall 'docutils'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

$ apt-cache show python-docutils | head -n 3
Package: python-docutils
Architecture: all
Version: 0.14+dfsg-3
我在网上想到或找到的解决方案都没有吸引力:

  • 删除带有
    rm-rf/usr/lib/python2.7/dist-packages/docutils*
    apt
    版本。这会使pip静音,但意味着:

    • 系统上安装的文件不再符合Debian打包系统的想法
    • 我可能会打破系统软件对docutils 0.14的依赖性
    • 对Debian软件包的任何更新都将导致重新安装
      apt
    • 会议讨论的其他问题
  • pip安装--强制重新安装
    。(同样的问题。)

  • pip安装--忽略安装
    。(同样的问题。)
  • 有没有一种方法可以为我提供一个默认的环境,它可以使用来自
    pip
    的最新版本的东西,但不可能破坏任何系统软件?建议使用
    virtualenv
    venv
    pyenv
    pipenv
    中的一种。我尝试了
    pipenv
    ,但它不想使用
    --system
    安装命令行上列出的各个软件包,我不知道创建
    Pipfile
    是否真的能解决这个问题


    我不希望以某种方式手动切换环境以使用
    apt
    安装的软件包,而不是
    pip
    安装的软件包。有没有办法只让安装了apt的软件使用一个环境,或者使用安装了pip的环境?

    到目前为止,在
    ~/.bashrc
    中添加以下内容似乎效果不错:

    if[!-d~/venv/python3];然后
    python3-m venv——系统站点包~/venv/python3
    fi
    if[-d~/venv/python3];然后
    虚拟环境禁用提示=1~/静脉/蟒蛇3/bin/activate
    fi
    
    大多数系统安装的脚本在
    /usr/bin
    中有一个python硬编码,而不是使用
    /usr/bin/env python
    ,因此它们不受此影响

    我宁愿不必手动切换环境以使用apt安装的软件包而不是pip安装的软件包。有没有办法只让apt安装的软件使用一个环境,或者使用安装了pip的环境

    理想情况下,应使用系统版本pip版本

    根据

    只要不在path中安装其他版本的Python,Debian的Python版本就不会受到新版本的影响

    如果您安装了已安装的Python版本的另一个微版本,那么您也需要小心地安装用于该版本Python的所有模块


    apt安装的版本很可能被其他应用程序使用,或者更糟的是被系统使用,您应该尝试修改此安装。好的做法是并行使用多个版本,这应该使用virtualenv或同等软件来完成。注意:
    pip安装——用户文档可能会起作用,但我建议使用virtualenv。使用虚拟环境是正确的方法。我觉得它有点笨拙,但它仍然有效。我已经开始为一次性脚本使用“默认”系统范围的venv,并为更大、更结构化的应用程序创建特定于应用程序的venv。