Estoy ejecutando Ubuntu 20.04 con Python 3.6, 3.7 y 3.8 instalado.
Estoy tratando de instalar algunos paquetes usando pip en las versiones 3.6 y 3.7 usando 'python3.7 -m pip install package' pero recibo este error:
ModuleNotFoundError: No module named 'distutils.util Ya tengo python3-distutils y python3-distutils-extra pero pip solo funciona para python 3.8 .
¿Qué pasa con cosas como deadsnakes o pyenv , ayudarían? De lo contrario, es posible que deba agregar los repositorios apt para versiones anteriores de Ubuntu (por ejemplo, 18.04), pero no estoy seguro de cuáles podrían ser los efectos secundarios. Esta es una pregunta que preferiría hacer en Ask Ubuntu o Super User .
(de la descripción de la recompensa)
Quiero una solución definitiva que NO implique que alguien me diga que instale:
- python-distutils
- python3-distutils
- python3-distutils-extra
Estaré entregando VOTOS REDUCIDOS GRATIS a cualquiera que mencione instalarlos.
Bueno, tengo malas noticias para ti. No existe una forma "oficial" de obtener distutils en los paquetes python* proporcionados por Debian sin instalar estos paquetes, a menos que salga de los repositorios de paquetes predeterminados de Debian.
Esta es una consecuencia de la decisión de Debian de dividir varias partes de la biblioteca estándar de Python en paquetes separados, sobre la base de su política de dividir las cosas en paquetes de tiempo de ejecución y paquetes de desarrollo. Consideran que las distutils pertenecen a la parte de "desarrollo" y, por lo tanto, no las distribuyen como parte del paquete estándar de python .
Básicamente, sus opciones son:
python*-distutils .Lib/distutils en algún lugar de la ruta de importación para pythonX.Y ? Sin embargo, este es un truco 100% y recomiendo encarecidamente no hacerlo. Si pasa algo malo, porque hiciste esto, no soy responsable.He estado buscando una respuesta a esta pregunta durante casi tanto tiempo como tú, y finalmente encontré una solución.
Tenga cuidado, es posible que haya arruinado mi instalación de python3.8 como efecto secundario, y es posible que el paquete se desinstale nuevamente y rompa las cosas tan pronto como ejecute apt-update.
Además, puede ser posible reducir la cantidad de comandos, pero esto es lo que terminé haciendo:
Ejecute apt list para ver una lista de paquetes disponibles:
$ apt list -a python3-distutils Listing... Done python3-distutils/focal-updates,focal-updates,focal-security,focal-security,now 3.8.5-1~20.04.1 all [installed] python3-distutils/focal,focal 3.8.2-1ubuntu1 all python3-distutils/bionic-updates,bionic-updates 3.6.9-1~18.04 all python3-distutils/bionic,bionic 3.6.5-3 all Luego descargue el paquete deb "bionic", porque en realidad contiene varias versiones de distutils , para Pythons 3.6, 3.7 y 3.8:
$ apt download python3-distutils/bionic Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python3-distutils all 3.6.9-1~18.04 [144 kB] Fetched 144 kB in 0s (661 kB/s)Finalmente, instale el paquete deb:
$ sudo dpkg --install python3-distutils_3.6.9-1~18.04_all.deb dpkg: warning: downgrading python3-distutils from 3.8.5-1~20.04.1 to 3.6.9-1~18.04 (Reading database ... 193375 files and directories currently installed.) Preparing to unpack python3-distutils_3.6.9-1~18.04_all.deb ... Unpacking python3-distutils (3.6.9-1~18.04) over (3.8.5-1~20.04.1) ... Setting up python3-distutils (3.6.9-1~18.04) ...En este punto, finalmente pude usar pip con python3.6.
Nota-1: Las impresiones de la
apt list -aanterior dependen de si ejecuta una distribución Ubuntu o Debian , y qué apt-repos ha activado en /etc/apt/sources.list*.
Nota-2: Como se ve en el caso de
python3-distutils/bionic, arriba, el nombre del paquete no siempre coincide con su contenido. Para verlos, debe descargarlo e inspeccionarlo condpkg -C <pafkage-file>, o de forma remota conapt-file list python3-distutils.
Nota-3: En caso de que no pueda encontrar la versión exacta de
distutilspara una versión específica de Python, puede instalar una versión anterior y vincularla. Por ejemplo, en Debian-unstable("sid") y "bullseye" a partir de enero de 2020, el paquetepython3-distutilscontenido en sus apt-repos tiene archivos solo para Python3.9, y los apt-repos anteriores de "buster" contienen archivos solo para Python3.7. Entonces, si desea instalardistutilspara Python3.8, debe descargar el paquete "buster" y ejecutar:
$ sudo dpkg --unpack python3-distutils_3.7.3-1_all.deb $ sudo rm /usr/lib/python3.8/distutils/distutils/ $ sudo ln -w /usr/lib/python3.{7,8}/distutils/distutils/