我正在尝试从Debian 6升级到7,并且我用checkinstall创建和安装的一些软件包出现了一些问题。在进行升级时,我会收到以下消息:
Preparing to replace python 2.6.6-3+squeeze7 (using .../python_2.7.3-4+deb7u1_all.deb) ...
Unpacking replacement python ...
dpkg: error processing /var/cache/apt/archives/python_2.7.3-4+deb7u1_all.deb (--unpack):
trying to overwrite '/usr/bin/2to3', which is also in package python3.4.0 3.4.0-1这是由于我的python3.4.0包中安装了2to3。我用以下行创建并安装了这个包:
checkinstall -D --fstrans=no --dpkgflags=--force-overwrite \
--maintainer=tim@example.com --backup=yes \
--pkgname=python3.4.0 --pkgversion=3.4.0 make install事后看来,这可能不是最好的使用--force-overwrite的方法,但这是我安装软件包的唯一方法。
我想完成python_2.7.3-4+deb7u1_all包的安装,但是告诉它使用python3.4.0安装的文件,而不是覆盖它。此外,我还想重新打包我的python3.4.0,这样我就可以正确地安装它,而不用使用--force-overwrite,并告诉系统使用最新版本的2to3,而不是py2.7包提供的版本。(希望以后避免进一步的问题)
发布于 2014-09-29 18:00:42
您不必担心覆盖该文件,bin/2to3文件是一个5行脚本,仅在第一行(它调用的二进制python版本)中有所不同:
$ diff -u bin/2to3 ../2.7.8
--- bin/2to3 2014-06-24 16:39:43.000000000 +0200
+++ ../2.7.8/bin/2to3 2014-07-21 18:45:32.000000000 +0200
@@ -1,4 +1,4 @@
-#! /opt/python/3.4.1/bin/python3.4
+#! /opt/python/2.7.8/bin/python2.7
import sys
from lib2to3.main import main2to3实际上是指向2to3-2.7 resp的链接。2to3-3.4。
但是,我建议不要安装2.7.3 (发布的2012-04-09)的二进制文件,因为包含在3.4.0版本中的2到3的模块是最新的(发布了2014-03-16)。
如果单独安装2.7.8和3.4.1 (在我的例子中),您将得到四个目录:bin、include、lib和share。
share下只有手册页,名称如python3.4.1,这样就不会发生冲突(即使它们位于同一个目录中)。lib和include下,python3.4和python2.7之间也有区别,因此也不会发生冲突。bin下,有几个链接(2to3、idle、pydoc、python等)。要对特定的二进制文件进行版本化。当然,您需要一些python命令(或2to3),您只需要决定哪个版本应该是默认版本。
Python已经能够在多个major.minor版本之间安装了多年的10+年,您只需要决定哪个版本设置符号链接(因此是用python调用的版本)。
发布于 2014-10-01 18:09:23
创建包的更正命令:
checkinstall -D --fstrans=no \
--maintainer=tim@example.com --backup=yes \
--pkgname=python3.4.0 --pkgversion=3.4.0 make altinstallaltinstall将停止创建2to3、python等,只需安装版本特定的名称(在本例中为2to3-3.4、python3.4 )。通用名称只是符号链接。
https://unix.stackexchange.com/questions/158265
复制相似问题