python-devインストールエラー:ImportError:apt_pkgという名前のモジュールがありません


100

私はDebianユーザーであり、python-devをインストールしたいのですが、シェルでコードをルートとして実行すると、次のようになります。

# aptitude install python-dev

次のエラーが発生します。

Traceback (most recent call last):       
  File "/usr/bin/apt-listchanges", line 28, in <module>
    import apt_pkg
ImportError: No module named apt_pkg

何が問題のようで、どうすれば解決できますか?


1
aptが壊れているようです。apt-getinstallpython-devを試してみるとどうなりますか
Pierre Geier 2012

apt-get install python-devを試してみると、すでにインストールされていると表示されます。パッケージリストの読み取り...完了依存関係ツリーの構築状態情報の読み取り...完了python-devはすでに最新バージョンです。0がアップグレードされ、0が新しくインストールされ、0が削除され、0がアップグレードされていません。他に何か提案はありますか?
ベルフェゴール2012

回答:


64

動作するpython-aptパッケージがあることを確認してください。apt_pkg.soが見つからないという問題を修正するために、そのパッケージを再度削除してインストールすることができます。

apt-get install python-apt

すでにインストールされています。私がヒットしたとき:#apt-get installpython-aptそれは私にパッケージリストを読んでいます...完了依存関係ツリーを構築しています状態情報を読んでいます...完了python-aptはすでに最新バージョンです。0がアップグレードされ、0が新しくインストールされ、0が削除され、0がアップグレードされていません。そして、次のコマンドで再試行すると、#aptitude installpython-dev同じエラーが再度発生します。私は何をすべきか他のいくつかのアイデア?
ベルフェゴール2012

14
を使用して削除しapt-get remove --purge python-apt、再度インストールします
Arnestig 2012

8
他の依存関係に注意してください。私はUbuntuでパッケージを(あまりにも)すぐに削除し、他の多くの依存関係も削除しました(例:ubuntu-desktop)。しかし、ログのメモに注意を払わなかったのは私のせいです。
アルR.

1
それがpython-aptによるものかどうかはよくわかりません。ubuntu-desktopへの依存関係については、packages.ubuntu.com / lucid / ubuntu-desktopを確認してください。
Arnestig 2013年

2
@ArnestigREMOVINGpython-aptはかなり危険に聞こえます!! 私のレッスンを一度学びました、そして私はそれを試みません。
alvas 2016

143

をしているときにこの問題に遭遇しましたsudo apt-get update。私の環境はdebian8で、python2.7 + 3.4(デフォルト)+3.5です。

次のコードはapt_pkg....so、Python3.5のファイルのみを再作成します

sudo apt-get install python3-apt --reinstall

次のコードは私の問題を解決しました、

cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so

したがって、明らかに、python3-aptは、現在使用されているpythonバージョンではなく、最も高いpythonバージョンをチェックします。


29
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so次のように変更する必要があります sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so apt_pkg.so
desaiankitb 2018年

39
あなたは素晴らしいです!私にとって、それはsudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.sopython3.6用でしたが、この恐ろしいバグはなくなりました。
Alex Gurrola 2018年

56
Ubuntuの18.04のデフォルト3.6の隣にはPython 3.7をインストールした後sudo apt install python3.7、私は実行するのに必要なので、私、ピップを実行しようと、このapt_pkgのエラーを得たcd /usr/lib/python3/dist-packages後、sudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.soそれからsudo apt install python3-pip
abulka

3
python 3.6のために、コマンドは次のようになりますsudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
StatguyUser

1
これらの中括弧は、lnコマンドのプロパティではありません。それらはシェルブレース拡張を呼び出します。gnu.org/ software / bash / manual / html_node / Brace
Carlos

116

これで解決します:

/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so

または:

/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

基本的に、あなたが正しい名前を取得しようとするNo such file or directoryだけならls


完璧に機能
SubhrajyotiSen19年

3
Ubuntu 18.04では、この$ cd / usr / lib / python3 / dist-packages $ sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
NarenYellavula19年

これは私にも役立ちました...にすべてのファイルをリストしましたが/usr/lib/python3/dist-packages、またはがないことがapt_pkg.cpython-34m-i386-linux-gnu.soわかりましたがapt_pkg.cpython-3m-i386-linux-gnu.so、持っていましたapt_pkg.cpython-36m-i386-linux-gnu.so...このファイルをにコピーapt_pkg.soして完全に機能しました!ありがとう!
LeonardoIsso19年

これは私にもうまくいきました。@LeonardoIssoが行ったように、私は32ビットLinuxを使用しているため、適切なファイル名を見つけるためにすべてのファイルもリストしました。
w3Develops

66

これは、deadsnakesリポジトリからPython3.7をインストールしようとした後、Ubuntu18.04.2で発生しました。

解決策はこれでした

1) cd /usr/lib/python3/dist-packages/

2) sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so


3
これが本当に私のために働いたことを他の人に確認したかっただけです。
AnthonyD9 7319年

2
それはクレイジーです、ありがとう!ときにドッキングウィンドウで:RUN ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.so
loretoparisi

2
うん、それは解決策:)だった
szedjani

1
これが解決策です!Python3.7にアップグレードした後。
JOHN

1
18.04.04、python 3.7にアップグレードすると、これもうまくいきました!ありがとう!
RJaus

22

このエラーは、新しいバージョンのpythonが古いバージョンと一緒にインストールされている場合によく発生します。

  • Ubuntu18.04.1にはPythonバージョン3.6.6が付属しています
  • インストールされているppa:deadsnakes /python3.7.1または代替
  • apt_pkgモジュールを使用するコマンドを実行すると、次のようなエラーが発生します。

        from CommandNotFound.db.db import SqliteDatabase
    File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
        import apt_pkg
    

aptを使用して非ディストリビューションのpython3バージョンをインストールすると、共有モジュールディレクトリがpython3のディレクトリに設定されます/usr/lib/python3。通常はです。

ほとんどの場合、これは問題ありませんが、状況によっては、Pythonのバージョンが異なると、他のPythonバージョンとは異なるライブラリまたは共有オブジェクト/ライブラリに依存するため、他の回答が指摘しているように、.SOをにリンクする必要があります。正しいPythonバージョン。したがって、Python3.6が64ビットシステムにインストールされている場合、apt_pkg.SOリンクは次のようになります。

sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

しかし、問題は、新しいpythonバージョンをインストールすると、リンクが更新されて最新のpythonバージョンを指すようになり、apt_pkgモジュールが見つからないというエラーが発生するという事実にあります。ディストリビューションに付属しているPythonのバージョンを確認することで、上記のようなリンクを作成できます。または、メソッドを使用して、次のような.SOをリンクするPythonバージョンの選択肢をコマンドに提供します。

sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so

Pythonは、インストールされている最新のPythonバージョンへのこのリンクを作成するため、コマンドに3つのPythonバージョンから選択するオプションを提供し、そのうちの最も高いバージョンを選択します。


2
18.04.2を実行すると、最初の推奨事項が機能し、最終的にsudoapt-getアップデートをエラーなしで実行できました。2番目の推奨事項は、apt-get.soがフォルダーではなかったというエラーを返します。
CloseISQ

16

@ user8178061のソリューションはうまく機能しましたがpython3.7、Ubuntuを使用しているバージョンにいくつかの変更を加えて実行しました

私は交換しapt_pkg.cpython-3m-i386-linux-gnu.soapt_pkg.cpython-36m-x86_64-linux-gnu.so

ここで実行する2つのコマンド:

cd /usr/lib/python3/dist-packages

sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so


1
これで私の問題は解決しました。これは、Pythonバージョンを3.6から3.7に切り替えたことが原因である場合に問題を解決します。
ジャンボット

1
おかげで、同じ問題がありました!sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so何であるかapt_pkg.soが明確になるように使用を検討してください。
スキピオ

動作しましたがsudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so、何らかの理由で変更する必要がありました
ダニエル

10

これは、ubuntu18.04でpython3.7を更新した後に私のために働きました

cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

1
これは、アップグレード後に私のために働いたのpython 3.8 ubuntu18.04に。
ヘンリーパラシオス

6

何らかの理由で、私のインストールがapt_pkg.sopython3dist-packagesディレクトリにありませんでした。(apt_pkg.cpython-33m-x86_64-linux-gnu.soありましたか?!)しかし、私はシンボリックリンクを作成する必要がありapt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so ました/usr/lib/python3/dist-packages

アップグレードが壊れたかどうか、またはなぜそうなったのかわかりません。アップグレードを試みた後に発生しました(正確->まれ->量子アップグレード)


これは私にとって正しい修正でした。悪い考えだとわかっていたのに、ルートとしてpip3を使用してこの問題を引き起こしました。軽いコンセントに指を入れたらどれだけショックを受けるか見たかった。答えは:かなり悪いです。また、/ etc / Alternativesの設定をいじることは、心の弱い人向けではありません。パートタイムの訪問者ではありません。どのpythonリンクがどのpythonを指しているかを交差させることが問題であり、私は災害への道を歩み始めたと思います。
pauljohn 3220年

6
  1. デフォルトのPython3バージョンを確認します。
python --version
Python 3.7.5
  1. cdファイルに/usr/lib/python3/dist-packagesチェックインしてチェックしapt_pkg.*ます。デフォルトのPythonバージョンには何もないことがわかります。
ll apt_pkg.*
apt_pkg.cpython-36m-x86_64-linux-gnu.so
  1. シンボリックリンクを作成します。
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64- linux-gnu.so 

5

最後の手段はsudo cp /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.solnコマンドが多すぎるか、魔法のように機能しない場合です。

cp上記は、mvPythonバージョンを1つだけ使用することに専念している場合にも当てはまります。


5

Python 3.7を使用している場合は、Alternativesを更新してPython3.6にダウングレードしてください。これでうまくいきました。

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1

sudo update-alternatives --config python3

これはpython3.6でうまくいきましたが、python3.7に戻しても、エラーはまだあります
HugoSohm19年

3

Python 3.5を使用している場合は、3.4にダウングレードしてください。それが最も安全な方法です。

下に、どのpython3.5が使用できない/usr/lib/python3/dist-packagesかが表示さ*34m*れます。zhazhaはそれにシンボリックリンクを答えます。


どのようにダウングレードしますか?
ピンキア

なぜダウングレードが最も安全なアクチンなのですか?
DavidMedinets19年

3

のシンボリックリンクを作成することに加えて、と同じ方法でapt_pkg.so作成することもできます。apt_inst.soapt_pkg.so

ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so 

3

奇妙なコピーなどで修正する方法をみんなが言っているのを見ますが、なぜ問題が発生するの実際には誰も言いませんでした。

それで、私が好きな人のために、SOの誰かがそう言ったという理由だけでシステムファイルをいじりたくないという人のために説明させてください。


問題はそれです:

  • 多くのシステムスクリプトには、python3シバンがハードコードされています。あなたはそれを自分でチェックすることができます:
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/*

/usr/lib/cnf-update-db:#!/usr/bin/python3
/usr/lib/command-not-found:#!/usr/bin/python3
/usr/lib/cups/filter/pstotiff:#!/usr/bin/python3
/usr/lib/cups/filter/rastertosag-gdi:#!/usr/bin/python3 -u
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:#!/usr/bin/python3
/usr/lib/language-selector/ls-dbus-backend:#!/usr/bin/python3
/usr/lib/python3/dist-packages/language_support_pkgs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/debug.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:#!/usr/bin/python3
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release:#!/usr/bin/python3
/usr/lib/update-notifier/package-data-downloader:#!/usr/bin/python3
/usr/lib/update-notifier/backend_helper.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt_check.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt-check:#!/usr/bin/python3

  • python apt package python-apt/python3-aptはシステムパッケージなので、デフォルトのシステムpython用です

したがって、スクリプトは常に現在リンクされているバージョンを取得しpython3ますが、aptパッケージが存在しないため失敗します。


一般的な解決策:デフォルトのpython3リンクは絶対に変更しないでください。これまで。これはpythonリンクにも当てはまります。アプリがPython3で機能しない古い構文要素を使用してPython2で記述されている場合、アプリは機能しません。

[Python2.7で書かれていてPython3と互換性がないように見えるターミネーターを使用しているため、端末がそのように壊れました。]


ここで紹介する解決策は、aptパッケージファイルをコピー/リンクするか、python3リンクを変更することを提案しています。

両方を分析しましょう:

  1. aptパッケージのコピー/リンク

Python3.4前後から、すべてのPythonスクリプトが新しいバージョンでも機能するため、これ問題になりません

これまでのところ。しかし、システムを十分に長く保つと、将来的に壊れることがあります。

  1. 変更するpython3リンクバック

「リンクを変更しない」に戻ることができるため、これは優れたソリューションです。


「でも、タイプするだけでいいのpython!」- 私も好きです!それが私が最初にこの問題に到達した方法です!

  1. 一般に、システムリンクを手動で変更することは避けupdate-alternativesてください代わりに、異なるバージョンをリンクするために使用してください。これは、多くのバージョンを持つすべてのアプリに適用されます。これでもこれらのシステムスクリプトは壊れますが(リンクが変更されるため)、リンクと宛先を正しい順序で配置したか、タイプミスをしたかを心配することなく、簡単に切り替えることができます。

  2. リンクまたはエイリアスにpython/以外の名前を使用することを検討しpython3てください。

  3. または、システムリンクを変更せずに、(仮想環境と同じように)独自のpython/python3リンクをPATHに追加します。


新しいPythonユーザーにとって非常に役立ちます。
HassanAjaz20年

0

Windows 10 WSL v1(Ubuntu 16.04.6 LTS)

このredditの答え(少し変更されたものは私のために働いた)

sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so



0

答えはどれも私にはうまくいきませんでした(私はUbuntu16.04とPython3.6を使用しています)。だから私は最終的に次のように問題を解決しました:

1-サーバーのFTPに接続します

2-フォルダ「/ usr / lib / python3 / dist-packages /」に移動します

3 -ファイルを複製"apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so"

"apt_pkg.cpython-3に、この重複ファイルの名前を変更し、4- 6 m-x86_64-linux-gnu.so"

それでおしまい!


0

私はUbuntu16.04を使用していて、Python3.7にアップグレードしました。これがPPAを追加しようとしたときに発生したエラーです

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test                                           
Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 11, in <module>
    from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 27, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

次のシンボリックリンクを作成して、最初のpython 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.soとシンボリックリンクを作成することで、このエラーを修正できました。

sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so

1
この解決策は、この質問に対する少なくとも6つの別の回答ですでに提案されているようです(さらに3つは、シンボリックリンクの代わりにファイルをコピーすることを提案しています)。
セルゲイシュビン

これは私にとってはうまくいきます、ありがとう!その前に、/ usr / lib / python3 / dist-packagesをcdする必要があります
Hao Yellow

-3

ロケール変数を設定して、これを修正してみてください。

export LC_ALL="en_US.UTF-8"

export LC_CTYPE="en_US.UTF-8"

1
より具体的にして、これら2つのコマンドが何をしているのかを説明してください。
dpapadopoulos

-5

それが別の人を助ける場合に備えて、私は最終的にこの問題を解決しました。これは明らかにPythonバージョンの競合が原因で、リンクpython3をリダイレクトしてから、正しいpythonバージョンにリダイレクトします。

sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.4

次の場所にある正しいPythonバージョンを入力する必要がある場合があります。

python3 -V

2
python3を削除するのは悪い考えです:(python 3.4へのリンクが必要な場合は:ln -s /usr/bin/python3.4 / usr / bin / python3
Pamungkas Jayuda 2018年

1
本当に必要な場合を除いて、システムから物を削除するように人々に指示することは決して良い考えではありません。幸いなことに、/ usr / bin / python3は通常、とにかく単なるシンボリックリンクです。私はあなたがこの答えを削除するべきだと本当に思います。
ジェイミーリンジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.