web-dev-qa-db-ja.com

python 3.5のインストール後のapt依存関係の問題

最新のPython 3.5をダウンロードしてコンパイルし、checkinstallでインストールしました。今、私はaptの依存関係が欠落しているパッケージを大量に取得しています。

apt-xapian-index : Depends: python (< 2.8) but 3.5.0-1 is to be 

installed
 duplicity : Depends: python (< 2.8) but 3.5.0-1 is to be installed
 gconf2 : Depends: python:any
 .
 .
 .
 totem-plugins : Depends: python:any (>= 2.6.6-7~)
 ubuntu-system-service : Depends: python (< 2.8) but 3.5.0-1 is to be installed
                         Depends: python:any (>= 2.7.1-0ubuntu2)
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

しかし、2.7.9を含むpythonはまだインストールされています。

$ which python
/usr/bin/python
$ python
Python 2.7.9 (default, Apr  2 2015, 15:33:21) 
[GCC 4.9.2] on linux2

$ which python3
/usr/local/bin/python3
$ python3
Python 3.5.0 (default, Sep 13 2015, 19:47:21) 
[GCC 4.9.2] on linux

インストールしたパッケージを削除するか、python3がインストールされていないことを確認して依存関係を修正するにはどうすればよいですか?

また、python3.4はまだ/usr/bin/python3にあります

編集:apt-get -f installを実行したいのですが、大量のものを削除しているので、それを修正する正しい方法ではないと思います。

5
Jared Mackey

良かった、それを修正できた。 ubuntuを再インストールする必要があるのではないかと心配しました。

行って手動で/var/lib/dpkg/statusを編集し、checkinstallによって作成されたエントリを削除しました。

それが削除されたら、/usr/local/binに移動し、python 3.5をすべて削除しました。また、python3-4がまだ/usr/bin/にあることを確認しました。それからSudo dpkg-reconfigure -aを実行し、最後にapt-get -f installを実行しましたが、「欠落」していたのはpythonだけでした。

それからREADMEの指示に従って正しい方法でインストールし、python3.4へのシンボリックリンクを削除してpython3.5への新しいシンボリックリンクを作成しました。

5
Jared Mackey

python3.4checkinstallでインストールした後、同じ問題が発生しました(electrometropython3.5の代わりに)

この問題が発生する理由

この問題が最初に発生した理由を発見しました。

Python3.4ソースからcheckinstallを使用して.debファイルを作成してからインストールする場合、checkinstallによって設定されるデフォルトのパッケージ名は "python」。

結果として、checkinstallを使用して新しいパッケージをインストールする前に、dpkgという名前のパッケージをpythonアンインストールします!!このパッケージはすでにUbuntuに存在します。基本的にpython2にリンクされています!何らかの理由で、dpkgが、インストールしているpythonのバージョン、つまり私の場合はpython3.4を削除しようとすると思うが、失敗する。 python2がまだインストールされているのはこのためです。しかし、dpkgは、「python」パッケージが削除され、インストールされた新しいパッケージ(python3.4)に置き換えられたとまだ信じています。ファイル/ var/lib/dpkg/statusは、それに応じて編集されています。私の場合、このインストールに関連する更新は次のとおりです。

パッケージ:python
ステータス:deinstallok installed
優先度:追加
セクション:checkinstall
インストール済みサイズ:167520
メンテナー:root @ laptop
アーキテクチャ:AMD64
バージョン:3.4.3-1
提供:python
説明:checkinstall 1.6.2`で作成されたパッケージ

太字で示すように、パッケージ名は「python」であり、パッケージは「deinstall」をインストールしてからをインストールします

したがって、dpkgは、「python(python2!)」はもう存在しないと考え、apt-get -f install!を呼び出すときに、それに依存するすべてのものを削除することをお勧めします。

この問題を回避する解決策:

Checkinstallを使用するときは、単に別の「パッケージ」名と「提供」名を選択してください!たとえば、両方のpython3.4-checkinstall。

既に発生した問題を解決する方法

この混乱を解決するために、electrometroが推奨するように、インストールされているすべてのバイナリを手動で削除する必要がないようにするソリューションがあります。

次の手順を実行します:

  1. たとえば、/var/lib/dpkg/statusのパッケージ名pythonpythonからpython-3.4-checkinstallに手動で編集します。注意してください。新しい名前はすでに使用されていてはなりません!また、「Provides」を新しい名前に変更します。
  2. Sudo dpkg-reconfigure python-3.4-checkinstallを使用します。 (注:推奨されるelectrometroとしてのdpkg-reconfigure -aは、Ubuntu 16.04にはもう存在しません。とにかく必要ありません)。
  3. 元のpythonパッケージを再度インストールするapt-get -f installを実行します!この時点でここで停止できますが、Sudo dpkg-query -L python3.4-checkinstallを試しても、dpkgはどのファイルがインストールされたかを知りません!!!ファイル/var/lib/dpkg/info/python3.4-checkinstall.listが存在しないためです!ファイル/var/lib/dpkg/info/python.listは、apt-get -f installによってオーバーライドされています。 dpkgの詳細については、 Debianドキュメンテーション を参照してください。この問題を解決するには、手順4を実行する必要があります。
  4. Checkinstallを使用してpython3.4を最初から再インストールします。ただし、前述のように「パッケージ」名と「提供」名を変更することを忘れないでください。 手順1と同じ名前を使用します。バイナリを手動で削除する必要はありません。このステップのポイントは、python3.4をクリーンインストールし、新しく作成された.debファイルを使用してアンインストールできるようにすることです。

以上です!すべてがきれいになりました。私は実際にステップ2の前にステップ3を実行しましたが、この方法で実行する方がきれいです。

詳細については、checkinstallを使用してソースパッケージからpython3.4をインストールするために使用した手順は次のとおりです。

  1. ソースディレクトリで、./configureを実行します。
  2. makeを実行します
  3. Sudo checkinstallを実行します
  4. 最も重要なステップ。この時点で、インストールする前にフィールドを変更するかどうかを尋ねられます。 「Package」と「Provides」を「python」から別の一意の名前に変更します(提案した「python3.4-checkinstall」など)。

それが役に立てば幸い!

乾杯、ニコラス

3
N. Gimenez