诗歌没有使用正确的Python版本

时间:2020-01-19 13:06:13

标签: python virtualenv pyenv python-poetry

我最近同时安装了Pyenv和Poetry,并希望创建一个新的Python 3.8项目。我已经使用适当的Pyenv命令(例如,global)将python的local3.8.1版本都设置为pyenv global 3.8.1。当我在终端中运行pyenv version时,输出将如预期的那样3.8.1.

现在,问题是当我用Poetry(poetry new my-project)创建一个新的python项目时,生成的pyproject.toml文件创建了一个使用python 2.7的项目:

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["user <user@email.com>"]

[tool.poetry.dependencies]
python = "^2.7"

[tool.poetry.dev-dependencies]
pytest = "^4.6"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

似乎Poetry默认返回到Python的系统版本。如何更改此设置,使其使用与Pyenv一起安装的版本?

修改

我正在使用MacOS,它与Python 2.7捆绑在一起。我认为这可能是造成此处某些问题的原因。我再次用Pyenv重新安装了Python 3.8,但是当我按下Poetry install时,出现以下错误:

The currently activated Python version 2.7.16 is not supported by the project (^3.8).
Trying to find and use a compatible version.

[NoCompatiblePythonVersionFound]
Poetry was unable to find a compatible version. If you have one, you can explicitly use it via the "env use" command. 

我应该使用Pyenv为该项目显式创建一个环境,还是在运行pyenv local 3.8.1.之后该项目能够访问正确的Python版本?当我执行后者时,什么也没有改变,但我仍然遇到相同的错误。

5 个答案:

答案 0 :(得分:4)

pyproject.toml用于定义项目的所有依赖项,包括受支持的python版本。

您抱怨的那句话只是说项目支持的python版本是python2.7或更高版本,这与您随pyenv安装的python版本无关。

python = "^2.7"

如果要更新项目支持的python版本,则可以直接编辑文件并运行poetry update


如果要使用多个版本的python,则需要确保诗歌使用的是所使用python版本的正确依赖项。要更改诗歌使用的特定版本,您应该使用poetry env

  • poetry env list显示可以使用的python诗歌版本
  • poetry env use <python>切换诗歌以使用该版本。

例如,在我的机器上,诗歌中安装了3个虚拟环境,并且正在使用与python3.6相关联的虚拟环境:

↪ poetry env list
sipy-a9sqc5pb-py3.6 (Activated)
sipy-a9sqc5pb-py3.7
sipy-a9sqc5pb-py3.8

我不确定这些虚拟环境如何与pyenv所使用的shiv交互,但是它们的docs有与之相关的部分

管理虚拟环境

有一个名为pyenv-virtualenv的pyenv插件,它具有多种功能,可帮助pyenv用户管理virtualenv或Anaconda创建的虚拟环境。由于这些虚拟环境的激活脚本依赖于更改用户交互式shell的$ PATH变量,因此它将拦截pyenv的shim样式命令执行钩子。如果您有计划在这些虚拟环境中玩游戏,我们建议您也安装pyenv-virtualenv。

答案 1 :(得分:3)

好的,我发现了问题。有点尴尬的是,我在运行任何其他命令之前都没有运行pyenv shell 3.8.1。现在一切正常。谢谢大家的努力。

答案 2 :(得分:0)

即使这个问题已经解决,我还是为再次遇到此问题的人编写的。 经过所有尝试,我的python -V始终为2.7,并且没有讨论提到运行pyenv shell(对我来说感到惊讶!) 将pyenv添加到路径

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

就我而言,我必须将其添加到.bashrc而不是bash_profile中。 https://ggkbase-help.berkeley.edu/how-to/install-pyenv/

工作!

答案 3 :(得分:0)

就我而言,环境以某种方式混乱,诗歌无法正确激活 virtualenv。

尝试使用不同的 shell:或许、sh 或 zsh。如果在那个 shell 中一切正常,这证明你的环境和我的一样混乱:)

在两个 shell 中使用此命令:

$ env

并尝试找出差异

答案 4 :(得分:0)

您可以从 pyproject.toml 文件中删除 python 版本,然后运行 ​​Poetry install