Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pyenv安装多个python,但只识别一些python_Python_Python 3.x_Tox_Pyenv - Fatal编程技术网

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

pyenv安装多个python,但只识别一些python,python,python-3.x,tox,pyenv,Python,Python 3.x,Tox,Pyenv,我正在尝试启动并运行pyenv(macosx),这样我就可以使用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,我认为是“系统

我正在尝试启动并运行pyenv(macosx),这样我就可以使用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,我认为是“系统”):

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

编辑:看起来pyenv已经安装了所有的环境,但是
python3.x
命令没有找到它们
python3.4
python3.5
正在运行,因为它们发现了以前的顶级安装。
pyenv which python3.x.y
vs.
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找到并使用所有这些环境

pyenv解释器发现未与tox核心集成。所以,一切工作都是因为tox碰巧发现了一些它已经应用的不知道的发现方法

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

  • 在调用tox的上下文中,告诉pyenv关于所有口译员的信息。e、 g.在要运行tox
    pyenv本地系统3.2.6 3.3.6 3.4.6 3.5.3 3 3.6.1
    的项目中,tox应找到所有这些系统。如果您希望无论身在何处都将此设置为默认设置,则不能将
    pyenv global
    设置为完全相同的设置。列表中的第一个是仅在调用python时调用的解释器,但所有其他解释器也应处于活动状态,因此对tox是可发现的

  • 如果出于任何原因,这对您来说都不起作用,或者您希望它更自动化一点:有一个插件——负责发现


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

    pyenv global 3.6.0 3.5.3 3.4.6 2.7.10
    

    我对我的库和tox运行使用这种方法,没有任何问题:)

    这就是我所说的“在所有版本上使用pyenv global”。不过,谢谢。您是否以与我的示例相同的方式启动了该命令(同时启动所有版本)?如果运行
    pyenv global
    输出是什么?(你应该看到所有的版本,否则如果你只得到一个,这意味着我的第一个问题的答案是否定的)是的,我看到了。
    pyenv global
    的输出是所有版本的列表。我在其他评论中有更多的阐述,另外还有我原来问题的附录。神秘的是,pyenv似乎已经成功安装了这些版本,但是在3.2到3.6版本中使用
    python3.x
    要么找不到python,要么找不到旧的顶级安装。但是:安装tox-pyenv神奇地解决了这个问题!
    pyenv version
    (末尾没有s)返回什么?奥利弗:它返回一个system plus 3.x.x版本的列表,按照全局/本地命令中列出的顺序,带有
    (由/Users/Workspace/Desktop/pydnmr tox/.python version设置)
    我也注意到类似的不一致,但还没有机会确定它们,这就是为什么tox-pyenv是一个很好的替代品。pyenv-global和pyenv-local都不起作用,但安装tox-pyenv起了作用。我读到tox-pyenv告诉tox使用
    pyenv来进行路径发现。我试着这样做,发现了奇怪的行为。我会在问题的末尾加上它。
    
    pyenv global 3.6.0 3.5.3 3.4.6 2.7.10