pyenv 安装了多个 python,但只能识别一些

Geo*_*etz 5 python python-3.x tox pyenv

我正在尝试启动并运行 pyenv (Mac OS X),因此我可以使用 tox/detox 来测试代码与多个 python 环境。我能够安装多个python3版本,然后我pyenv global在所有版本上使用。这样做之后,pyenv versions返回这个列表:

  system
* 3.2.6 (set by /Users/Workspace/.pyenv/version)
  3.3.6
  3.4.6
  3.5.3
  3.6.1
Run Code Online (Sandbox Code Playgroud)

但是,只有 3.4 和 3.5 被识别(以及 2.7.8,我认为它是“系统”):

Geoffreys-MBP:pydnmr-tox Workspace$ python --version
Python 2.7.8
Geoffreys-MBP:pydnmr-tox Workspace$ python3.2 --version
-bash: python3.2: command not found
Geoffreys-MBP:pydnmr-tox Workspace$ python3.3 --version
-bash: python3.3: command not found
Geoffreys-MBP:pydnmr-tox Workspace$ python3.4 --version
Python 3.4.3
Geoffreys-MBP:pydnmr-tox Workspace$ python3.5 --version
Python 3.5.2
Geoffreys-MBP:pydnmr-tox Workspace$ python3.6 --version
-bash: python3.6: command not found
Run Code Online (Sandbox Code Playgroud)

任何想法是什么导致这种行为?tox/detox 同样找不到除了 3.4/3.5 之外的任何 Python 版本。

编辑:似乎 pyenv 已经安装了所有环境,但是python3.x命令没有找到它们。python3.4并且python3.5正在工作,因为他们找到了以前的顶级安装。pyenv which python3.x.y对比结果python3.x [--version]如下所示。

$ pyenv which python3.2
/Users/Workspace/.pyenv/versions/3.2.6/bin/python3.2
$ python3.2 --version
-bash: python3.2: command not found
$ python3.2
-bash: python3.2: command not found
pyenv which python3.3
/Users/Workspace/.pyenv/versions/3.3.6/bin/python3.3
$ python3.3 --version
-bash: python3.3: command not found
$ pyenv which python3.4
/usr/local/bin/python3.4  # old install
$ python3.4 --version
Python 3.4.3              # not 3.4.6 installed by pyenv
$ pyenv which python3.4.6
pyenv: python3.4.6: command not found
$ python3.4.6 --version
-bash: python3.4.6: command not found
$ pyenv which python3.5
/Users/Workspace/.pyenv/versions/3.5.3/bin/python3.5
$ python3.5 --version
Python 3.5.2  #Linked to my old 3.5.2 install instead of pyenv 3.5.3 install
$ pyenv which python3.6
/Users/Workspace/.pyenv/versions/3.6.1/bin/python3.6
$ python3.6 --version
-bash: python3.6: command not found
Run Code Online (Sandbox Code Playgroud)

但是,按照以下答案中的建议安装 tox-pyenv 允许 tox 找到并使用所有这些环境!

Oli*_*ter 4

pyenv 解释器发现尚未与 tox 核心集​​成。所以一切有效只是因为 tox 碰巧用它已经应用的无意识发现方法发现了一些东西。

有两种方法可以使这项工作始终如一:

  1. 告诉 pyenv 您调用 tox 的上下文中的所有解释器。例如,在您要运行 tox 的项目中,pyenv local system 3.2.6 3.3.6 3.4.6 3.5.3 3.6.1那么 tox 应该找到所有这些。如果您希望无论您身在何处都将其设置为默认值,则无法pyenv global完全像那样设置。列表中的第一个是在调用 python 时调用的解释器,但所有其他解释器也应该处于活动状态,因此可以发现毒物。

  2. 如果出于某种原因这对您不起作用或者您希望它更加自动化:有一个插件 - tox-pyenv可以处理发现

  • pyenv global 或 pyenv local 都不起作用,但安装 tox-pyenv 却起作用了。我读到 tox-pyenv 告诉 tox 使用 `pyenv which` 进行路径发现。我尝试这样做并发现了奇怪的行为。我将在问题末尾添加它。 (2认同)