根据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
答案 0 :(得分:6)
每当您手动更改pyproject.toml
的依赖项时,都必须注意以下几点:
随后运行poetry lock
或删除poetry.lock
文件以强制重新创建它。这样做的原因是,poetry install
将poetry.lock
作为输入,如果可以找到一个而不是pyproject.toml
。
如果您更改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。使用此脚本是安装 poetry
的 recommended 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 GitHub 和 another 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