Pipenv无法识别PyEnv Python安装的shims

3
我正在尝试使用pipenv和pyenv创建一个虚拟环境,使用Python 3.9.0进行项目开发,但是无法让pipenv识别由pyenv安装的Python 3.9.0版本。奇怪的是,使用pyenv python 3.8.6就像预期的那样工作,我正在指定pipenv要使用的特定Python,类似于this answer
我正在运行Catalina 10.15.7,并且我的同事在他的机器上复现了完全相同的行为。
Pipenv和pyenv都已通过Homebrew安装。我已经尝试使用pip卸载homebrew Pipenv并重新安装,但结果相同。
复现步骤:
我成功运行了pyenv install 3.9.0,并且当我运行pyenv versions时,我看到:
  • system
  • 3.8.6
  • 3.9.0
正如我所预期的那样。
在我的工作目录中,我运行pyenv local 3.9.0来切换本地版本的Python,然后运行pyenv version,返回结果为:

3.9.0 (由 /Users/my-name/myproject 设置)

说明本地版本已经设置好了。
为了再次确认,运行pyenv which python,返回结果为:

/Users/my-name/.pyenv/versions/3.9.0/bin/python

现在,如果我运行 pipenv install --python 3.9.0,我会得到以下结果:

pipenv install --python 3.9.0

这已经很可疑了,因为3.9.0已经是我的本地版本。如果我回答“y”,我会得到以下回复:

not available on path apparently

这段话的意思是:当我运行“python”命令时,它会显示Python 3.9.0,所以显然它已经在我的路径上。但是,Pipfile没有为我创建,并且我也没有得到pipenv虚拟环境。如果我改为运行“pipenv install --python $PIPENV_PYTHON”命令,理论上应该使用我路径上的Python版本(再次提醒,应该是3.9.0),但实际上得到的结果却不是这样。

mismatched versions

请注意,它说“使用 /users/..../python (3.9.0) 创建虚拟环境”,这是正确的,但下一行说“创建了虚拟环境 CPYTHON3.8.6...”。
现在,如果我使用 python 3.8.6 重复上述步骤,一切都正常。
此外,如果我指定 pipenv --python ~/.pyenv/versions/3.9.0/bin/python3.9,也似乎可以正常工作——因此由于某种原因它没有遵守版本,但确实遵守二进制。
如果我运行 pipenv install --python $(pyenv which python),情况也是如此,因为它实际上与上面的命令相同。
供参考,我的环境变量:
  • PIP_PYTHON_PATH=/usr/local/Cellar/pipenv/2020.11.15/libexec/bin/python <- 可能是问题所在?

  • PIPENV_ACTIVE=1

  • PIPENV_PYTHON=/Users/myname/.pyenv/shims/python

  • PYENV_ROOT=/Users/myname/.pyenv

我的$PATHPATH=/Users/my-name/.pyenv/shims:开头:

我确实已经通过homebrew安装了python 3.8和python 3.9,但我并不想使用它们,由于我的路径以shims开头,我认为这不应该是一个问题。运行which python3which python都指向"shims"文件夹。

总结

Pipenv没有尊重我的pyenv shims,尽管我的PYENV_ROOT和PATH已经正确设置。运行 pipenv install --python $(pyenv which python) 可以工作,但指定一个Python版本则不行。
这是pipenv、pyenv还是我自己的问题?
1个回答

3
根据 pipenv文档

Pipenv默认使用安装它的Python来创建虚拟环境。您可以设置 --python 选项为 $(pyenv which python),以使用当前的pyenv解释器。

它可能正在使用您的系统Python版本而不是您的shim。

同意,这样做确实有效(与我手动指向二进制文件是一样的),然而文档还提到要将pipenv_python更改为shims/python目录,并且还提到您应该能够使用pipenv install --python x.x.x来指定已安装的版本。所以仍然有些问题--我希望能够通过环境变量自动工作,或者至少通过指定版本号来使其工作。 - undefined
我想简短地表达那个评论的意思就是:“我同意,它没有使用我的垫片。为什么呢?”这最终是我希望它能做到的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接