Pipenv не признает версию Pyenv? - PullRequest
0 голосов
/ 06 июля 2018

У меня установлен Python 3.7.0, но для конкретного проекта Django я хотел бы использовать Python 3.6.5. Используя для этой цели pyenv, на моем Macbook Pro я запустил brew install pyenv, затем pyenv install 3.6.5 и в корневом каталоге проекта pyenv local 3.6.5. Я подтвердил, что версия Python 3.6.5 активна:

Kurts-MacBook-Pro-2:lucy-web kurtpeek$ cat .python-version
3.6.5
Kurts-MacBook-Pro-2:lucy-web kurtpeek$ pyenv versions
  system
* 3.6.5 (set by /Users/kurtpeek/Documents/dev/lucy2/lucy-web/.python-version)

Используемое Pipfile похоже на следующее:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.6.5"

Однако, когда я запускаю pipenv shell, я получаю, что он «по умолчанию» соответствует моей версии системы, python 3.7.0:

Kurts-MacBook-Pro-2:lucy-web kurtpeek$ pipenv shell
Loading .env environment variables...
Warning: Your Pipfile requires python_version 3.6.5, but you are using 3.7.0 (/Users/k/.local/share/v/l/bin/python).
  $ pipenv check will surely fail.
Launching subshell in virtual environment…
bash-3.2$  . /Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/bin/activate
(lucy-web-CVxkrCFK) bash-3.2$

Теперь, если я попытаюсь запустить python manage.py shell для запуска оболочки проекта Django, я получу SyntaxError, который, я подозреваю, имеет отношение к Python 3.7, так как я уверен, что это работало раньше:

(lucy-web-CVxkrCFK) bash-3.2$ python manage.py shell
Traceback (most recent call last):
  File "manage.py", line 28, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/core/management/__init__.py", line 338, in execute
    django.setup()
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/apps/registry.py", line 116, in populate
    app_config.ready()
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/two_factor/apps.py", line 10, in ready
    from .admin import patch_admin
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/two_factor/admin.py", line 2, in <module>
    from django.contrib import admin
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/contrib/admin/__init__.py", line 4, in <module>
    from django.contrib.admin.filters import (
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/contrib/admin/filters.py", line 10, in <module>
    from django.contrib.admin.options import IncorrectLookupParameters
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/contrib/admin/options.py", line 12, in <module>
    from django.contrib.admin import helpers, widgets
  File "/Users/kurtpeek/.local/share/virtualenvs/lucy-web-CVxkrCFK/lib/python3.7/site-packages/django/contrib/admin/widgets.py", line 151
    '%s=%s' % (k, v) for k, v in params.items(),
    ^
SyntaxError: Generator expression must be parenthesized

Основная причина этого, однако, я полагаю, заключается в том, что он запускается в Python 3.7.0, а не в Python 3.6.5, как требуется.

Являются ли pipenv и pyenv несовместимыми друг с другом?

Ответы [ 4 ]

0 голосов
/ 15 марта 2019

В моем случае на MacOS. Я установил Python 3.6.5 следующим образом:

Установите определенную версию Python, используя pyenv :

pyenv install 3.6.5

Создайте среду, используя pipenv с параметром --python вместе с расположением версии Python:

pipenv --python /Users/<<Your_User>>/.pyenv/versions/3.6.5/bin/python3.6

Если вы когда-нибудь столкнетесь с проблемами, связанными с _sqlite3, вы можете проверить это pyenv ticket для решения.

Используйте pipenv run для выполнения команд внутри созданной среды:

pipenv run python manage.py shell
0 голосов
/ 06 июля 2018

Я заметил, в чем проблема после понижения моего общесистемного Python с 3.7.0 до 3.6.5 и получения той же ошибки. Как только pipenv создал virtualenv, он не изменит его в соответствии с вашей текущей pyenv версией, но если вы удалите virtualenv и создадите новую, он "подберет" правильную версию.

0 голосов
/ 12 декабря 2018

Установите python 3.6.5, используя pyenv install 3.6.5

Экспорт новой установленной версии Python в PATH

export PATH=${PYENV_PYTHON_VERSIONS_HOME}/3.6.5/bin

Теперь в 'Piplock' укажите ту же версию.

[requires] python_version = "3.6.5"

Наконец, выполните команду «удалить предыдущий virtualenv» и перестройте заново.

pipenv --rm

pipenv install --dev.

0 голосов
/ 06 июля 2018

Pipenv знает о Pyenv, но он не использует автоматически ту же версию Python, если вы не попросите его сделать это. Об этом есть примечание в Документах Pipenv .

Вы можете либо указать Pipenv использовать определенную версию Python, например

pipenv install --python 3.6.5

или вы можете установить переменную окружения по умолчанию для версии Pyenv, например

export PIPENV_PYTHON="$PYENV_ROOT/shims/python"
...