繁体   English   中英

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

[英]Poetry doesn't use the correct version of Python

我最近安装了 Pyenv 和 Poetry,并想创建一个新的 Python 3.8 项目。 我已经使用适当的 Pyenv 命令(例如pyenv global 3.8.1 3.8.1将 python 的globallocal版本都设置为 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 安装的版本?

编辑

我正在使用与 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 为项目显式创建环境,还是项目应该能够在运行pyenv local 3.8.1. ? 当我做后者时,没有任何变化,我仍然得到同样的错误。

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>切换诗歌以使用该版本。

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

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

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

管理虚拟环境

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

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

您可以使用为诗歌指定显式 python 可执行文件

poetry env use <path to python executable>

这对我有用。

在我的机器上,我能够通过重新安装 Poetry 来修复“项目不支持当前激活的 Python 版本”错误:

curl -sSL https://install.python-poetry.org | python3 - --uninstall
curl -sSL https://install.python-poetry.org | python3 -

之后, poetry能够找到pyenv安装的正确版本。

就我而言,我不得不删除并重新创建诗歌使用的 virtualenv 这是因为我在创建 virtualenv 之后添加了 python 版本限制(例如python = ">=3.6.2 <3.7" )。

脚步

  • 删除原来的:运行poetry env remove myApp-XkghI9p6-py3.6
  • 运行任何诗歌步骤,创建它,或运行poetry shell ,并确认poetry run python --version是正确的版本。

即使这个问题已经解决,我还是为再次遇到这个问题的人写这篇文章。 在所有尝试之后,我的 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/

工作!

就我而言,环境以某种方式被弄乱了,以至于诗歌未能正确激活 virtualenv。

尝试使用不同的 shell:也许是 sh 或 zsh。 如果一切都在那个 shell 中工作,这证明你的环境和我的一样一团糟:)

在两个 shell 中使用此命令:

$ env

并尝试找出差异

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

对我有用的是运行python3.8 -m poetry install

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM