P4n*_*1n0 15 python virtualenv pyenv python-poetry
我最近安装了 Pyenv 和 Poetry,想创建一个新的 Python 3.8 项目。我已经将python的global和local版本设置为3.8.1使用适当的 Pyenv 命令(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"
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
我应该使用 Pyenv 为项目明确创建一个环境,还是项目在运行后应该能够访问正确的 Python 版本pyenv local 3.8.1.?当我做后者时,没有任何变化,我仍然遇到相同的错误。
Rob*_*byB 38
我对此的解决方案。
首先用这个命令查看情况
poetry env list
Run Code Online (Sandbox Code Playgroud)
如果您有这样的输出:project_name-QI_LjVaV-py3.9(已激活)
你可能想摆脱这个环境。
所以你首先要进行“停用”:
deactivate
Run Code Online (Sandbox Code Playgroud)
然后是“删除”之后:
poetry env remove project_name-QI_LjVaV-py3.9
Run Code Online (Sandbox Code Playgroud)
现在同样的命令:
poetry env list
Run Code Online (Sandbox Code Playgroud)
不应该返回任何内容。
然后你就可以:
which python3
Run Code Online (Sandbox Code Playgroud)
并且,如果版本没问题,您可以使用与 python 路径完全相同的输出来告诉诗歌(示例):
poetry env use /usr/bin/python3
Run Code Online (Sandbox Code Playgroud)
再做一次
poetry env info
Run Code Online (Sandbox Code Playgroud)
确保使用的是你想要的Python版本。
您可以继续
poetry install
Run Code Online (Sandbox Code Playgroud)
Jan*_*Jan 32
你可以使用以下命令为诗歌指定一个显式的 python 可执行文件
poetry env use <path to python executable>
Run Code Online (Sandbox Code Playgroud)
这对我有用。
Jac*_*ing 17
在我的机器上,我可以通过重新安装 Poetry 来修复“项目不支持当前激活的 Python 版本”错误:
curl -sSL https://install.python-poetry.org | python3 - --uninstall
curl -sSL https://install.python-poetry.org | python3 -
Run Code Online (Sandbox Code Playgroud)
之后,poetry能够找到安装的正确版本pyenv。
小智 11
pyproject.toml 用于定义项目的所有依赖项,包括支持的 Python 版本。
你抱怨的那句话只是说项目支持的python版本是python2.7或更高版本,这与你用pyenv安装的python版本无关。
python = "^2.7"
Run Code Online (Sandbox Code Playgroud)
如果要更新项目支持的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
Run Code Online (Sandbox Code Playgroud)
我不确定这些虚拟环境如何与 pyenv 使用的 shiv 进行交互,但他们的文档有一个与之相关的部分
管理虚拟环境
有一个名为 pyenv-virtualenv 的 pyenv 插件,它具有各种功能,可帮助 pyenv 用户管理由 virtualenv 或 Anaconda 创建的虚拟环境。因为那些虚拟环境的 activate 脚本依赖于用户交互式 shell 的 $PATH 变量,它会拦截 pyenv 的 shim 风格的命令执行钩子。如果您有使用这些虚拟环境的计划,我们建议您也安装 pyenv-virtualenv。
好吧,我想出了问题。有点尴尬,pyenv shell 3.8.1在运行任何其他命令之前我没有运行。现在一切正常。谢谢大家的努力。
就我而言,我必须删除并重新创建诗歌使用的virtualenv 。python = ">=3.6.2 <3.7"这是因为我在创建 virtualenv 后添加了 python 版本限制(例如)。
poetry env remove myApp-XkghI9p6-py3.6poetry shell,并确认poetry run python --version是正确的版本。