Soy un usuario de Debian y quiero instalar python-dev, pero cuando ejecuto el código en el shell como root:
# aptitude install python-dev
Obtuve el siguiente error:
Traceback (most recent call last):
File "/usr/bin/apt-listchanges", line 28, in <module>
import apt_pkg
ImportError: No module named apt_pkg
¿Cuál parece ser el problema y cómo puedo resolverlo?
python
linux
installation
debian
Belphegor
fuente
fuente
Respuestas:
Asegúrese de tener un paquete python-apt que funcione. Puede intentar quitar e instalar ese paquete nuevamente para solucionar el problema con apt_pkg.so que no se encuentra.
fuente
apt-get remove --purge python-apt
e instalarlo de nuevopython-apt
suena bastante peligroso !! Aprendí mi lección una vez y no la intentaré.Me encontré con este problema al hacer
sudo apt-get update
. Mi env es debian8, con python2.7 + 3.4 (predeterminado) + 3.5.El siguiente código solo volverá a crear un
apt_pkg....so
archivo para python 3.5El siguiente código resolvió mi problema,
cd /usr/lib/python3/dist-packages sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
Entonces, obviamente, python3-apt verifica la versión de Python más alta, en lugar de la versión de Python actual en uso.
fuente
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so
debería cambiarse asudo 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 python3.6, y este horrible error ya no existe.sudo apt install python3.7
conseguí este error apt_pkg intentar ejecutar pip, por lo que necesitaba para funcionarcd /usr/lib/python3/dist-packages
entoncessudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so
a continuaciónsudo apt install python3-pip
.sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
Resuélvelo con esto:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so
O:
/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
Básicamente, si obtiene un
No such file or directory
solols
para intentar obtener el nombre correcto.fuente
/usr/lib/python3/dist-packages
, y vi que no teníaapt_pkg.cpython-34m-i386-linux-gnu.so
oapt_pkg.cpython-3m-i386-linux-gnu.so
, pero teníaapt_pkg.cpython-36m-i386-linux-gnu.so
... ¡Copié este archivoapt_pkg.so
y funcionó perfectamente! ¡Gracias!Esto me sucedió en Ubuntu 18.04.2 después de que intenté instalar Python3.7 desde el repositorio de deadsnakes.
La solución fue esta
1)
cd /usr/lib/python3/dist-packages/
2)
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
fuente
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 error suele ocurrir cuando se instala una versión más nueva de Python junto con una versión anterior, por ejemplo;
Ejecute un comando que use el módulo apt_pkg y obtenga un error como;
from CommandNotFound.db.db import SqliteDatabase File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module> import apt_pkg
Cuando instalamos una versión de python3 que no es de distribución con apt, se configurará un directorio de módulo compartido para que sea el de python3
/usr/lib/python3
.La mayoría de las veces esto estará bien, pero en algunas circunstancias las diferentes versiones de Python se basan en bibliotecas u objetos / bibliotecas compartidas diferentes a las de la otra versión de Python, por lo que, como han señalado otras respuestas, debemos vincular el .SO versión correcta de Python. Entonces, si tenemos python3.6 instalado en un sistema de 64 bits, entonces el enlace apt_pkg .SO sería
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
Pero el problema radica en el hecho de que cuando instalamos una versión más nueva de Python, el enlace se actualizará para apuntar a la versión más nueva de Python, lo que conduce al error de no encontrar el módulo apt_pkg. Al verificar qué versión de Python se envía con su distribución, puede crear el enlace como se muestra arriba. O usamos un método para ofrecer al comando una opción de versiones de Python para vincular el .SO como;
sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so
Debido a que Python creará este enlace a la versión más reciente de Python instalada, le damos al comando la opción de elegir entre 3 versiones de Python, de las cuales elegirá la versión más alta dada.
fuente
La solución de @ user8178061 funcionó bien pero lo hice con algunas modificaciones para mi versión que es
python3.7
con UbuntuReemplacé el
apt_pkg.cpython-3m-i386-linux-gnu.so
conapt_pkg.cpython-36m-x86_64-linux-gnu.so
Aquí los dos comandos a ejecutar:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
fuente
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
para que quede claro quéapt_pkg.so
es.sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so
por alguna razónEsto funcionó para mí después de actualizar python3.7 en ubuntu18.04
cd /usr/lib/python3/dist-packages sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
fuente
Por alguna razón, mi instalación faltaba
apt_pkg.so
en el directorio dist-packages de python3. (¿apt_pkg.cpython-33m-x86_64-linux-gnu.so
había ?!) pero tuve que hacer un enlace simbólicoapt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so
en/usr/lib/python3/dist-packages
No estoy seguro de si mi actualización se rompió o por qué fue así. Ocurrió después de intentar actualizar (precisa-> rara-> actualización cuántica)
fuente
python --version Python 3.7.5
cd
en/usr/lib/python3/dist-packages
y comprobar losapt_pkg.*
archivos. Verá que no hay ninguno para su versión predeterminada de Python: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
fuente
Un último recurso es
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
si elln
comando es demasiado para ti o si de alguna manera mágicamente no funciona.cp
lo anterior también puede serlomv
si solo está dedicado a usar una versión de Python.fuente
si está usando Python 3.7 degradarlo a Python 3.6 actualizando Alternativas, esto funcionó para mí
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1 sudo update-alternatives --config python3
fuente
Si está usando Python 3.5, baje a 3.4. Ese es el movimiento más seguro que se puede hacer.
A continuación
/usr/lib/python3/dist-packages
, verá*34m*
qué Python 3.5 no puede usar. zhazha responde enlace simbólico.fuente
Además de hacer un enlace simbólico para
apt_pkg.so
, es posible que desee hacerloapt_inst.so
de la misma maneraapt_pkg.so
.ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so
fuente
Veo a todos diciendo cómo solucionarlo con copias extrañas, etc., pero nadie dijo realmente por qué ocurre el problema.
Permítanme explicarles, para aquellos de ustedes que como yo no quieren meterse con los archivos del sistema solo porque alguien en SO se lo dijo.
El problema es ese:
~$ 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
es un paquete del sistema, por lo que es para el sistema predeterminado pythonPor lo tanto, los scripts siempre obtendrán la versión actualmente vinculada
python3
, pero fallarán porque el paquete apt no está presente.Solución general: NUNCA cambie el
python3
enlace predeterminado . Siempre. Esto también se aplica alpython
enlace: si una aplicación se escribió en Python2 con algunos elementos de sintaxis antiguos que no funcionan en Python3, la aplicación no funcionará.[Mi terminal se rompió de esa manera porque uso Terminator, que aparentemente está escrito en Python2.7 no es compatible con Python3].
Las soluciones presentadas aquí sugieren copiar / vincular los archivos del paquete apt o cambiar el
python3
enlace.Analicemos ambos:
Esto no debería ser un problema porque desde Python3.4 todos los scripts de Python también funcionan en versiones más nuevas.
Hasta aquí. Pero puede romperse en el futuro, si mantiene su sistema el tiempo suficiente.
python3
enlace de nuevoEsta es una gran solución porque podemos volver a "nunca cambiar el enlace"
"¡Pero me gusta tener que escribir solo
python
!" - ¡A mí también me gusta! ¡Así fue como llegué a este problema en primer lugar!En general, debe evitar cambiar manualmente los enlaces del sistema; utilice
update-alternatives
en su lugar para vincular diferentes versiones . Esto se aplica a cualquier aplicación con muchas versiones. Esto aún romperá esos scripts del sistema (porque cambia el enlace), pero puede cambiar de un lado a otro fácilmente, sin preocuparse de si puso el enlace y dest en el orden correcto o si cometió un error tipográfico.Considere usar otro nombre que no sea
python
/python3
para su enlace o alias.O agregue su propio
python
/python3
enlace a PATH (como lo hacen los entornos virtuales), sin cambiar los enlaces del sistema.fuente
Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)
Esta respuesta de reddit (ligeramente modificada funcionó para mí)
sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so
fuente
Revise la siguiente documentación. Definitivamente resolverá el problema. http://www.programmersought.com/article/55001874709/
fuente
Ninguna de las respuestas me funcionó (estoy usando Ubuntu 16.04 y Python 3.6). Así que finalmente resolví el problema de la siguiente manera:
1- conéctate al FTP del servidor
2- ve a la carpeta "/ usr / lib / python3 / dist-packages /"
3- duplica el archivo "apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so"
4- cambie el nombre de este archivo duplicado a "apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so"
¡Eso es!
fuente
Estoy en Ubuntu 16.04 y actualizado a Python 3.7. Aquí está el error que tuve al intentar agregar un 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'
Pude corregir este error haciendo un enlace simbólico con mi python 3.4 inicial apt_pkg.cpython-34m-x86_64-linux-gnu.so creando el siguiente enlace simbólico
sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so
fuente
Intente solucionar este problema configurando las variables de configuración regional:
export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
fuente
En caso de que ayude a otro, finalmente resolví este problema, que aparentemente fue causado por conflictos de versiones de Python, redirigiendo el enlace python3 y luego redirigiéndolo a la versión correcta de Python:
sudo rm /usr/bin/python3 sudo ln -s /usr/bin/python3.4
Es posible que deba ingresar la versión correcta de Python, que se encuentra con:
fuente