如何在诗歌中使用 Cython?

kol*_*pto 9 python cython python-poetry

我的项目中有一个文件,出于性能原因,我想对其进行编译:

mylibrary/myfile.py

如何用 Poetry 实现这一目标?

kol*_*pto 9

Poetry 中有一个未记录的功能。将此添加到您的pyproject.toml

[tool.poetry]
...
build = 'build.py'

[build-system]
requires = ["poetry>=0.12", "cython"]
build-backend = "poetry.masonry.api"
Run Code Online (Sandbox Code Playgroud)

它的作用是build.py:build()在隐式生成的 setup.py 中运行该函数。这是我们建造的地方。

因此,创建一个build.py提供以下build()功能的函数:

[tool.poetry]
...
build = 'build.py'

[build-system]
requires = ["poetry>=0.12", "cython"]
build-backend = "poetry.masonry.api"
Run Code Online (Sandbox Code Playgroud)

现在,当你这样做时poetry build,什么也没有发生。但是如果你在其他地方安装这个包,它会被编译。

您还可以使用以下命令手动构建它:

$ cythonize -X language_level=3 -a -i mylibrary/myfile.py
Run Code Online (Sandbox Code Playgroud)

最后,您似乎无法将二进制包发布到 PyPi。解决方案是将您的构建限制为“sdist”:

$ poetry build -f sdist
$ poetry publish
Run Code Online (Sandbox Code Playgroud)

  • 目前,此配方在未安装“gcc”的系统上失败,请小心 (3认同)
  • 如果轮子适用于许多 Linux、Windows 或 MacOS,您可以将轮子发布到 PyPi。轮子是二元的。 (2认同)