我正在尝试启动并运行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
然而,只有3.4和3.5被认可(连同2.7.8,我相信是' system'):
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
任何想法是什么导致了这种行为?除了3.4 / 3.5之外,tox / detox同样找不到任何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
但是,按照以下答案中的建议安装tox-pyenv可以让tox找到并使用所有这些环境!
答案 0 :(得分:3)
pyenv解释器发现未与tox核心(yet)集成。因此,所有可行的工作只是因为tox碰巧找到了一些已经应用的不知情的发现方法。
有两种方法可以使这项工作保持一致:
在您调用tox的上下文中告诉pyenv所有解释器。例如在你想要运行tox pyenv local system 3.2.6 3.3.6 3.4.6 3.5.3 3.6.1
的项目中,然后tox应该找到所有这些。如果您希望这是默认设置,则无法将pyenv global
设置为完全相同。列表中的第一个是调用python时调用的解释器,但是其他所有解释器也应该是活动的,因此可以为tox发现。
如果由于某种原因这不适合您,或者您希望它更自动化:有一个插件 - tox-pyenv负责发现
< / LI> 醇>答案 1 :(得分:0)
您可以使用pyenv global
设置所需的所有版本。例如:
pyenv global 3.6.0 3.5.3 3.4.6 2.7.10
我使用这种方法为我的库和tox运行没有任何问题:)