我正在尝试使用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并重新安装,但结果相同。
复现步骤:
我成功运行了
在我的工作目录中,我运行
为了再次确认,运行
现在,如果我使用 python 3.8.6 重复上述步骤,一切都正常。
此外,如果我指定
如果我运行
供参考,我的环境变量:
这是pipenv、pyenv还是我自己的问题?
我正在运行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
,我会得到以下结果:
这已经很可疑了,因为3.9.0已经是我的本地版本。如果我回答“y
”,我会得到以下回复:
这段话的意思是:当我运行“python”命令时,它会显示Python 3.9.0,所以显然它已经在我的路径上。但是,Pipfile没有为我创建,并且我也没有得到pipenv虚拟环境。如果我改为运行“pipenv install --python $PIPENV_PYTHON”命令,理论上应该使用我路径上的Python版本(再次提醒,应该是3.9.0),但实际上得到的结果却不是这样。
请注意,它说“使用 /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
我的$PATH
以PATH=/Users/my-name/.pyenv/shims:
开头:
我确实已经通过homebrew安装了python 3.8和python 3.9,但我并不想使用它们,由于我的路径以shims开头,我认为这不应该是一个问题。运行which python3
和which python
都指向"shims"文件夹。
总结
Pipenv没有尊重我的pyenv shims,尽管我的PYENV_ROOT和PATH已经正确设置。运行pipenv install --python $(pyenv which python)
可以工作,但指定一个Python版本则不行。这是pipenv、pyenv还是我自己的问题?
pipenv_python
更改为shims/python目录,并且还提到您应该能够使用pipenv install --python x.x.x
来指定已安装的版本。所以仍然有些问题--我希望能够通过环境变量自动工作,或者至少通过指定版本号来使其工作。 - undefined