微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为具有可选 C 扩展的项目构建 py3-none-any 轮子?

如何解决如何为具有可选 C 扩展的项目构建 py3-none-any 轮子?

msgpack 包含一个可选的 cython 延期。 Some users of the package want py3-none-any wheels of msgpack。我想弄清楚如何制作 可以使用和不使用可选扩展件来制造轮子。

解决方法

一种可能的解决方案是使用 setup.py 中的环境变量来决定 是否将 ext_modules 设置为 setuptools.Extension

列表的空列表

pyproject.toml

[build-system]
requires = ["setuptools","wheel","cython"]
build-backend = "setuptools.build_meta"

setup.py

from setuptools import setup,Extension
import os

if 'ONLY_PURE' in os.environ:
    ext_modules = []
else:
    module1 = Extension('helloworld',sources = ['helloworld.pyx'])
    ext_modules = [module1]
setup(ext_modules=ext_modules)

setup.cfg

[metadata]
name = mypackage
version = 0.0.1

[options]
py_modules = mypackage

mypackage.py

try:
    import helloworld
except ImportError:
    print('hello pure python')

helloworld.pyx

print("hello extension")

使用扩展构建:

$ pip install build
...
$ python -m build
...
$ ls dist/
mypackage-0.0.1-cp39-cp39-linux_x86_64.whl  mypackage-0.0.1.tar.gz

无需扩展即可构建

$ pip install build
...
$ ONLY_PURE='a nonempty string' python -m build
...
$ ls dist/
mypackage-0.0.1-py3-none-any.whl  mypackage-0.0.1.tar.gz

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。