我通过编译在Ubuntu 14.04上安装了Python 2.7.9它的来源、 由.configre
、make
、 和make altinstall
。make altinstall
是因为我不想覆盖默认的Python 2.7.6。我自己安装的 2.7.9/usr/local/bin/python2.7
以及其他目录中的许多其他文件位于/usr/local
.从自述文件源码安装包中:
在 Unix 和 Mac 系统上,如果您打算使用相同的安装前缀(配置脚本的 --prefix 参数)安装多个版本的 Python,则必须注意您的主要 Python 可执行文件不会被不同版本的安装覆盖。
使用“make altinstall”安装的所有文件和目录都包含主要版本和次要版本,因此可以并存。 “make install”还会创建 ${prefix}/bin/python ,它引用 ${prefix}/bin/pythonX.Y。
如果您打算使用相同的前缀安装多个版本,您必须决定哪个版本(如果有)是您的“主”版本。使用“make install”安装该版本。使用“make altinstall”安装所有其他版本。
例如,如果您想安装 Python 2.5、2.6 和 3.0,其中 2.6 是主要版本,您可以在 2.6 构建目录中执行“make install”,并在其他目录中执行“make altinstall”。
现在我想卸载我自己安装的2.7.9。
幸运的是我还有源代码,但不幸的是, 生成文件没有卸载部分
$ sudo make uninstall make: *** No rule to make target `uninstall'. Stop.
然后我尝试了另一种方法:首先从源和编译创建一个deb,安装deb(希望覆盖来自安装的文件
make altinstall
),然后卸载deb。但是当我通过 创建 deb 文件时
checkinstall
,我不确定是否以及如何应该为make altinstall
for做不同的事情make install
。我尝试的是:$ checkinstall altinstall ... Installing with altinstall... ========================= Installation results =========================== /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found ...
我想知道如何创建一个 deb,以便安装 deb 将重复 的安装过程
make altinstall
?或者你卸载我的 python 2.7.9 的方法是什么?
注:第一个链接中的源码包setup.py
除了install-sh
.README
答案1
以下命令将删除你的make altinstall
-ed python:
rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7
你可能还需要做
rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7
虽然make altinstall
如果“系统python”与您安装的主次号码不同,那么它对我很有帮助,但如果只有微号码(第三个位置)不同,它就不能很好地工作。该数字被排除在安装的二进制文件之外,最终得到两个版本的 pythonX.Y。这一直是一个问题,但是一旦发行版开始附带基于 2.7.X 的系统实用程序,这个问题就变得更加严重,因为 2.7 应该是 Python2 系列的最后一个。
IMO 解决这个问题的最佳方法是防止它成为一个问题:将 python 配置为安装在任何其他 python 未使用的目录中。在我的系统上,它们会被删除/opt/python/X.Y.Z
。
要使用其中安装的任何 Python 来[virualenv][1]
创建新环境:
virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate
或使用[virtualenvwrapper][2]
.我有一些我使用的系列中最新版本的别名。
如果您正在使用tox
多个版本进行测试(您应该),以下别名将帮助它找到各个版本:
alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'
/opt/python/2.7
(这些是目前的最新版本,在下载、构建和安装新的 python 版本的过程中,我通过维护从最新版本/opt/python/2.7.9
以及其他次要版本的链接来使用略有不同的设置)
这些安装永远不会直接使用。它们始终仅用作环境的基础virtualenv
,因此我不在乎它们不在我的正常路径中。
答案2
从 @Anthon 的rm
列表开始,并应用 @bin-s 建议来搜索较新的文件,我想出了这个 bash 脚本来完全清除我的 Python-3.6.6 (已从源安装make altinstall
):
prefix='/usr/local/'
pyver='3.6'
rm -rf \
$HOME/.local/lib/Python${pyver} \
${prefix}bin/python${pyver} \
${prefix}bin/python${pyver}-config \
${prefix}bin/pip${pyver} \
${prefix}bin/pydoc \
${prefix}bin/include/python${pyver} \
${prefix}lib/libpython${pyver}.a \
${prefix}lib/python${pyver} \
${prefix}lib/pkgconfig/python-${pyver}.pc \
${prefix}lib/libpython${pyver}m.a \
${prefix}bin/python${pyver}m \
${prefix}bin/2to3-${pyver} \
${prefix}bin/python${pyver}m-config \
${prefix}bin/idle${pyver} \
${prefix}bin/pydoc${pyver} \
${prefix}bin/pyvenv-${pyver} \
${prefix}share/man/man1/python${pyver}.1 \
${prefix}include/python${pyver}m
rm -rI ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.
小心使用它(例如-I
在命令中添加选项rm
,以验证每个杀死)。
答案3
通常所有文件都会在大约一分钟内安装完毕。您可以使用“find”几乎同时检查所有已安装的文件,然后手动“rm”它们。希望有帮助。
find /usr/local/ -type f -newer <some latest old file>
答案4
我最终做了以下事情:
- 重建并安装你想要使用自定义前缀卸载的Python,比方说
$HOME/opt/Python-3.8.0
:tar tJf Python-3.8.0.tar.xz && cd Python-3.8.0 && ./configure --prefix $HOME/opt/Python-3.8.0 && make && make install
cd $HOME/opt/Python-3.8.0 && find * -type f | perl -pe's(^)(/usr/)' | sudo xargs rm
rm -rf ~/opt/Python-3.8.0