Saya adalah pengguna Debian, dan saya ingin menginstal python-dev, tetapi ketika saya menjalankan kode di shell sebagai root:
# aptitude install python-dev
Saya mendapatkan kesalahan berikut:
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 28, in <module>
import apt_pkg
ImportError: No module named apt_pkg
Apa yang tampaknya menjadi masalah dan bagaimana cara mengatasinya?
python
linux
installation
debian
Belphegor
sumber
sumber
Jawaban:
Pastikan Anda memiliki paket python-apt yang berfungsi. Anda dapat mencoba dan menghapus dan menginstal paket itu lagi untuk memperbaiki masalah dengan apt_pkg.so tidak ditemukan.
sumber
apt-get remove --purge python-apt
dan instal lagipython-apt
terdengar agak berbahaya !! Mempelajari pelajaran saya sekali dan saya tidak akan mencobanya.Saya menemui masalah ini saat melakukannya
sudo apt-get update
. Env saya adalah debian8, dengan python2.7 + 3.4 (default) + 3.5.Kode berikut hanya akan membuat ulang
apt_pkg....so
file untuk python 3.5Kode berikut memecahkan masalah saya,
cd /usr/lib/python3/dist-packages sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
Jadi, jelas, python3-apt memeriksa versi python tertinggi, bukan versi python saat ini yang digunakan.
sumber
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
harus diubah menjadisudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so apt_pkg.so
sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
untuk python3.6, dan bug mengerikan ini sekarang hilang.sudo apt install python3.7
saya punya kesalahan apt_pkg ini mencoba menjalankan pip, jadi saya diperlukan untuk menjalankancd /usr/lib/python3/dist-packages
kemudiansudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so
kemudiansudo apt install python3-pip
.sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
Selesaikan dengan ini:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
Atau:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
Pada dasarnya, jika Anda
No such file or directory
hanyals
mencoba untuk mendapatkan nama yang tepat.sumber
/usr/lib/python3/dist-packages
, dan saya melihat bahwa saya tidak memilikiapt_pkg.cpython-34m-i386-linux-gnu.so
atauapt_pkg.cpython-3m-i386-linux-gnu.so
, tetapi saya telahapt_pkg.cpython-36m-i386-linux-gnu.so
... Saya menyalin file ini keapt_pkg.so
dan bekerja dengan sempurna! Terima kasih!Ini terjadi pada saya di Ubuntu 18.04.2 setelah saya mencoba menginstal Python3.7 dari repo deadsnakes.
Solusinya adalah ini
1)
cd /usr/lib/python3/dist-packages/
2)
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
sumber
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
Kesalahan ini akan sering terjadi ketika versi python yang lebih baru telah diinstal bersama dengan versi yang lebih lama misalnya;
Jalankan perintah yang menggunakan modul apt_pkg dan dapatkan kesalahan seperti;
from CommandNotFound.db.db import SqliteDatabase File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module> import apt_pkg
Ketika kita menginstal versi python3 non-distro dengan apt itu akan mengatur direktori modul bersama menjadi python3 yang paling biasanya
/usr/lib/python3
.Sebagian besar waktu ini akan baik-baik saja, tetapi dalam beberapa keadaan, versi python yang berbeda bergantung pada pustaka yang berbeda atau objek / pustaka bersama daripada versi python lainnya, jadi seperti yang ditunjukkan oleh jawaban lain, kami perlu menautkan .SO ke versi python yang benar. Jadi jika kita menginstal python3.6 pada sistem 64bit maka tautan apt_pkg .SO akan menjadi
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Tetapi masalahnya terletak pada kenyataan bahwa ketika kita menginstal versi python yang lebih baru, tautan akan diperbarui untuk mengarah ke versi python terbaru, yang menyebabkan kesalahan modul apt_pkg tidak ditemukan. Dengan memeriksa versi python yang dikirimkan dengan distro Anda, Anda dapat membuat tautan seperti yang ditunjukkan di atas. Atau kami menggunakan metode untuk menawarkan perintah pilihan versi python untuk menghubungkan .SO seperti;
sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so
Karena python akan membuat tautan ini ke versi python yang terinstal terbaru, kami memberikan perintah opsi untuk memilih dari 3 versi python, yang akan memilih versi tertinggi yang diberikan.
sumber
Solusi @ user8178061 bekerja dengan baik tetapi saya melakukannya dengan beberapa modifikasi untuk versi saya
python3.7
dengan UbuntuSaya mengganti
apt_pkg.cpython-3m-i386-linux-gnu.so
denganapt_pkg.cpython-36m-x86_64-linux-gnu.so
Di sini dua perintah untuk dieksekusi:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
sumber
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
sehingga jelas apaapt_pkg.so
itu.sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so
karena suatu alasanIni berfungsi untuk saya setelah memperbarui python3.7 di ubuntu18.04
cd /usr/lib/python3/dist-packages sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
sumber
Untuk beberapa alasan instalasi saya hilang
apt_pkg.so
di dir python3 dist-packages. (apt_pkg.cpython-33m-x86_64-linux-gnu.so
ada di sana ?!) tapi dan saya harus membuat symlinkapt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so
di/usr/lib/python3/dist-packages
Saya tidak yakin apakah peningkatan saya rusak atau mengapa hal ini terjadi. Itu terjadi setelah mencoba meningkatkan (presisi-> raring-> peningkatan kuantitatif)
sumber
python --version Python 3.7.5
cd
ke dalam/usr/lib/python3/dist-packages
dan periksaapt_pkg.*
file. Anda akan menemukan bahwa tidak ada untuk versi Python default Anda:ll apt_pkg.* apt_pkg.cpython-36m-x86_64-linux-gnu.so
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64- linux-gnu.so
sumber
Pilihan terakhir adalah
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.so
jikaln
perintah terlalu banyak untuk Anda atau entah bagaimana secara ajaib tidak berfungsi.cp
di atas juga bisamv
jika Anda hanya berdedikasi untuk menggunakan satu versi Python.sumber
jika Anda menggunakan python 3.7, turunkan ke python 3.6 dengan memperbarui Alternatif, Ini berhasil untuk saya
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --config python3
sumber
Jika Anda menggunakan python 3.5, downgrade ke 3.4. Itu langkah teraman yang harus dilakukan.
Di bawah
/usr/lib/python3/dist-packages
Anda akan melihat*34m*
python 3.5 mana yang tidak dapat digunakan. zhazha menjawab symlink ke sana.sumber
Selain membuat tautan simbolis
apt_pkg.so
, Anda mungkin ingin membuatapt_inst.so
dengan cara yang samaapt_pkg.so
.ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so
sumber
Saya melihat semua orang mengatakan bagaimana memperbaikinya dengan penyalinan aneh dll, tetapi tidak ada yang benar-benar mengatakan mengapa masalah itu terjadi.
Jadi izinkan saya menjelaskan, bagi Anda yang menyukai saya tidak ingin mengacaukan file sistem hanya karena seseorang di SO yang memberi tahu mereka.
Masalahnya adalah:
~$ 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
/python3-apt
adalah paket sistem, jadi ini untuk sistem default pythonJadi, skrip akan selalu mendapatkan versi yang saat ini ditautkan
python3
, tetapi gagal karena paket apt tidak ada.Solusi umum: JANGAN PERNAH mengubah
python3
tautan default . Pernah. Ini juga berlaku untukpython
tautan - jika aplikasi ditulis dengan Python2 dengan beberapa elemen sintaks lama yang tidak berfungsi di Python3, aplikasi tidak akan berfungsi.[Terminal saya rusak seperti itu karena saya menggunakan Terminator, yang tampaknya ditulis dengan Python2.7 tidak kompatibel dengan Python3.]
Solusi yang disajikan di sini menyarankan untuk menyalin / menautkan file paket apt atau mengubah
python3
tautan.Mari kita analisis keduanya:
Ini seharusnya tidak menjadi masalah karena dari sekitar Python3.4 semua skrip python juga berfungsi pada versi yang lebih baru.
Sejauh ini. Tetapi mungkin rusak di masa depan - jika Anda mempertahankan sistem Anda cukup lama.
python3
link kembaliIni adalah solusi yang bagus karena kita bisa kembali ke "jangan pernah mengubah tautan"
"Tapi aku suka mengetik saja
python
!" - Aku juga menyukainya! Begitulah cara saya mengatasi masalah ini sejak awal!Secara umum, Anda harus menghindari mengubah tautan sistem secara manual - gunakan
update-alternatives
untuk menautkan versi yang berbeda . Ini berlaku untuk aplikasi apa pun dengan banyak versi. Ini masih akan merusak skrip sistem tersebut (karena memang mengubah tautan), tetapi Anda dapat beralih dengan mudah, tanpa khawatir apakah Anda meletakkan tautan dan tujuan dalam urutan yang benar atau salah ketik.Pertimbangkan untuk menggunakan nama lain selain
python
/python3
untuk tautan atau alias Anda.Atau tambahkan sendiri
python
/python3
tautan Anda ke PATH (seperti yang dilakukan lingkungan virtual), tanpa mengubah tautan sistem.sumber
Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)
Jawaban reddit ini (sedikit diubah berfungsi untuk saya)
sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
sumber
Harap tinjau dokumentasi berikut. Ini pasti akan menyelesaikan masalah. http://www.programmersought.com/article/55001874709/
sumber
Tidak ada jawaban yang berhasil untuk saya (saya menggunakan Ubuntu 16.04 dan Python 3.6). Jadi saya akhirnya menyelesaikan masalah sebagai berikut:
1- terhubung ke FTP server
2- Buka folder "/ usr / lib / python3 / dist-packages /"
3- duplikat file "apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so"
4- Ubah nama file duplikat ini menjadi "apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so"
Itu dia!
sumber
Saya menggunakan Ubuntu 16.04, dan memutakhirkan ke Python 3.7. Berikut adalah kesalahan yang saya alami saat mencoba menambahkan 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'
Saya dapat memperbaiki kesalahan ini dengan membuat tautan simbolis dengan python awal 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.so dengan membuat tautan simbolis berikut
sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so
sumber
Harap coba untuk memperbaikinya dengan menyetel variabel lokal:
export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
sumber
Untuk berjaga-jaga jika membantu yang lain, saya akhirnya menyelesaikan masalah ini, yang ternyata disebabkan oleh konflik versi python, dengan mengarahkan tautan python3, lalu mengarahkannya ke versi python yang benar:
sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.4
Anda mungkin perlu memasukkan versi python yang benar, ditemukan dengan:
sumber