2017-04-06 15 views
2

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

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一起,我相信这是 '系统'):

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.4python3.5正在工作,因为他们发现以前的顶级安装。结果pyenv which python3.x.ypython3.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的答案,查找和使用所有这些环境的安装TOX-pyenv!

+0

是什么'pyenv version'(没有计划** S **末)回归? –

+0

Oliver:它按照全局/本地命令中列出的顺序返回系统加3.xx版本的列表,其中'(由/Users/Workspace/Desktop/pydnmr-tox/.python-version设置)' –

+0

I也注意到这样的不一致,但没有机会让他们失望,这就是为什么tox-pyenv是一个很好的选择。 –

回答

2

pyenv interpreter发现未与tox核心(yet)集成。因此,所有工作都只是因为tox碰巧找到一些它已经应用了未知的发现方法。

有两种方法,使这项工作始终坚持:

  1. 讲述在你打电话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。

  2. 如果不这样做你无论出于何种原因,或者你喜欢更加自动的一点:有一个插件 - tox-pyenv,是以发现的护理

+2

pyenv global或pyenv本地都不工作,但安装tox-pyenv。我读到tox-pyenv告诉tox使用'pyenv which'来寻找路径。我尝试这样做,发现了奇怪的行为。我会在我的问题结尾添加它。 –

0

可以设置所有你需要的版本使用pyenv global。例如:

pyenv global 3.6.0 3.5.3 3.4.6 2.7.10 

我用这个方法对我的图书馆和TOX运行没有任何问题:)

+0

这就是我所谓的“在所有版本中使用pyenv全局”。谢谢,不过。 –

+0

你是否像我的例子一样启动了命令(同时使用所有版本)?如果你运行'pyenv global',输出是什么?(你应该看到所有的版本,否则如果你只有一个,这意味着我的第一个问题的答案是不可) – daveoncode

+0

是的,我做到了。 'pyenv global'的输出是所有版本的列表。我在其他评论中有更详细的说明,加上我原来的问题的附录。神秘的是,pyenv似乎已经成功安装了这些版本,但在3.2到3.6中使用'python3.x'将不会找到python,或者找到旧的顶级安装。但是:安装tox-pyenv神奇地解决了这个问题! –

相关问题