
Quiero usar python2.7
con virtualenv
. Recientemente actualicé de Debian 8 a Debian 10. Originalmente tenía python2.7
e pip
instalé Debian 8, pero tal vez sucedió algo durante la instalación y ahora no tengo pip
. Pero todavía tengo python2.7
instalado:
$ python --version
Python 2.7.16
Entonces lo instalé pip
así:
$ cd /tmp
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
Y ahora puedo ver que tengo pip instalado:
$ which pip
/home/me/.local/bin/pip
$ pip --version
pip 20.0.2 from /home/me/.local/lib/python2.7/site-packages/pip (python 2.7)
En primer lugar, ¿es aquí donde se debe instalar pip?¿En mi directorio de inicio? Soy el único usuario de esta PC, pero no estoy seguro de si pip
debería estar en /usr/share/
algún lugar más público para que funcione correctamente. ¿Debería haber utilizado sudo python /tmp/get-pip.py
para instalar pip
? No planeo ejecutar Python como root, pero apt
siempre necesito root para las instalaciones, por lo que tal vez la instalación pip
también debería haberlo hecho. La documentación no lo especificaba.
De todos modos, a continuación intenté actualizar pip
a la última versión e instalar virtualenv
:
$ pip install -U pip
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Defaulting to user installation because normal site-packages is not writeable
Requirement already up-to-date: pip in ./.local/lib/python2.7/site-packages (20.0.2)
$ pip install virtualenv
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: virtualenv in ./.local/lib/python2.7/site-packages (15.1.0)
Todo parece bien. Pero cuando intento comprobar qué versión virtualenv
tengo, falla:
$ virtualenv --version
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 6, in <module>
from virtualenv.__main__ import run_with_catch
ImportError: No module named __main__
Y si intento usarlo, virtualenv
siempre arroja estos errores.
En general, mi pregunta es cómo instalar correctamente python2.7
y pip
en virtualenv
Debian 10. No me importa desinstalar todo y comenzar de nuevo si eso es lo que hace falta.
Según las instrucciones deEsteban KittEn la respuesta a continuación, intenté desinstalar las versiones de pip
y virtualenv
que instalé anteriormente get-pip.py
, sin embargo, esto genera algunos errores nuevos. Explicaré exactamente lo que he hecho...
Primera desinstalación virtualenv
:
$ pip uninstall virtualenv
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Found existing installation: virtualenv 15.1.0
Uninstalling virtualenv-15.1.0:
Would remove:
/home/me/.local/bin/virtualenv
/home/me/.local/lib/python2.7/site-packages/virtualenv-15.1.0.dist-info/*
/home/me/.local/lib/python2.7/site-packages/virtualenv.py
/home/me/.local/lib/python2.7/site-packages/virtualenv_support/*
Proceed (y/n)? y
Successfully uninstalled virtualenv-15.1.0
Se ve bien. Luego desinstale pip:
$ python -m pip uninstall pip
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Found existing installation: pip 20.0.2
Uninstalling pip-20.0.2:
Would remove:
/home/me/.local/bin/pip
/home/me/.local/bin/pip2
/home/me/.local/bin/pip2.7
/home/me/.local/lib/python2.7/site-packages/pip-20.0.2.dist-info/*
/home/me/.local/lib/python2.7/site-packages/pip/*
Proceed (y/n)? y
Successfully uninstalled pip-20.0.2
$ pip --version
bash: /home/me/.local/bin/pip: No such file or directory
$ ls -a ~/.local/bin
. .. chardetect easy_install easy_install-2.7 flake8 pew pipenv pycodestyle pyflakes virtualenv-clone
Eso también parece estar bien. No estoy seguro de cómo bash sabe que pip
debería ser así, /home/me/.local/bin/pip
ya que ese archivo no existe. ¿Quizás bash tenga un caché? De todos modos, próxima instalación pip
y virtualenv
desde el repositorio de Debian 10:
$ sudo apt install python-pip virtualenv
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
python3-distutils python3-lib2to3 python3-virtualenv
The following NEW packages will be installed:
python-pip python3-distutils python3-lib2to3 python3-virtualenv virtualenv
Pero cuando intento comprobar qué versión virtualenv
tengo ahora, falla:
$ virtualenv --version
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 6, in <module>
from virtualenv.__main__ import run_with_catch
File "/usr/local/lib/python2.7/dist-packages/virtualenv/__init__.py", line 3, in <module>
from .run import cli_run
File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/__init__.py", line 6, in <module>
from virtualenv.run.app_data import AppDataAction
File "/usr/local/lib/python2.7/dist-packages/virtualenv/run/app_data.py", line 8, in <module>
from virtualenv.util.lock import ReentrantFileLock
File "/usr/local/lib/python2.7/dist-packages/virtualenv/util/lock.py", line 11, in <module>
from virtualenv.util.path import Path
File "/usr/local/lib/python2.7/dist-packages/virtualenv/util/path/__init__.py", line 3, in <module>
from ._pathlib import Path
File "/usr/local/lib/python2.7/dist-packages/virtualenv/util/path/_pathlib/__init__.py", line 42, in <module>
from pathlib2 import Path
ImportError: No module named pathlib2
Respuesta1
Para evitar estropear las cosasafueralos virtualenvs, recomiendo usar las versiones empaquetadas:
sudo apt install python-pip virtualenv
(junto con python3-pip
la compatibilidad con Python 3, si corresponde).
Probablemente necesitarás eliminar las versiones pip
instaladas virtualenv
en tu directorio de inicio y cualquier otra en tu PATH
directorio externo /usr/bin
.
Al configurar sus entornos virtuales, puede especificar Python 2.7:
virtualenv -p /usr/bin/python2.7 ...
y virtualenv
haré lo correcto.
Respuesta2
Tras una mayor investigación y discusión conEsteban KittDescubrí que tenía 2 versiones diferentes virtualenv
en mi PC:
$ find /usr/ -iname "virtualenv" | grep bin
/usr/local/bin/virtualenv
/usr/bin/virtualenv
El de /usr/bin/virtualenv
no arroja errores cuando lo ejecuto:
$ /usr/bin/virtualenv --version
15.1.0
Y al hacer algunas búsquedas en la web, encontré que el que /usr/local/bin/virtualenv
debe haberse instalado pip
como root. Así que lo desinstalé pip
como root:
$ sudo pip uninstall virtualenv
Uninstalling virtualenv-20.0.13:
Would remove:
/usr/local/bin/virtualenv
/usr/local/lib/python2.7/dist-packages/virtualenv-20.0.13.dist-info/*
/usr/local/lib/python2.7/dist-packages/virtualenv/*
Proceed (y/n)? y
Successfully uninstalled virtualenv-20.0.13
Ahora todo está bien:
$ which virtualenv
/usr/bin/virtualenv
$ find /usr/ -iname "virtualenv" | grep bin
/usr/bin/virtualenv