我正在尝试将发行版从 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
这是由于2to3
我的python3.4.0包中安装的。我使用以下行创建并安装了该包:
checkinstall -D --fstrans=no --dpkgflags=--force-overwrite \
[email protected] --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 包提供的版本。 (希望避免以后出现更多问题)
答案1
您不必担心覆盖该文件,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 main
2to3
实际上是一个指向 resp 的链接2to3-2.7
。2to3-3.4
。
不过,我建议不要安装 2.7.3(2012-04-09 发布)中的二进制文件,因为 3.4.0 版本中包含的 2to3 模块是最新的(2014-03-16 发布)。
如果您单独安装(在我的例子中)2.7.8 和 3.4.1,您将获得四个目录 :bin
、include
和。 lib
share
- 下面
share
只有手册页,名称如 python3.4.1,因此这些名称不会冲突(即使它们位于同一目录中)。 - under
lib
和underinclude
之间也是有区别的,所以也不会有冲突。python3.4
python2.7
- 在 下
bin
,有几个指向特定版本二进制文件的链接(2to3
、idle
、pydoc
、等)。python
当然,您需要一些python
命令(或2to3
),您只需要决定哪个版本应该是默认的。
10 多年来,Python 一直能够安装多个彼此相邻的 main.minor 版本,您只需决定哪个版本设置了符号链接(因此是仅使用 调用的版本python
)
答案2
更正后的创建包的命令:
checkinstall -D --fstrans=no \
[email protected] --backup=yes \
--pkgname=python3.4.0 --pkgversion=3.4.0 make altinstall
altinstall
将停止创建2to3
、python
等,并仅安装版本特定名称(2to3-3.4
在python3.4
本例中为 )。通用名称只是符号链接。