checkinstallパッケージがPythonと競合しています。

checkinstallパッケージがPythonと競合しています。

ディストリビューションを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ファイルを使用するように指示します。また、パッケージを使用せずに正しくインストールできるように、パッケージを再パッケージし、システムにpy2.7パッケージで提供されているバージョンの代わりに最新バージョンを使用するように指示したいと思いpython3.4.0ます。 (今後は問題が発生しないことを願っています)python3.4.0--force-overwrite2to3

ベストアンサー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.72to3-3.4

ただし、バージョン3.4.0に含まれている2to3モジュールは最新(2014-03-16にリリース)なので、2.7.3(2012-04-09にリリース)のバイナリをインストールしないことをお勧めします。

bin(私の場合は)2.7.8と3.4.1を別々にインストールすると、4つのディレクトリが作成されますincludelibshare

  • 以下にはsharepython3.4.1と同じ名前のマンページしかないので、名前は競合しません(同じディレクトリにあっても)。
  • underlibと underincludeの違いもあるため、競合は発生しません。python3.4python2.7
  • 以下には、特定のバージョンのバイナリ(、、など)binへの複数のリンクがあります。2to3idlepydocpython

もちろん、いくつかのpythonコマンドが必要なので、2to3どのバージョンをデフォルトにするかを決定するだけです。

10年以上にわたり、Pythonは複数のバージョンのmain.minorを並べてインストールすることができ、シンボリックリンクが設定されているバージョンを決定するだけで済みましたpython

おすすめ記事