Esta es el arreglo más válida que te podemos dar, pero primero obsérvala detenidamente y valora si se puede adaptar a tu proyecto.
Solución:
Supongamos que tiene un sistema que ejecuta Ubuntu 16.04, 16.10 o 17.04 y desea que Python 3.6 sea el Python predeterminado.
Si está usando Ubuntu 16.04 LTS, deberá usar un PPA:
sudo add-apt-repository ppa:jonathonf/python-3.6 # (only for 16.04 LTS)
Luego, ejecute lo siguiente (esto funciona de forma inmediata en 16.10 y 17.04):
sudo apt update
sudo apt install python3.6
sudo apt install python3.6-dev
sudo apt install python3.6-venv
wget https://bootstrap.pypa.io/get-pip.py
sudo python3.6 get-pip.py
sudo ln -s /usr/bin/python3.6 /usr/local/bin/python3
sudo ln -s /usr/local/bin/pip /usr/local/bin/pip3
# Do this only if you want python3 to be the default Python
# instead of python2 (may be dangerous, esp. before 2020):
# sudo ln -s /usr/bin/python3.6 /usr/local/bin/python
Cuando haya completado todo lo anterior, cada uno de los siguientes comandos de shell debe indicar Python 3.6.1
(o una versión más reciente de Python 3.6):
python --version # (this will reflect your choice, see above)
python3 --version
$(head -1 `which pip` | tail -c +3) --version
$(head -1 `which pip3` | tail -c +3) --version
Al menos en ubuntu 16.10, el valor predeterminado python3
es python3.5
. Como tal, todos los python3-X
los paquetes se instalarán para python3.5 y no para python3.6.
Puede verificar esto comprobando el shebang de pip3
:
$ head -n1 $(which pip3)
#!/usr/bin/python3
Afortunadamente, el pip instalado por el python3-pip
el paquete se instala en el “compartido” /usr/lib/python3/dist-packages
de modo que python3.6 también puede aprovecharlo.
Puede instalar paquetes para python3.6 haciendo:
python3.6 -m pip install ...
Por ejemplo:
$ python3.6 -m pip install requests
$ python3.6 -c 'import requests; print(requests.__file__)'
/usr/local/lib/python3.6/dist-packages/requests/__init__.py
Esta respuesta asume que usted tiene python3.6
instalado. Para python3.7
, reemplazar 3.6
con 3.7
. Para python3.8
, reemplazar 3.6
con 3.8
, pero también puede requerir primero la python3.8-distutils
paquete.
Instalación con sudo
Con respecto a la instalación pip
, utilizando curl
(en vez de wget
) evita escribir el archivo en el disco.
curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3.6
El -H
la bandera es evidentemente necesaria con sudo
para evitar errores como los siguientes al instalar pip para un intérprete de python actualizado:
El directorio ‘/home/someuser/.cache/pip/http’ o su directorio principal no es propiedad del usuario actual y el caché se ha deshabilitado. Verifique los permisos y el propietario de ese directorio. Si ejecuta pip con sudo, es posible que desee el indicador -H de sudo.
El directorio ‘/home/someuser/.cache/pip’ o su directorio principal no es propiedad del usuario actual y las ruedas de almacenamiento en caché se han deshabilitado. verifique los permisos y el propietario de ese directorio. Si ejecuta pip con sudo, es posible que desee el indicador -H de sudo.
Instalación sin sudo
curl https://bootstrap.pypa.io/get-pip.py | python3.6 - --user
Esto a veces puede dar una advertencia como:
ADVERTENCIA: La rueda de secuencias de comandos está instalada en ‘/home/ubuntu/.local/bin’ que no está en PATH. Considere agregar este directorio a PATH o, si prefiere suprimir esta advertencia, use –no-warn-script-location.
Verificación
Después de este, pip
, pip3
, y pip3.6
se puede esperar que todos apunten al mismo objetivo:
$ (pip -V && pip3 -V && pip3.6 -V) | uniq
pip 18.0 from /usr/local/lib/python3.6/dist-packages (python 3.6)
Por supuesto, puedes usar alternativamente python3.6 -m pip
también.
$ python3.6 -m pip -V
pip 18.0 from /usr/local/lib/python3.6/dist-packages (python 3.6)
Recuerda algo, que tienes la capacidad de añadir una puntuación objetiva si te ayudó.