141

私は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

問題は何であると思われ、どうすれば解決できますか?

4

24 に答える 24

185

をしているときにこの問題に遭遇しました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-{your-version-number}-x86_64-linux-gnu.so apt_pkg.so

{your-version-number}適切に交換してください。

注意、以下はapt_pkg37mからapt_pkg36mへのシンボリックリンクを作成します。正しいバージョン、または少なくとも既存のバージョンにリンクしていることを確認し、インストールll apt_pkg.cpython-*したバージョンを確認してください。

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

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

于 2016-03-26T07:57:16.953 に答える
141

これで解決します:

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

または:

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

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

于 2017-06-18T06:02:39.860 に答える
90

これは、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

于 2019-07-22T14:08:48.410 に答える
73

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

apt-get install python-apt
于 2012-12-05T06:46:16.437 に答える
27

このエラーは、新しいバージョンの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バージョン。したがって、64ビットシステムにpython3.6がインストールされている場合、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バージョンから選択するオプションを提供し、そのうちの最も高いバージョンを選択します。

于 2018-11-05T11:59:07.960 に答える
20

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

cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
于 2020-03-31T22:04:40.423 に答える
19

@ 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

于 2019-11-28T13:21:39.290 に答える
16

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

それで、私が好きな人のために、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で記述されている場合、そのアプリは機能しません。

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


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

両方を分析してみましょう:

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

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

ここのところ。ただし、システムを十分に長く保つと、将来的に機能しなくなる可能性があります。

  1. リンクpython3を元に戻す

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


「でも、タイプするだけでいいのpython!」- 私も好きです!そもそもこうしてこの問題にたどり着きました!

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

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

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

于 2020-10-07T09:58:23.407 に答える
13
  1. デフォルトのPython3バージョンを確認します。

    python3 --version
    Python 3.7.5
    
  2. cdファイルにチェックインし/usr/lib/python3/dist-packagesてチェックしapt_pkg.*ます。デフォルトのPythonバージョンには何もないことがわかります。

    ll apt_pkg.*
    apt_pkg.cpython-36m-x86_64-linux-gnu.so
    
  3. シンボリックリンクを作成します。

    sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64-linux-gnu.so 
    
于 2020-04-27T11:39:47.437 に答える
7

何らかの理由で、私のインストールがapt_pkg.sopython3dist-packagesdirにありませんでした。(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

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

于 2013-12-13T00:16:42.940 に答える
7

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

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

sudo update-alternatives --config python3
于 2019-10-13T15:07:55.113 に答える
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つだけ使用することに専念している場合にも当てはまります。

于 2018-08-29T21:24:53.930 に答える
3

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

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

于 2017-08-22T17:51:45.880 に答える
3

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

ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so 
于 2018-10-05T04:07:39.430 に答える
3

私は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'

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

sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so
于 2020-07-07T14:24:11.463 に答える
1

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

于 2020-03-07T12:09:48.930 に答える
1

4時間を費やした後、私は最終的に私のために働いたこの解決策を手に入れました。これが役立つことを願っています...

古いPythonバージョンからアップグレードすると、一部のパッケージが以前のバージョンパスのままになることがあることを理解することが重要です。そのため、私が行ったことは次のとおりです。

cd /usr/lib/python3/dist-packages

apt_pkg.cpython-35m-x86_64-linux-gnu.soまたは34mまたは36mという名前のファイルの存在を確認し、ファイルが見つかったら、現在のapt_pkg.soファイルを削除します。

/usr/lib/python3/dist-packages

apt_pkg.so最後に、次のように正しいパスでリンクを作成します。

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

今、あなたは再試行することができ、それはうまくいくはずです。

于 2021-04-29T00:42:02.040 に答える
1

この変種は私のために働きます。

cd  /usr/lib/python3/dist-packages
ls -la /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so

以下に示すように、シンボリックリンクのレベルが多すぎるというエラーメッセージが表示された場合:

cp: failed to access '/usr/lib/python3/dist-packages/apt_pkg.so': Too many levels of symbolic links

次に、apt_pkg.soファイルのリンクを解除する必要があります。次のコマンドを使用します。

sudo unlink apt_pkg.so

そして、コマンドを使用します

sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so

幸運を!

元の回答:https ://askubuntu.com/a/1227625

于 2021-07-19T13:16:56.560 に答える
1

リンクを作成しようとしましたが、他にも多くの問題が発生しました。したがって、古いバージョンのpythonを選択して、以下を使用してインストールできます。

sudo update-alternatives --config python3

そして、同じコマンドを使用した直後に、目的のバージョンに戻ります。それがうまくいくことを願っています。

于 2021-07-29T18:57:21.843 に答える
0

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

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

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

3-ファイル「apt_pkg.cpython-35m-x86_64-linux-gnu.so」を複製ます

4-この複製されたファイルの名前を「apt_pkg.cpython-36m-x86_64-linux-gnu.so」に変更ます

それでおしまい!

于 2020-04-23T00:30:40.593 に答える
0

さて、私にとって最もクリーンな解決策は、特定のスペースで、新しいPythonバージョンを使用して関連ライブラリを再構築することです。

私は今これを行っており、Python3.9からPython3.10.1に切り替えています。

それで:

cd /tmp/
apt source python3-apt
cd python-apt-version-ecc
python3-new-version setup.py build
python3-new-version setup.py install

これは依存関係パッケージ(、、software-propertiesなどpython-launchpadlib)でも実行されadd-apt-repository、チャームのように機能するようになりました。

再コンパイルするものはどれですか?単に実行の不満に気をつけてadd-apt-repositoryください。

ちなみに、私はにUbuntu 21.04いますが、ロジックはどのDebianのようなシステムでも同じです。

于 2021-12-20T20:48:18.817 に答える
-1

次のドキュメントを確認してください。

それはあなたが問題を解決するのを助けるかもしれません。

PythonバージョンをModuleNotFoundErrorに置き換える問題を解決します:「apt_pkg」という名前のモジュールがありません

于 2020-03-18T19:23:14.713 に答える
-4

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

export LC_ALL="en_US.UTF-8"

export LC_CTYPE="en_US.UTF-8"
于 2019-02-21T05:27:20.890 に答える
-6

別の人に役立つ場合に備えて、リンクpython3をリダイレクトしてから、正しいpythonバージョンにリダイレクトすることで、Pythonバージョンの競合が原因であると思われるこの問題を最終的に解決しました。

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

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

python3 -V
于 2018-01-05T15:37:22.250 に答える