Skip to main content

a python c extension example

Project description

Python C Extensions Example

GitHub Workflow Status GitHub python version codecov

用于介绍一个 python C extension 的示例,用于熟悉其中流程,并了解其与 poetry c extension 中的区别和各自优势。

前言

编写日期: 2023/03/23

本项目就是使用 setuptools 来实现 python c extension 的示例,并通过 cibuildwheel 来进行 linuxwindowsmacos 全平台打包和发包的演示。

2022 年的统计可知,目前比较流行的 Python 包管理工具为 setuptoolspoetryconda,当然还有 flit 等其它工具。我比较常用 setuptoolspoetrypoetry 在易用性上比较有优势,其理念也比较符合 python 未来的趋势,其使用 pyproject.toml 文件,以一个文件来统一管理项目的所有信息,从而提高项目的可维护性和可读性。但是很多工具的官方文档中都或多或少不太建议优先在 pyproject.toml 中配置,还有在含有 c extension 的情况下 poetry 和其它第三方包管理器就无法快速且优雅地实现,比如 poetry 官方文档现在还没有 python c extension 的示例,不过在其 ISSUES 中提到会尽快支持。

所以,本项目就以 setuptools 来实现标准的包管理的一个示例。

前提准备

windowslinuxmacos 上配置 make 工具。

项目说明

本项目就是一个使用 setuptools 实现的 Python C Extensions 的示例,调用了 c 中的 fprintf 方法:将格式化的数据输出到指定的文件中。具体如何使用此库,在测试文件中已经列举了详细的使用方法。可以通过 make test 测试,或者手动安装本库后运行示例中的方法。

也用于介绍项目工程化的一个简单示例,一些 github workflow,代码检测,格式化和测试覆盖率等工具的使用。

运行说明

  • 直接使用 make build_dist 即可运行打包,安装 wheel 并跑通测试。
  • 当然也可以单独使用指令,比如:
    • make clean: 卸载本库,并清理测试文件,打包文件等。
    • make test: 跑测试。
    • 其它命令,比如 make install, make build 不再说明。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycextensions-0.2.0.tar.gz (5.6 kB view hashes)

Uploaded Source

Built Distributions

pycextensions-0.2.0-pp39-pypy39_pp73-win_amd64.whl (9.5 kB view hashes)

Uploaded PyPy Windows x86-64

pycextensions-0.2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pycextensions-0.2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (7.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pycextensions-0.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (5.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pycextensions-0.2.0-pp38-pypy38_pp73-win_amd64.whl (9.5 kB view hashes)

Uploaded PyPy Windows x86-64

pycextensions-0.2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pycextensions-0.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (7.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pycextensions-0.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (5.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pycextensions-0.2.0-cp311-cp311-win_amd64.whl (9.4 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

pycextensions-0.2.0-cp311-cp311-win32.whl (9.0 kB view hashes)

Uploaded CPython 3.11 Windows x86

pycextensions-0.2.0-cp311-cp311-musllinux_1_1_x86_64.whl (18.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pycextensions-0.2.0-cp311-cp311-musllinux_1_1_i686.whl (18.4 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

pycextensions-0.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.5 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pycextensions-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (13.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pycextensions-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl (6.0 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pycextensions-0.2.0-cp310-cp310-win_amd64.whl (9.4 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

pycextensions-0.2.0-cp310-cp310-win32.whl (9.0 kB view hashes)

Uploaded CPython 3.10 Windows x86

pycextensions-0.2.0-cp310-cp310-musllinux_1_1_x86_64.whl (17.4 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pycextensions-0.2.0-cp310-cp310-musllinux_1_1_i686.whl (17.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pycextensions-0.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pycextensions-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (13.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pycextensions-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl (6.0 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pycextensions-0.2.0-cp39-cp39-win_amd64.whl (9.5 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pycextensions-0.2.0-cp39-cp39-win32.whl (9.0 kB view hashes)

Uploaded CPython 3.9 Windows x86

pycextensions-0.2.0-cp39-cp39-musllinux_1_1_x86_64.whl (17.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pycextensions-0.2.0-cp39-cp39-musllinux_1_1_i686.whl (17.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pycextensions-0.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pycextensions-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (13.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pycextensions-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl (6.0 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pycextensions-0.2.0-cp38-cp38-win_amd64.whl (9.4 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pycextensions-0.2.0-cp38-cp38-win32.whl (9.0 kB view hashes)

Uploaded CPython 3.8 Windows x86

pycextensions-0.2.0-cp38-cp38-musllinux_1_1_x86_64.whl (17.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pycextensions-0.2.0-cp38-cp38-musllinux_1_1_i686.whl (17.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pycextensions-0.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.2 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pycextensions-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (13.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pycextensions-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl (6.0 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page