python-dev yükleme hatası: ImportError: apt_pkg adlı modül yok


95

Ben Debian kullanıcısıyım ve python-dev kurmak istiyorum, ancak kodu kabukta bir kök olarak çalıştırdığımda:

# aptitude install python-dev

Aşağıdaki hatayı alıyorum:

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

Sorun ne gibi görünüyor ve bunu nasıl çözebilirim?


1
apt-get install python-dev yüklemeyi denediğinizde ne olur
Pierre Geier

Apt-get install python-dev ile denediğimde zaten kurulu olduğunu söylüyor: Paket listeleri okunuyor ... Bitti Bağımlılık ağacı inşa ediliyor Durum bilgisi okunuyor ... Bitti python-dev zaten en yeni sürüm. 0 yükseltildi, 0 yeni yüklendi, 0 kaldırılacak ve 0 yükseltilmedi. Başka öneriniz var mı?
Belphegor

Yanıtlar:


63

Çalışan bir python-apt paketiniz olduğundan emin olun. Apt_pkg.so'nun bulunamamasıyla ilgili sorunu çözmek için bu paketi tekrar deneyip kaldırıp kurabilirsiniz.

apt-get install python-apt

Zaten yüklü. Tıkladığımda: # apt-get install python-apt bana veriyor Paket listelerini okuyor ... Bitti Bağımlılık ağacı oluşturuyor Durum bilgisi okuyor ... Bitti python-apt zaten en yeni sürüm. 0 yükseltildi, 0 yeni yüklendi, 0 kaldırılacak ve 0 yükseltilmedi. Ve tekrar denediğimde: # aptitude install python-dev Bana yine aynı hatayı veriyor. Diğer bazı fikirler ne yapmalıyım?
Belphegor

14
kullanarak çıkarın apt-get remove --purge python-aptve tekrar kurun
Arnestig

8
Diğer bağımlılıkların farkında olun. Paketi Ubuntu'da (çok) hızlı bir şekilde kaldırdım ve diğer birçok bağımlılık da kaldırıldı (örn. Ubuntu-desktop). Ancak günlükteki notlara dikkat etmemek benim hatam.
Al R.

1
Python-apt'tan mı kaynaklandığından pek emin değilim. Ubuntu-masaüstüne bağımlılıklar için packages.ubuntu.com/lucid/ubuntu-desktop sayfasına bakın .
Arnestig

2
@Arnestig KALDIRMA python-aptoldukça tehlikeli geliyor !! Dersimi bir kez öğrendim ve denemeyeceğim.
alvas

140

Bunu yaparken bu problemle karşılaştım sudo apt-get update. Ortamım, python2.7 + 3.4 (varsayılan) + 3.5 ile debian8.

Aşağıdaki kod yalnızca apt_pkg....sopython 3.5 için bir dosya oluşturacaktır

sudo apt-get install python3-apt --reinstall

Aşağıdaki kod sorunumu çözdü,

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

Dolayısıyla, açık bir şekilde, python3-apt, kullanımda olan mevcut python sürümü yerine en yüksek python sürümünü kontrol eder.


27
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.soşu şekilde değiştirilmelidir sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so apt_pkg.so
desaiankitb

38
Harikasın! Benim sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.soiçin bu python3.6 içindi ve bu korkunç hata artık ortadan kalktı.
Alex Gurrola

54
Python sudo apt install python3.73.7'yi Ubuntu 18.04'te varsayılan 3.6'nın yanına yükledikten sonra pip çalıştırmaya çalışırken bu apt_pkg hatasını aldım, bu yüzden cd /usr/lib/python3/dist-packageso sudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.sozaman çalıştırmam gerekiyordu sudo apt install python3-pip.
abulka

3
python 3.6 için komut şu şekilde olacaktırsudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
StatguyUser

1
Bu parantezler ln komutunun bir özelliği değil. Kabuk ayracı genişletmesini çağırırlar
Carlos A. Ibarra

113

Bunu şu şekilde çözün:

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

Veya:

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

Eğer bir olsun, temelde, No such file or directorysadece lssağ adını almak için denemek için.


Mükemmel çalışıyor
Subhrajyoti Sen

3
Ubuntu 18.04'te, bu $ cd / usr / lib / python3 / dist-paketlerini kullanın $ sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Naren Yellavula

Bu benim için de işe yaradı ... üzerindeki tüm dosyaları listeledim /usr/lib/python3/dist-packagesve apt_pkg.cpython-34m-i386-linux-gnu.soya da olmadığını gördüm apt_pkg.cpython-3m-i386-linux-gnu.soama apt_pkg.cpython-36m-i386-linux-gnu.so... Bu dosyayı kopyaladım apt_pkg.sove mükemmel çalıştım! Teşekkürler!
Leonardo Isso

Bu benim için de çalıştı. @LeonardoIsso'nun yaptığı gibi, uygun dosya adını bulmak için tüm dosyaları listeledim çünkü 32 bit Linux'tayım.
w3

59

Bu, deadsnakes deposundan Python3.7'yi kurmaya çalıştıktan sonra Ubuntu 18.04.2'de başıma geldi.

Çözüm şuydu

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

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


3
Sadece bunun benim için gerçekten işe yaradığını başkalarına doğrulamak istedim.
AnthonyD973

2
bu çılgınca, teşekkürler! 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
Docker'da

2
Evet, çözüm
buydu

1
çözüm bu! Python 3.7'ye yükselttikten sonra.
JOHN

1
18.04.04, python 3.7'ye yükseltme ve bu benim için de çalıştı! Teşekkürler!!
RJaus

18

Bu hata genellikle daha eski bir sürümle birlikte daha yeni bir python sürümü yüklendiğinde ortaya çıkar;

  • Ubuntu 18.04.1, python 3.6.6 sürümüyle birlikte gelir
  • Yüklü ppa: deadsnakes / python3.7.1 veya alternatif
  • Apt_pkg modülünü kullanan bir komut çalıştırın ve aşağıdaki gibi bir hata alın;

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

Apt ile dağıtım dışı bir python3 sürümü kurduğumuzda, paylaşılan bir modül dizinini python3'ünki olarak ayarlayacaktır, çoğu zaman öyle olacaktır /usr/lib/python3.

Çoğu zaman bu uygun olacaktır, ancak bazı durumlarda python'un farklı sürümleri, diğer python sürümünden farklı kitaplıklara veya paylaşılan nesnelere / kitaplıklara dayanır, bu nedenle diğer yanıtlar .SO'yu doğru python sürümü. Dolayısıyla, 64 bitlik bir sisteme python3.6 yüklüyse, apt_pkg .SO bağlantısı

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

Ancak sorun, daha yeni bir python sürümü kurduğumuzda, bağlantının en yeni python sürümüne işaret edecek şekilde güncellenmesi ve apt_pkg modülünün bulunamamasına neden olması gerçeğinde yatmaktadır. Hangi python sürümünün dağıtımınızla birlikte geldiğini kontrol ederek bağlantıyı yukarıda gösterildiği gibi oluşturabilirsiniz. Veya komuta .SO'yu bağlamak için çeşitli python sürümleri sunmak için bir yöntem kullanırız;

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

Python bu bağlantıyı en yeni kurulan python sürümüne oluşturacağından, komuta verilen en yüksek sürümü seçeceği 3 python sürümü arasından seçim yapma seçeneği veriyoruz.


2
18.04.2'yi çalıştırdığınızda, ilk öneriniz benim için çalıştı ve sonunda sudo apt-get güncellemesini hatasız çalıştırabildim. İkinci öneriniz apt-get.so'nun bir klasör olmadığını söyleyen bir hata döndürüyor.
CloseISQ

15

@ User8178061 çözümü iyi çalıştı ancak python3.7Ubuntu ile olan sürümüm için bazı değişiklikler yaptım

Ben yerini apt_pkg.cpython-3m-i386-linux-gnu.soileapt_pkg.cpython-36m-x86_64-linux-gnu.so

İşte çalıştırılacak iki komut:

cd /usr/lib/python3/dist-packages

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


1
Bu benim sorunumu çözdü. Bu, Python sürümünün 3.6'dan 3.7'ye değiştirilmesinden kaynaklanıyorsa sorunu çözer.
JThistle

1
Teşekkürler, aynı sorunu yaşadım! Kullanmayı düşünün, sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.soböylece ne apt_pkg.soolduğu açık .
Scipio

İşe yaradı, ancak bir sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.sonedenden dolayı bunu değiştirmem
Daniel

8

Bu, ubuntu18.04'te python3.7'yi güncelledikten sonra benim için çalıştı

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

1
Bu , ubuntu18.04'te python 3.8'i yükselttikten sonra benim için çalıştı .
Henry Palacios

6

Bazı nedenlerden dolayı yüklemem apt_pkg.sopython3 dağıtım paketleri dizininde eksikti . ( apt_pkg.cpython-33m-x86_64-linux-gnu.so?! yoktu) ama ben link edin zorunda apt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so içinde/usr/lib/python3/dist-packages

Yükseltmemin bozuk olup olmadığından veya bunun neden olduğundan emin değilim. Yükseltmeyi denedikten sonra oluştu (kesin-> nadir-> kuantal yükseltme)


Bu benim için doğru düzeltmeydi. Kötü bir fikir olduğunu bilmeme rağmen bu soruna pip3'ü root olarak kullanarak neden oldum. Parmağımı bir ışık soketine koyarsam ne kadar şok olacağımı görmek istedim. Cevap: oldukça kötü. Ayrıca / etc / alternatives kurulumuyla uğraşmak kalp hırsızlığı için değildir. Yarı zamanlı ziyaretçi olan hiç kimse için değil. Beni felakete giden yolda başlatan hangi python bağlantısının hangi python'a işaret ettiğini aşmanın bir problem olduğunu düşünüyorum.
pauljohn32

6
  1. Varsayılan Python 3 sürümünüzü kontrol edin:
python --version
Python 3.7.5
  1. cdiçine /usr/lib/python3/dist-packagesve çek apt_pkg.*dosyaları. Varsayılan Python sürümünüz için hiçbirinin olmadığını göreceksiniz:
ll apt_pkg.*
apt_pkg.cpython-36m-x86_64-linux-gnu.so
  1. Sembolik bağlantıyı oluşturun:
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64- linux-gnu.so 

5

Bir son çare 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 ise lnkomut sizin için çok fazla ya da sihirli bir şekilde iş yapmaz.

cpYukarıdakiler, mvyalnızca bir Python sürümünü kullanmaya adanmışsanız da olabilir.


3

Python 3.5 kullanıyorsanız, 3.4'e düşürün. Bu yapılacak en güvenli hareket.

Altında hangi python 3.5'in kullanamayacağını /usr/lib/python3/dist-packagesgöreceksiniz *34m*. zhazha buna symlink yanıt.


nasıl düşürürsün?
Pynchia

indirgeme neden en güvenli aktindir?
David Medinets

3

İçin sembolik bir bağ kurmanın yanı sıra , aynı şekilde apt_pkg.soyapmak isteyebilirsiniz .apt_inst.soapt_pkg.so

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

3

python 3.7 kullanıyorsanız, Alternatifleri güncelleyerek python 3.6'ya düşürün, Bu benim için çalıştı

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

sudo update-alternatives --config python3

Bu benim için python3.6 ile çalıştı ancak python3.7'ye geri döndüğümde hata hala orada
Hugo Sohm

1

Herkesin garip kopyalama vb. İle nasıl düzeltileceğini söylediğini görüyorum, ancak kimse sorunun neden oluştuğunu gerçekten söylemedi .

Öyleyse açıklamama izin verin, benden hoşlananlarınız için sistem dosyalarıyla uğraşmak istemiyorsunuz çünkü SO'daki biri onlara böyle söyledi.


Problem şu:

  • birçok sistem betiklerinde python3 shebang kodludur. Kendiniz kontrol edebilirsiniz:
~$ 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 paketi python-apt/ python3-aptbir sistem paketidir, bu nedenle varsayılan sistem python içindir

Bu nedenle, betikler her zaman şu anda bağlı olan sürümü alır python3, ancak apt paketi olmadığı için başarısız olur.


Genel çözüm: Varsayılan python3bağlantıyı ASLA değiştirmeyin . Hiç. Bu aynı zamanda pythonbağlantı için de geçerlidir - eğer bir uygulama Python2'de Python3'te çalışmayan bazı eski sözdizimi öğeleriyle yazılmışsa, uygulama çalışmayacaktır.

[Terminalim bu şekilde bozuldu çünkü Python2.7 ile yazılmış ve Python3 ile uyumlu olmadığı anlaşılan Terminator kullanıyorum.]


Burada sunulan çözümler apt paket dosyalarının kopyalanmasını / bağlanmasını veya python3bağlantıyı değiştirmeyi önerir .

İkisini de inceleyelim:

  1. Apt paketini kopyalama / bağlama

Bu bir sorun olmamalı çünkü Python3.4 civarında tüm python betikleri daha yeni sürümlerde de çalışıyor.

Şimdiye kadar. Ancak gelecekte bozulabilir - eğer sisteminizi yeterince uzun tutarsanız.

  1. python3Bağlantıyı geri değiştirme

Bu harika bir çözüm çünkü "bağlantıyı asla değiştirmemeye" geri dönebiliriz


"Ama sadece yazmak zorunda kalmayı seviyorum python!" - Ben de severim! İlk etapta bu soruna böyle geldim!

  1. Genel olarak, sistem bağlantılarını manuel olarak değiştirmekten kaçınmalısınız - update-alternativesbunun yerine farklı sürümleri bağlamak için kullanın . Bu, birçok sürümü olan tüm uygulamalar için geçerlidir. Bu yine de bu sistem betiklerini bozacaktır (çünkü bağlantıyı değiştirir), ancak bağlantıyı ve hedefi doğru sıraya koyup koymadığınız veya bir yazım hatası yapıp yapmadığınız konusunda endişelenmeden kolayca ileri geri geçiş yapabilirsiniz.

  2. Bağlantınız veya takma adınız için python/ dışında başka bir ad kullanmayı düşünün python3.

  3. Veya sistem bağlantılarını değiştirmeden kendi python/ python3bağlantınızı PATH'a ekleyin (tıpkı sanal ortamlarda olduğu gibi).


0

Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)

Bu reddit cevabı (biraz değiştirildi benim için çalıştı)

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



0

Cevapların hiçbiri benim için işe yaramadı (Ubuntu 16.04 ve Python 3.6 kullanıyorum). Sonunda sorunu şu şekilde çözdüm:

1- Sunucunun FTP'sine bağlanın

2- "/ usr / lib / python3 / dist-packages /" klasörüne gidin

3- "apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so" dosyasını çoğaltın

4- Bu çoğaltılan dosyayı "apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so" olarak yeniden adlandırın

Bu kadar!


0

Ubuntu 16.04'teyim ve Python 3.7'ye yükseltildim. İşte bir PPA eklemeye çalışırken yaşadığım hata

    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'

Bu hatayı, aşağıdaki sembolik bağlantıyı oluşturarak ilk python 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.so ile sembolik bağlantı yaparak düzeltebildim

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

1
Görünüşe göre bu çözüm, bu soruya en az 6 başka yanıtta önerilmiş gibi görünüyor (ve 3 tane daha sembolik bağlantı yerine dosyayı kopyalamayı önerdi).
Sergey Shubin

bu sadece benim için çalışıyor, teşekkürler! Bundan önce bir şey cd / usr / lib / python3 / dist-packages
Hao Yellow

-3

Lütfen yerel ayar değişkenlerini ayarlayarak bunu düzeltmeyi deneyin:

export LC_ALL="en_US.UTF-8"

export LC_CTYPE="en_US.UTF-8"

1
Daha spesifik olmaya çalışın ve bu iki komutun ne yaptığını açıklayın.
dpapadopoulos

-5

Bir başkasına yardımcı olması durumunda, sonunda python sürüm çakışmalarının neden olduğu bu sorunu, python3 bağlantısını yeniden yönlendirerek ve ardından doğru python sürümüne yönlendirerek çözdüm:

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

Aşağıdakilerle bulunan doğru python sürümünü girmeniz gerekebilir:

python3 -V

2
python3'ü kaldırmak kötü bir fikirdir :( python 3.4'e bağlantı istiyorsanız şunu kullanın: ln -s /usr/bin/python3.4 / usr / bin / python3
Pamungkas Jayuda

1
Gerçekten gerekmedikçe insanlara bir şeyleri sistemden kaldırmalarını söylemek asla iyi bir fikir değildir. Neyse ki / usr / bin / python3 normalde zaten sembolik bir bağlantıdır. Gerçekten bu cevabı silmen gerektiğini düşünüyorum.
Jamie Lindsey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.