Jestem użytkownikiem Debiana i chcę zainstalować python-dev, ale kiedy uruchamiam kod w powłoce jako root:
# aptitude install python-dev
Otrzymuję następujący błąd:
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 28, in <module>
import apt_pkg
ImportError: No module named apt_pkg
Co wydaje się być problemem i jak mogę go rozwiązać?
python
linux
installation
debian
Belphegor
źródło
źródło
Odpowiedzi:
Upewnij się, że masz działający pakiet python-apt. Możesz spróbować usunąć i ponownie zainstalować ten pakiet, aby rozwiązać problem z brakiem lokalizacji apt_pkg.so.
źródło
apt-get remove --purge python-apt
i zainstaluj ponowniepython-apt
brzmi raczej niebezpiecznie !! Raz nauczyłem się lekcji i nie spróbuję.Spotkałem ten problem podczas robienia
sudo apt-get update
. Mój env to debian8, z python2.7 + 3.4 (domyślnie) + 3.5.Poniższy kod ponownie utworzy
apt_pkg....so
plik tylko dla języka Python 3.5Poniższy kod rozwiązał mój problem,
Więc oczywiście python3-apt sprawdza najwyższą wersję języka Python, zamiast bieżącej używanej wersji języka.
źródło
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
należy zmienić nasudo 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
python3.6, a ten przerażający błąd już zniknął.sudo apt install python3.7
Dostałem ten błąd apt_pkg próbuje uruchomić pip, więc potrzebne do uruchomieniacd /usr/lib/python3/dist-packages
następniesudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so
potemsudo apt install python3-pip
.sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
Rozwiąż to w ten sposób:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
Lub:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
Zasadniczo, jeśli masz ochotę
No such file or directory
tylkols
spróbować uzyskać właściwą nazwę.źródło
/usr/lib/python3/dist-packages
i zobaczyłem, że nie mamapt_pkg.cpython-34m-i386-linux-gnu.so
lubapt_pkg.cpython-3m-i386-linux-gnu.so
, ale miałemapt_pkg.cpython-36m-i386-linux-gnu.so
... Skopiowałem ten plikapt_pkg.so
i działałem idealnie! Dzięki!Zdarzyło mi się to na Ubuntu 18.04.2 po tym, jak próbowałem zainstalować Python3.7 z repozytorium Deadsnakes.
Rozwiązanie było takie
1)
cd /usr/lib/python3/dist-packages/
2)
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
źródło
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
Ten błąd często występuje, gdy nowsza wersja Pythona została zainstalowana razem ze starszą wersją, np.;
Uruchom polecenie korzystające z modułu apt_pkg i otrzymaj błąd, taki jak;
from CommandNotFound.db.db import SqliteDatabase File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module> import apt_pkg
Kiedy zainstalujemy wersję python3 nie będącą dystrybucją za pomocą apt, ustawimy katalog współdzielonego modułu na katalog python3, którym zwykle będzie
/usr/lib/python3
.W większości przypadków będzie to w porządku, ale w pewnych okolicznościach różne wersje Pythona zależą od innych bibliotek lub współdzielonych obiektów / bibliotek niż inne wersje Pythona, więc jak wskazywały inne odpowiedzi, musimy połączyć .SO z poprawna wersja Pythona. Więc jeśli mamy zainstalowany python3.6 w systemie 64-bitowym, to link apt_pkg .SO będzie
Ale problem polega na tym, że kiedy zainstalujemy nowszą wersję Pythona, odsyłacz zaktualizuje się, aby wskazywał najnowszą wersję Pythona, co prowadzi do błędu nie znalezienia modułu apt_pkg. Sprawdzając, która wersja Pythona jest dostarczana z twoją dystrybucją, możesz utworzyć łącze, jak pokazano powyżej. Lub używamy metody, aby zaoferować poleceniu wybór wersji Pythona do połączenia .SO, na przykład;
Ponieważ python utworzy odnośnik do najnowszej zainstalowanej wersji pythona, dajemy komendę możliwość wyboru spośród 3 wersji pythona, z których wybierze najwyższą podaną wersję.
źródło
Rozwiązanie @ user8178061 działało dobrze, ale zrobiłem to z pewnymi modyfikacjami dla mojej wersji, która jest
python3.7
z UbuntuI otrzymuje
apt_pkg.cpython-3m-i386-linux-gnu.so
zapt_pkg.cpython-36m-x86_64-linux-gnu.so
Tutaj dwa polecenia do wykonania:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
źródło
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
aby było jasne, coapt_pkg.so
to jest.sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so
z jakiegoś powodu musiałem to zmienićTo zadziałało dla mnie po aktualizacji Pythona3.7 na ubuntu18.04
źródło
Z jakiegoś powodu brakowało mojej instalacji
apt_pkg.so
w katalogu dist-packages python3. (apt_pkg.cpython-33m-x86_64-linux-gnu.so
był ?!), ale i musiałem utworzyć łącze symboliczneapt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so
w/usr/lib/python3/dist-packages
Nie jestem pewien, czy moja aktualizacja została zepsuta ani dlaczego tak się stało. Wystąpił po próbie aktualizacji (precyzyjne-> raring-> quantal upgrade)
źródło
python --version Python 3.7.5
cd
do/usr/lib/python3/dist-packages
i sprawdźapt_pkg.*
pliki. Przekonasz się, że nie ma żadnego dla twojej domyślnej wersji Pythona:źródło
Ostatecznością jest sytuacja,
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
gdyln
polecenie jest dla ciebie zbyt duże lub w jakiś magiczny sposób nie działa.cp
powyżej może być również,mv
jeśli chcesz używać tylko jednej wersji Pythona.źródło
jeśli używasz pythona 3.7, obniż go do pythona 3.6, aktualizując alternatywy, to zadziałało dla mnie
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --config python3
źródło
Jeśli używasz Pythona 3.5, przejdź na starszą wersję 3.4. To najbezpieczniejszy ruch.
Poniżej
/usr/lib/python3/dist-packages
zobaczysz,*34m*
którego Pythona 3.5 nie można używać. zhazha odpowiedz link symboliczny do niego.źródło
Oprócz tworzenia dowiązania symbolicznego dla
apt_pkg.so
, możesz chcieć zrobićapt_inst.so
w ten sam sposóbapt_pkg.so
.źródło
Widzę, jak wszyscy mówią, jak to naprawić za pomocą dziwnego kopiowania itp., Ale nikt tak naprawdę nie powiedział, dlaczego problem występuje.
Pozwólcie, że wyjaśnię, tym z was, którzy tak jak ja nie chcą bawić się plikami systemowymi tylko dlatego, że ktoś im o tym powiedział.
Problemem jest:
~$ 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
to pakiet systemowy, więc jest przeznaczony dla domyślnego systemu pythonW ten sposób skrypty zawsze uzyskują wersję, do której aktualnie jest dowiązana
python3
, ale zawiodą, ponieważ nie ma pakietu apt.Ogólne rozwiązanie: NIGDY nie zmieniaj domyślnego
python3
łącza. Zawsze. Dotyczy to równieżpython
linku - jeśli aplikacja została napisana w Pythonie2 z niektórymi starymi elementami składni, które nie działają w Python3, aplikacja nie będzie działać.[Mój terminal się zepsuł, ponieważ używam Terminatora, który najwyraźniej jest napisany w Pythonie2.7 niekompatybilnym z Python3.]
Przedstawione tutaj rozwiązania sugerują kopiowanie / łączenie plików pakietu apt lub zmianę
python3
łącza.Przeanalizujmy oba:
Nie powinno to stanowić problemu, ponieważ w okolicach Pythona 3.4 wszystkie skrypty Pythona działają również na nowszych wersjach.
Jak dotąd. Ale może się zepsuć w przyszłości - jeśli utrzymasz swój system wystarczająco długo.
python3
łącza z powrotemTo świetne rozwiązanie, ponieważ możemy wrócić do „nigdy przenigdy nie zmieniać linku”
„Ale ja lubię pisać po prostu
python
!” - Też to lubię! Tak właśnie doszedłem do tego problemu!Ogólnie rzecz biorąc, należy unikać ręcznej zmiany łączy systemowych -
update-alternatives
zamiast tego używaj do łączenia różnych wersji . Dotyczy to każdej aplikacji z wieloma wersjami. To nadal spowoduje uszkodzenie skryptów systemowych (ponieważ zmienia łącze), ale możesz łatwo przełączać się tam i z powrotem, nie martwiąc się, czy umieścisz link i miejsce docelowe we właściwej kolejności, czy popełniłeś literówkę.Rozważ użycie innej nazwy niż
python
/python3
dla swojego łącza lub aliasu.Lub dodaj własne
python
/python3
link do PATH (tak jak robią to środowiska wirtualne), bez zmiany linków systemowych.źródło
Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)
Ta odpowiedź reddit (lekko zmodyfikowana zadziałała dla mnie)
sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
źródło
Zapoznaj się z następującą dokumentacją. To na pewno rozwiąże problem. http://www.programmersought.com/article/55001874709/
źródło
Żadna z odpowiedzi nie zadziałała dla mnie (używam Ubuntu 16.04 i Python 3.6). Więc ostatecznie rozwiązałem problem w następujący sposób:
1- Połącz się z FTP serwera
2- przejdź do folderu „/ usr / lib / python3 / dist-packages /”
3 - zduplikuj plik „apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so”
4- zmień nazwę tego zduplikowanego pliku na „apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so”
Otóż to!
źródło
Jestem na Ubuntu 16.04 i zaktualizowałem do Pythona 3.7. Oto błąd, który miałem podczas próby dodania 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'
Udało mi się naprawić ten błąd, tworząc dowiązanie symboliczne z moim początkowym pythonem 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.so, tworząc następujące dowiązanie symboliczne
źródło
Spróbuj to naprawić, ustawiając zmienne regionalne:
export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
źródło
Na wszelki wypadek, gdyby to pomogło innemu, w końcu rozwiązałem ten problem, który najwyraźniej był spowodowany konfliktami wersji Pythona, przekierowując link python3, a następnie przekierowując go do właściwej wersji Pythona:
sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.4
Może być konieczne wprowadzenie poprawnej wersji Pythona, znalezionej za pomocą:
źródło