Poetry 没有使用正确版本的 Python

新手上路,请多包涵

我最近安装了 Pyenv 和 Poetry,想创建一个新的 Python 3.8 项目。 I’ve set both the global and local versions of python to 3.8.1 using the appropriate Pyenv commands ( pyenv global 3.8.1 for example).当我在终端中运行 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 一起安装的版本?

编辑

我正在使用与 Python 2.7 捆绑在一起的 MacOS。我认为这可能会导致这里出现一些问题。我已经用 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 为项目明确创建环境,还是项目应该能够在运行后访问正确的 Python 版本 pyenv local 3.8.1. ?当我做后者时,什么都没有改变,我仍然得到同样的错误。

原文由 P4nd4b0b3r1n0 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.9k
2 个回答

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

原文由 P4nd4b0b3r1n0 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

你抱怨的那一行只是说项目支持的python版本是python2.7或更高版本,这与你用pyenv安装的python版本无关。

 python = "^2.7"

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


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

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

例如,在我的机器上,poetry 安装了 3 个虚拟环境,并使用与 python3.6 关联的那个:

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

我不确定这些虚拟环境如何与 pyenv 使用的 shivs 交互,但他们的 文档 有一个与之相关的部分

管理虚拟环境

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

原文由 Sam Broster 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题