诗歌将python版本更改为3.x

时间:2020-03-07 17:08:30

标签: python python-poetry

根据poetry's docs,设置新项目的正确方法是使用def get_dummy(df,column_nos): column_names = ['dummy_'+str(i) for i in column_nos] new_col_name = 'dummy_'+''.join([str(i) for i in sorted(column_nos)]) vector_sum = sum([df[i].values for i in column_names]) df[new_col_name] = [1 if i>0 else 0 for i in vector_sum] return df ,但这会通过创建以下toml文件来基于现已弃用的python2.7创建一个项目:

poetry new poetry-demo

如何将其更新为3.7?运行[tool.poetry] name = "poetry-demo" version = "0.1.0" description = "" authors = ["Harsha Goli <harshagoli@gmail.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" 时,仅将python = "^2.7"更改为python = "^3.7"会导致以下错误:

poetry install

7 个答案:

答案 0 :(得分:6)

每当您手动更改pyproject.toml的依赖项时,都必须注意以下几点:

  1. 随后运行poetry lock或删除poetry.lock文件以强制重新创建它。这样做的原因是,poetry installpoetry.lock作为输入,如果可以找到一个而不是pyproject.toml

  2. 如果您更改python版本并使用项目内virtualenv,请在运行.venv之前删除poetry install。诗歌一旦创建就不会更改venv的python版本,因为它使用python版本本身来创建virtualenv。

答案 1 :(得分:4)

Poetry 使使用不同的 Python 版本或虚拟环境变得非常容易。根据 Poetry docs 指定 Python 版本的推荐方法是

poetry env use /path/to/preferred/python/version

您可以通过运行获取 Python 版本的路径

which python3.7

答案 2 :(得分:3)

我有同样的问题。我通过解决文件/home/nordman/.poetry/bin/poetry中的第一行来解决它(nordman是我的本地名称)。

只需将#!/usr/bin/env python更改为#!/usr/bin/env python3

答案 3 :(得分:2)

有趣的是,由于缺少工具本身依赖的软件包并继续安装损坏的venv,所以诗歌无声地失败了。解决方法如下。

sudo apt install python3-venv
poetry env remove python3
poetry install

我必须删除pytest,然后使用poetry add pytest重新安装。

编辑:将项目从python3.7升级到python3.8时,我再次遇到此问题-为此,您不想安装python3-venv,而是想安装python3.8-venv

答案 4 :(得分:1)

您可以在pyproject.toml中进行更改,并执行适用于我的命令“ poetry env use 3.x”。

答案 5 :(得分:1)

我在 MacBook 上遇到过完全相同的行为!因此,为了使其实用,首先,让我们看看 MacBook 的默认 Python 是什么。我正在运行 macOS Big Sur 11.2.1 (20D74)。在终端:

python --version                                                                                                                  
Python 2.7.16

这样,让我们​​安装 poetry。我用过 poetry installation script from the GitHub。使用此脚本是安装 poetryrecommended method (尽管我认为这不是将脚本从 Internet 管道传输到 python 解释器的最佳主意) 安装脚本非常聪明:它尝试检测系统上可用的 python

def _which_python(self):
    """Decides which python executable we'll embed in the launcher script."""
    allowed_executables = ["python", "python3"]
    if WINDOWS:
        allowed_executables += ["py.exe -3", "py.exe -2"]
...

因此默认 Python 是 2.7.16,这是调用 python 返回的结果,~/.poetry/bin 中的条目将如下所示:

#!/usr/bin/env python

就这样吧!默认的 python 将最终出现在 pyproject.toml 文件中,您需要做一些额外的工作:a) 确保 python3 是您项目的依赖项; b) 虚拟环境将使用 python3 作为 python 解释器。

正如@mfalade 提到的,您可以使用 poetry env 设置环境:

poetry env use /path/to/python3

同时修改 pyproject.toml 为:

...
[tool.poetry.dependencies]
python = "^3.9"
...

从这一点开始,您就可以开始了,poetry 将使用 python3 为您的项目创建虚拟环境,文件中指定了依赖项,然后……草又变绿了。

>

但是我们可以默认使用 python3 吗?有一个 insightful thread on GitHubanother one。如果您回顾上面安装脚本中的代码片段,您可能想知道为什么不先检查 python3,然后检查 python,特别是考虑到这是 Windows 安装的确切顺序。好吧,你并不孤单,我也想知道;)

我不建议直接编辑 ~/.poetry/bin/poetry 文件,因为该文件是由安装脚本生成的(那么如果您再次运行安装脚本会发生什么?再一次?)。

真的,这是一个小烦恼,了解该工具很容易解决它。我希望在安装指南中提到这一点...

无论如何,希望能帮到你!

答案 6 :(得分:0)

您可以简单地使用 pyenv。在您的项目中创建 .python-version 文件,poetry 将匹配准确的 Python 版本。

# check current python version (set up globally)
❯ pyenv version
3.9.0 (set by /Users/tomasz.zieba@showpad.com/.python-version)

# create .python-version file for project
❯ pyenv local 3.9.0

# check python version again (now it's set up locally)
❯ pyenv version
3.9.0 (set by /Users/tomasz.zieba@showpad.com/Documents/myproject/.python-version)

❯ poetry lock
(...)

❯ poetry run python --version
Python 3.9.0