如何解决如何将Cython与诗歌结合使用?
我的项目中有一个文件,出于性能考虑,我希望对其进行编译:
mylibrary / myfile.py
如何通过诗歌实现这一目标?
解决方法
诗歌中有未记录的功能。将此添加到您的pyproject.toml
:
[tool.poetry]
...
build = 'build.py'
[build-system]
requires = ["poetry>=0.12","cython"]
build-backend = "poetry.masonry.api"
这是在隐式生成的setup.py中运行build.py:build()
函数。
这是我们建造的地方。
因此,创建一个提供build.py
功能的build()
:
import os
# See if Cython is installed
try:
from Cython.Build import cythonize
# Do nothing if Cython is not available
except ImportError:
# Got to provide this function. Otherwise,poetry will fail
def build(setup_kwargs):
pass
# Cython is installed. Compile
else:
from setuptools import Extension
from setuptools.dist import Distribution
from distutils.command.build_ext import build_ext
# This function will be executed in setup.py:
def build(setup_kwargs):
# The file you want to compile
extensions = [
"mylibrary/myfile.py"
]
# gcc arguments hack: enable optimizations
os.environ['CFLAGS'] = '-O3'
# Build
setup_kwargs.update({
'ext_modules': cythonize(
extensions,language_level=3,compiler_directives={'linetrace': True},),'cmdclass': {'build_ext': build_ext}
})
现在,当您执行poetry build
时,什么都不会发生。
但是,如果将此软件包安装在其他位置,则会对其进行编译。
您还可以使用以下方法手动构建它:
$ cythonize -X language_level=3 -a -i mylibrary/myfile.py
最后,似乎您无法将二进制包发布到PyPi。 解决方案是将构建限制为“ sdist”:
$ poetry build -f sdist
$ poetry publish
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。