Sou um usuário Debian e quero instalar o python-dev, mas quando executo o código no shell como root:
# aptitude install python-dev
Eu obtenho o seguinte erro:
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 28, in <module>
import apt_pkg
ImportError: No module named apt_pkg
Qual parece ser o problema e como posso resolvê-lo?
python
linux
installation
debian
Belphegor
fonte
fonte
Respostas:
Certifique-se de ter um pacote python-apt funcionando. Você pode tentar remover e instalar esse pacote novamente para corrigir o problema com apt_pkg.so não ser localizado.
fonte
apt-get remove --purge python-apt
e instale-o novamentepython-apt
parece bastante perigoso !! Aprendi minha lição uma vez e não vou tentar.Eu conheci esse problema ao fazer
sudo apt-get update
. Meu env é debian8, com python2.7 + 3.4 (padrão) + 3.5.O código a seguir recriará apenas um
apt_pkg....so
arquivo para python 3.5O código a seguir resolveu meu problema,
Portanto, obviamente, o python3-apt verifica a versão mais recente do python, em vez da versão atual do python em uso.
fonte
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
deve ser alterado parasudo 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
para o python3.6, e esse bug horrível acabou.sudo apt install python3.7
que eu tenho esse erro apt_pkg tentando executar pip, então eu precisava para executarcd /usr/lib/python3/dist-packages
, em seguida,sudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so
em seguidasudo apt install python3-pip
.sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
Resolva assim:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
Ou:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
Basicamente, se você conseguir um,
No such file or directory
apenasls
tente encontrar o nome certo.fonte
/usr/lib/python3/dist-packages
, e vi que não tinhaapt_pkg.cpython-34m-i386-linux-gnu.so
ouapt_pkg.cpython-3m-i386-linux-gnu.so
, mas tinhaapt_pkg.cpython-36m-i386-linux-gnu.so
... Copiei esse arquivo paraapt_pkg.so
e funcionou perfeitamente! Obrigado!Isso aconteceu comigo no Ubuntu 18.04.2 depois que tentei instalar o Python3.7 do repositório deadsnakes.
Solução foi esta
1)
cd /usr/lib/python3/dist-packages/
2)
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
fonte
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
Este erro geralmente ocorre quando uma versão mais recente do python foi instalada junto com uma versão mais antiga, por exemplo;
Execute um comando que usa o módulo apt_pkg e obtenha um erro como;
from CommandNotFound.db.db import SqliteDatabase File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module> import apt_pkg
Quando instalamos uma versão não distro python3 com apt, ele irá definir um diretório de módulo compartilhado para ser o de python3 mais geralmente será
/usr/lib/python3
.Na maioria das vezes isso vai ficar bem, mas em algumas circunstâncias as diferentes versões do python dependem de diferentes bibliotecas ou objetos / bibliotecas compartilhados do que a outra versão do python, portanto, como outras respostas apontaram, precisamos vincular o versão correta do python. Portanto, se tivermos o python3.6 instalado em um sistema de 64 bits, o link apt_pkg .SO seria
Mas o problema reside no fato de que quando instalamos uma versão mais recente do python, o link será atualizado para apontar para a versão mais recente do python, o que leva ao erro do módulo apt_pkg não ser encontrado. Ao verificar qual versão do python vem com sua distribuição, você pode criar o link conforme mostrado acima. Ou usamos um método para oferecer ao comando uma escolha de versões de python para vincular o .SO, como;
Como o python criará este link para a versão mais recente instalada do python, damos ao comando a opção de escolher entre 3 versões do python, das quais ele escolherá a versão mais recente fornecida.
fonte
A solução do @ user8178061 funcionou bem mas fiz algumas modificações para a minha versão que é
python3.7
com UbuntuEu substituí o
apt_pkg.cpython-3m-i386-linux-gnu.so
porapt_pkg.cpython-36m-x86_64-linux-gnu.so
Aqui estão os dois comandos a serem executados:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
fonte
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
para queapt_pkg.so
fique claro o que é.sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so
por algum motivoIsso funcionou para mim depois de atualizar o python3.7 no ubuntu18.04
fonte
Por algum motivo, minha instalação estava faltando
apt_pkg.so
no diretório dist-packages do python3. (apt_pkg.cpython-33m-x86_64-linux-gnu.so
estava lá ?!) mas e eu tive que fazer um link simbólicoapt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so
em/usr/lib/python3/dist-packages
Não tenho certeza se minha atualização foi quebrada ou por que isso aconteceu. Ocorreu após tentar atualizar (preciso-> raring-> atualização quântica)
fonte
python --version Python 3.7.5
cd
em/usr/lib/python3/dist-packages
e verificar osapt_pkg.*
arquivos. Você verá que não há nenhum para sua versão padrão do Python:fonte
O último recurso é
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
se oln
comando for demais para você ou, de alguma forma, magicamente não funcionar.cp
acima também pode sermv
se você se dedicar apenas a usar uma versão do Python.fonte
se você estiver usando o python 3.7, faça o downgrade para o python 3.6 atualizando o Alternatives, isso funcionou para mim
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --config python3
fonte
Se você estiver usando o python 3.5, faça downgrade para o 3.4. Esse é o movimento mais seguro a fazer.
Abaixo
/usr/lib/python3/dist-packages
você verá*34m*
qual python 3.5 não pode usar. zhazha answer symlink para ele.fonte
Além de fazer um link simbólico para
apt_pkg.so
, você pode querer fazerapt_inst.so
da mesma maneira deapt_pkg.so
.fonte
Eu vejo todo mundo dizendo como consertar isso com cópias estranhas etc, mas ninguém disse realmente porque o problema ocorre.
Então, deixe-me explicar, para aqueles de vocês que gostam de mim, não querem mexer nos arquivos do sistema apenas porque alguém no SO disse isso a eles.
O problema é que:
~$ 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
é um pacote de sistema, então é para sistema padrão pythonAssim, os scripts sempre obterão a versão atualmente vinculada
python3
, mas falham porque o pacote apt não está presente.Solução geral: NUNCA altere o
python3
link padrão . Sempre. Isso também se aplica aopython
link - se um aplicativo foi escrito em Python2 com alguns elementos de sintaxe antigos que não funcionam no Python3, o aplicativo não funcionará.[Meu terminal quebrou dessa forma porque eu uso o Terminator, que aparentemente foi escrito em Python2.7 e não é compatível com Python3.]
As soluções apresentadas aqui sugerem copiar / vincular os arquivos do pacote apt ou alterar o
python3
link.Vamos analisar ambos:
Isso não deve ser um problema porque em torno do Python3.4 todos os scripts Python funcionam em versões mais recentes também.
Tão longe. Mas pode quebrar no futuro - se você mantiver o sistema por tempo suficiente.
python3
link de voltaEsta é uma ótima solução porque podemos voltar a "nunca alterar o link"
"Mas eu gosto de ter que digitar apenas
python
!" - Eu gosto disso também! Foi assim que cheguei a esse problema em primeiro lugar!Em geral, você deve evitar alterar manualmente os links do sistema - use em
update-alternatives
vez disso para vincular versões diferentes . Isso se aplica a qualquer aplicativo com muitas versões. Isso ainda quebrará os scripts do sistema (porque muda o link), mas você pode alternar facilmente, sem se preocupar se colocou link e dest na ordem certa ou cometeu um erro de digitação.Considere usar outro nome que não seja
python
/python3
para o seu link ou alias.Ou adicione seu próprio
python
/python3
link ao PATH (assim como os ambientes virtuais fazem), sem alterar os links do sistema.fonte
Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)
Esta resposta do reddit (ligeiramente modificada funcionou para mim)
sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
fonte
Reveja a seguinte documentação. Isso definitivamente resolverá o problema. http://www.programmersought.com/article/55001874709/
fonte
Nenhuma das respostas funcionou para mim (estou usando Ubuntu 16.04 e Python 3.6). Então, finalmente resolvi o problema da seguinte maneira:
1- conectar ao FTP do servidor
2- vá para a pasta "/ usr / lib / python3 / dist-packages /"
3- duplique o arquivo "apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so"
4- renomeie este arquivo duplicado para "apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so"
É isso aí!
fonte
Estou no Ubuntu 16.04 e atualizei para Python 3.7. Aqui está o erro que eu tive ao tentar adicionar um 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'
Consegui corrigir esse erro criando um link simbólico com meu apt_pkg.cpython-34m-x86_64-linux-gnu.so inicial do python 3.4, criando o seguinte link simbólico
fonte
Tente corrigir isso definindo as variáveis de local:
export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
fonte
Caso isso ajude outro, finalmente resolvi esse problema, que aparentemente foi causado por conflitos de versão do python, redirecionando o link python3 e, em seguida, redirecionando-o para a versão correta do python:
sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.4
Pode ser necessário inserir a versão correta do Python, encontrada com:
fonte