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。