Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
诗歌不是';不要使用正确的Python版本_Python_Virtualenv_Pyenv_Python Poetry - Fatal编程技术网

诗歌不是';不要使用正确的Python版本

诗歌不是';不要使用正确的Python版本,python,virtualenv,pyenv,python-poetry,Python,Virtualenv,Pyenv,Python Poetry,我最近安装了Pyenv和Poetry,并希望创建一个新的python3.8项目。我已经使用适当的Pyenv命令将python的global和local版本设置为3.8.1(例如Pyenv global 3.8.1)。当我在终端中运行pyenv version时,输出是3.8.1. 现在的问题是,当我创建一个新的带有Poetry的python项目(Poetry new my project)时,生成的pyproject.toml文件会创建一个带有python 2.7的项目: [tool.poetr

我最近安装了Pyenv和Poetry,并希望创建一个新的python3.8项目。我已经使用适当的Pyenv命令将python的
global
local
版本设置为
3.8.1
(例如
Pyenv global 3.8.1
)。当我在终端中运行
pyenv version
时,输出是
3.8.1.

现在的问题是,当我创建一个新的带有Poetry的python项目(
Poetry new my project
)时,生成的
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"

我应该使用Pyenv为项目显式创建环境,还是在运行
Pyenv local 3.8.1.
后项目能够访问正确的Python版本?当我执行后一种操作时,没有任何变化,仍然会出现相同的错误。

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

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

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


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

  • 诗歌环境列表
    显示python诗歌可以使用的版本
  • poetry env use
    切换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创建的虚拟环境。因为这些虚拟环境的activate脚本依赖于用户交互shell的$PATH变量,所以它将拦截pyenv的shim样式的命令执行挂钩。如果您有计划使用这些虚拟环境,我们建议您也安装pyenv virtualenv


好吧,我知道问题出在哪里了。有点尴尬的是,在运行任何其他命令之前,我没有运行
pyenvshell3.8.1
。现在一切都好了。谢谢大家的努力。

即使这个问题已经解决,我还是为再次遇到这个问题的人写这篇文章。 在所有的尝试之后,我的python-V总是得到2.7版本,并且没有讨论过运行pyenvshell(令我惊讶!) 将pyenv添加到路径

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
在我的例子中,我必须将它添加到.bashrc,而不是bash_profile。


成功了

在我的例子中,环境在某种程度上被搞得一团糟,诗歌无法正确激活虚拟世界

尝试使用不同的shell:可能是、sh或zsh。如果所有东西都在这个外壳中工作,这证明您的环境和我的一样糟糕:)

在两个壳中使用此命令:

$ env

并尝试找出差异

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

是否有助于/澄清状态?“Poetry应该管理所有python依赖项,这样就不需要使用pyenv。”-pyenv不适用于依赖项。它管理Python本身的版本。诗歌是天生的吗?啊,我错了。关键是
pyproject.toml
文件表示您的项目支持python2.7或great,而不是说“我想使用python3.8”。如果你想更新你的项目支持的python版本,那么直接更新toml文件我已经更新了我的答案,希望它现在更有意义。很好的答案,谢谢。尽管我有一个后续问题:如何增加诗歌虚拟环境选项的数量?当我现在运行
poyment env list
时,只有一个选项,那就是Python2.7。例如,我希望python3.8也有和选项。我不知道该命令在过去一年中是否发生了更改,但我认为当前的命令是
poyment env use python3.8
。来源:有趣的是,我需要这样做,尽管我有一个
.python版本
,目录中有正确的版本。
$ env