
Я хочу использовать python2.7
с virtualenv
. Недавно я обновился с Debian 8 до Debian 10. Изначально у меня был python2.7
и pip
установлен на Debian 8, но, возможно, что-то произошло во время установки, и теперь у меня нет pip
. Но у меня все еще python2.7
установлены:
$ python --version
Python 2.7.16
Поэтому я просто установил pip
вот так:
$ cd /tmp
$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
И теперь я вижу, что у меня установлен pip:
$ 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)
Во-первых, здесь ли следует устанавливать pip?В моем домашнем каталоге? Я единственный пользователь на этом ПК, но я не уверен, pip
должен ли он быть в /usr/share/
или в каком-то более публичном месте, чтобы он работал правильно? Должен ли я был использовать sudo python /tmp/get-pip.py
для установки pip
? Я не планирую запускать python как root, но apt
всегда требует root для установки, так что, может быть, установка pip
должна быть? В документации не указано.
В любом случае, далее я попытался обновиться pip
до последней версии и установить 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)
Вроде бы все хорошо. Но когда я пытаюсь проверить, какая virtualenv
у меня версия, это не получается:
$ 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__
И если я пытаюсь его использовать, virtualenv
всегда выдаются эти ошибки.
Итак, в целом, мой вопрос заключается в том, как правильно установить python2.7
, pip
и virtualenv
на Debian 10. Я не против удалить все и начать заново, если это необходимо.
В соответствии с указаниямиСтивен Киттв ответе ниже я попытался удалить версии pip
и virtualenv
, которые я ранее установил с помощью get-pip.py
, однако это дает некоторые новые ошибки. Я объясню, что именно я сделал...
Первая деинсталляция 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
Кажется, все в порядке. Затем удалите 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
Это тоже кажется нормальным. Я не уверен, как bash знает, что это pip
должно быть /home/me/.local/bin/pip
, поскольку этот файл не существует. Может быть, у bash есть кэш? В любом случае, следующая установка pip
и virtualenv
из репозитория 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
Но когда я пытаюсь проверить, какая virtualenv
у меня сейчас версия, это не получается:
$ 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
решение1
Чтобы не испортить ситуациюснаружиvirtualenv, я рекомендую использовать упакованные версии:
sudo apt install python-pip virtualenv
(вместе с python3-pip
поддержкой Python 3, если это необходимо).
Вероятно, вам придется удалить версии pip
и , virtualenv
установленные в вашем домашнем каталоге, а также все остальные во PATH
внешних каталогах /usr/bin
.
При настройке virtualenv вы можете указать Python 2.7:
virtualenv -p /usr/bin/python2.7 ...
и virtualenv
поступлю правильно.
решение2
После дальнейшего расследования и обсуждения сСтивен Киттvirtualenv
Я обнаружил, что на моем ПК установлено 2 разные версии :
$ find /usr/ -iname "virtualenv" | grep bin
/usr/local/bin/virtualenv
/usr/bin/virtualenv
Тот, что в, /usr/bin/virtualenv
не выдает ошибок при запуске:
$ /usr/bin/virtualenv --version
15.1.0
И проведя несколько поисков в Интернете, я обнаружил, что тот, что в, /usr/local/bin/virtualenv
должен был быть установлен с pip
правами root. Поэтому я удалил его с pip
правами 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
Теперь все хорошо:
$ which virtualenv
/usr/bin/virtualenv
$ find /usr/ -iname "virtualenv" | grep bin
/usr/bin/virtualenv