Virtualenv с pyenv дает неправильную версию Python - PullRequest
0 голосов
/ 05 июня 2019

У меня установлен pyenv в обновленном тестовом выпуске Debian, и в нем есть python 2.7.1.

Я создаю virtualenv для проекта с этой версией, но при активации он дает мне версию системы python (3.7).

Вот что я сделал:

$ pyenv virtualenv 2.7.16 my_project-2.7
Requirement already satisfied: virtualenv in /home/user/.local/lib/python2.7/site-packages (15.1.0)
You are using pip version 18.1, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Using base prefix '/usr'
New python executable in /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/bin/python
Installing setuptools, pip, wheel...
done.
Installing pip from https://bootstrap.pypa.io/get-pip.py...
Collecting pip
  Using cached https://files.pythonhosted.org/packages/5c/e0/be401c003291b56efc55aeba6a80ab790d3d4cece2778288d65323009420/pip-19.1.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 19.1.1
    Uninstalling pip-19.1.1:
      Successfully uninstalled pip-19.1.1
Successfully installed pip-19.1.1

$ pyenv activate my_project-2.7 
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.

$ python --version
Python 3.7.3

$ pip --version
pip 19.1.1 from /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7/site-packages/pip (python 3.7)

Странно. Virtualenv правильно установлен в ~ / .pyenv / version / 2.7.16, но я вижу, что пипы приходят из /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7 /

Я думаю, что что-то пропустил, или у меня может быть какой-то беспорядок в моей установке python, но я не могу узнать, что здесь делает эта библиотека python3.7.

Как мне создать этот virtualenv для python2.7?

Редактировать

Я попытался полностью удалить pyenv (удаление каталога $ (корневой каталог pyenv)), затем переустановить его с помощью pyenv-installer, но это ничего не изменило.

Я создал два virtualenvs для двух моих проектов (вышеупомянутые 2.7 и один в 3.5).

$ pyenv virtualenvs 2.7.16 / envs / my_project-2.7 (создан из / usr) 3.6.8 / envs / other_project-3.6 (создан из /home/user/.pyenv/versions/3.6.8) my_project-2.7 (создан из / usr) other_project-3.6 (создан из /home/user/.pyenv/versions/3.6.8)

Я думаю, что проблема может быть найдена из этого , созданного из / usr , но я не понимаю, что это значит. Почему этот virtualenv не был создан из версии pyenv python? Это вообще актуально?

Кажется, что когда я создаю 3. + виртуальную среду, используется venv . Но на 2.7 virtualenv используется и не работает.

1 Ответ

0 голосов
/ 05 июня 2019

WFM, как написано, если я установлю pyenv и pyenv-virtualenv с нуля согласно связанным инструкциям.

Я вижу, что pip происходит от /home/user/.pyenv/versions/2.7.16/envs/my_project-2.7/lib/python3.7/

Это показывает, что наиболее вероятно, что виртуальная среда уже существует и имеет неправильную версию Python.

Я могу только догадываться, как это закончилось вот так. Скорее всего, вы возились с этим virtualenv или с pyenv envvars вручную; или запустил скрипты / есть что-то в ваших скриптах bash stratup, которые делают это. Например. если вы используете pyenv-virtualenv команды для управления вашей средой, вы не должны смешивать их с обычными virtualenv командами.


Удаление этого virtualenv с помощью pyenv virtualenv-delete my_project-2.7, а затем воссоздание его должно помочь.

Если нет, удалите ~/.pyenv и все, что имеет отношение к вашим сценариям запуска, перезапустите оболочку и переустановите pyenv и pyenv-virtualenv.
Для менее разрушительного исправления вам необходимо тщательно проверить среду оболочки (envvars, псевдонимы, определенные функции оболочки) и сценарии запуска на наличие всего, что может конфликтовать с работой pyenv; если это не помогает, debug pyenv machinery (export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' очень помогает здесь), чтобы выяснить, что именно происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...