Tox не находит python3.6 даже при наличии шиммы.Что не так с моей настройкой pyenv? - PullRequest
0 голосов
/ 13 февраля 2019

Попытка вдохнуть жизнь в пакет с Джанго, который впал в негодность.Они используют токсины для тестирования, поэтому я настроил pyenv на своем MacBook.Я установил 3 версии Python, как вы можете видеть ниже, и все выглядит так, как будто оно должно работать, но если бы это было так, я бы не спрашивал, почему это не так.

Я заменилмой домашний каталог с ~, чтобы его было немного легче читать.

pyenv был установлен с brew install pyenv, а различные версии python были установлены с pyenv install #.#.#

ШиммыСуществуют:

$ echo $PATH
~/.pyenv/shims:~/.platformsh/bin:/usr/local/sbin:...
$ which python3.6
~/.pyenv/shims/python3.6
$ which python3.4
~/.pyenv/shims/python3.4
$ which python3.5
~/.pyenv/shims/python3.5

Но их выполнение работает не так, как ожидалось:

$ pyenv local 3.4.9 3.5.6 3.6.8
$ python3.4
Python 3.4.9 (default, Feb 12 2019, 10:33:47)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3.5
pyenv: python3.5: command not found

The `python3.5' command exists in these Python versions:
  3.5.6

$ python3.6
pyenv: python3.6: command not found

The `python3.6' command exists in these Python versions:
  3.6.8

И токсины не работают так:

  py34-1.11: commands succeeded
ERROR:   py36-1.11: Error creating virtualenv. Note that some special characters (e.g. ':' and unicode symbols) in paths are not supported by virtualenv. Error details: InvocationError("Failed to get version_info for python3.6: pyenv: python3.6: command not found\n\nThe `python3.6' command exists in these Python versions:\n  3.6.8\n\n", None)
ERROR:   py36-2.0: Error creating virtualenv. Note that some special characters (e.g. ':' and unicode symbols) in paths are not supported by virtualenv. Error details: InvocationError("Failed to get version_info for python3.6: pyenv: python3.6: command not found\n\nThe `python3.6' command exists in these Python versions:\n  3.6.8\n\n", None)
  py36-latest: commands succeeded
  docs: commands succeeded

Но в папке .toxвы найдете эти VirtualEnv, которые можно активировать вручную.

$ ls .tox
dist        docs        flake8      log     py34-1.11   py36-1.11   py36-2.0    py36-latest

Потому что в какой-то момент он работал ....

Я понимаю, почему он не работает,я не понимаю, почему pyenv неправильно настраивает окружение (или, возможно, именно так оно и должно себя вести).Все, что я читаю, указывает на то, что python3.6 должен запустить интерпретатор python3.6.8

$ bash -x python3.6
+ set -e
+ '[' -n '' ']'
+ program=python3.6
+ [[ python3.6 = \p\y\t\h\o\n* ]]
+ export PYENV_ROOT=~/.pyenv
+ PYENV_ROOT=~/.pyenv
+ exec /usr/local/Cellar/pyenv/1.2.9/libexec/pyenv exec python3.6
pyenv: python3.6: command not found

The `python3.6' command exists in these Python versions:
  3.6.8

1 Ответ

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

pyenv по умолчанию выбирает питона «локально», то есть ищет переменную окружения PYTHON_VERSION или файл .python-version.

Лично я нахожу эту настройкунемного громоздко (нужно, чтобы эти файлы были засорены во всех проектах, особенно в проектах, где требуется несколько версий).К счастью, вы можете заставить эти «прокладки» функционировать в любом месте с версией Python по умолчанию, используя pyenv global #.#.#

В вашем случае, чтобы python3.6 shim выполнял 3.6.8 без необходимости устанавливать .python-version файлов, вы бы запустили pyenv global 3.6.8 - вы можете запустить это несколько раз и для разных версий Python: pyenv global 3.6.8 3.5.6 ...

Причина, по которой вы, вероятно, не имеете эти разрешения внутри toxis tox очищает среду при выполнении, поэтому переменная окружения PYTHON_VERSION не будет проходить.Вы можете отключить это, установив passenv= в вашем tox.ini.Например:

[testenv]
passenv = PYTHON_VERSION
...