25

我最近安装了 Pyenv 和 Poetry,并想创建一个新的 Python 3.8 项目。我已将python的版本global和版本设置为使用适当的 Pyenv 命令(例如)。当我在终端中运行时,输出符合预期。local3.8.1pyenv global 3.8.1pyenv version3.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.?当我做后者时,没有任何变化,我仍然得到同样的错误。

4

7 回答 7

16

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。

于 2020-01-19T13:46:40.390 回答
11

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

于 2020-01-19T14:50:44.243 回答
0

对我有用的是跑步python3.8 -m poetry install

于 2021-11-15T08:14:26.167 回答
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/

工作!

于 2020-07-08T01:06:09.337 回答
0

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

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

之后,poetry能够找到由pyenv.

于 2022-02-04T16:06:31.477 回答
0

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

于 2021-05-29T15:15:15.003 回答
0

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

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

在两个 shell 中使用此命令:

$ env

并尝试找出差异

于 2021-03-09T11:56:43.670 回答