
Quero usar python2.7
com virtualenv
. Recentemente atualizei do debian 8 para o debian 10. Originalmente eu tinha python2.7
e pip
instalei no debian 8, mas talvez algo tenha acontecido durante a instalação e agora não tenho o pip
. Mas ainda tenho python2.7
instalado:
$ python --version
Python 2.7.16
Então eu instalei pip
assim:
$ cd /tmp
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
E agora posso ver que tenho o 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)
Em primeiro lugar, é aqui que o pip deve ser instalado?No meu diretório inicial? Sou o único usuário deste PC, mas não tenho certeza se pip
deveria estar em /usr/share/
algum lugar mais público para que ele funcione corretamente. Eu deveria ter usado sudo python /tmp/get-pip.py
para instalar pip
? Não pretendo executar python como root, mas apt
sempre requer root para instalações, então talvez a instalação pip
também deva ser necessária? A documentação não especificou.
De qualquer forma, tentei atualizar pip
para a versão mais recente 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)
Tudo parece bem. Mas quando tento verificar qual versão virtualenv
tenho, ela falha:
$ 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__
E se eu tento usá virtualenv
-lo sempre aparece esses erros.
Então, no geral, minha pergunta é como instalar corretamente e no debian 10. Não me importo de desinstalar tudo e começar de novo python2.7
, se for necessário.pip
virtualenv
Conforme instruído porStephen Kittna resposta abaixo, tentei desinstalar as versões de pip
e virtualenv
que instalei anteriormente get-pip.py
, mas isso deu alguns novos erros. Vou explicar exatamente o que fiz...
Primeira desinstalação 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
Parece bem. Em seguida, desinstale o 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
Isso também parece bom. Não tenho certeza de como o bash sabe que isso pip
deveria acontecer, /home/me/.local/bin/pip
já que esse arquivo não existe. Talvez o bash tenha um cache? De qualquer forma, próxima instalação pip
e virtualenv
do repositório 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
Mas quando tento verificar qual versão virtualenv
tenho agora, ela falha:
$ 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
Responder1
Para evitar bagunçar as coisasforao virtualenvs, recomendo usar as versões empacotadas:
sudo apt install python-pip virtualenv
(juntamente com python3-pip
suporte para Python 3, se apropriado).
Você provavelmente precisará remover as versões pip
instaladas virtualenv
em seu diretório inicial e quaisquer outras em seu PATH
diretório externo /usr/bin
.
Ao configurar seu virtualenvs, você pode especificar o Python 2.7:
virtualenv -p /usr/bin/python2.7 ...
e virtualenv
fará a coisa certa.
Responder2
Após uma investigação mais aprofundada e discussão comStephen KittDescobri que tinha 2 versões diferentes virtualenv
no meu PC:
$ find /usr/ -iname "virtualenv" | grep bin
/usr/local/bin/virtualenv
/usr/bin/virtualenv
Aquele que está dentro /usr/bin/virtualenv
não gera erros quando eu o executo:
$ /usr/bin/virtualenv --version
15.1.0
E fazendo algumas pesquisas na web descobri que aquele /usr/local/bin/virtualenv
deve ter sido instalado pip
como root. Então eu desinstalei ele 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
Agora está tudo bem:
$ which virtualenv
/usr/bin/virtualenv
$ find /usr/ -iname "virtualenv" | grep bin
/usr/bin/virtualenv