a python c extension example
Project description
Python C Extensions Example
用于介绍一个
python C extension
的示例,用于熟悉其中流程,并了解其与poetry c extension
中的区别和各自优势。
前言
编写日期: 2023/03/23
本项目就是使用 setuptools
来实现 python c extension
的示例,并通过 cibuildwheel
来进行 linux
,windows
和 macos
全平台打包和发包的演示。
据 2022
年的统计可知,目前比较流行的 Python
包管理工具为 setuptools
,poetry
和 conda
,当然还有 flit
等其它工具。我比较常用 setuptools
和 poetry
,poetry
在易用性上比较有优势,其理念也比较符合 python
未来的趋势,其使用 pyproject.toml
文件,以一个文件来统一管理项目的所有信息,从而提高项目的可维护性和可读性。但是很多工具的官方文档中都或多或少不太建议优先在 pyproject.toml
中配置,还有在含有 c extension
的情况下 poetry
和其它第三方包管理器就无法快速且优雅地实现,比如 poetry
官方文档现在还没有 python c extension
的示例,不过在其 ISSUES
中提到会尽快支持。
所以,本项目就以 setuptools
来实现标准的包管理的一个示例。
前提准备
windows
,linux
或 macos
上配置 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pycextensions-0.2.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7ad4c9f6416a83a8fa17d72a7bd2e6ceb1df4b3d4e8ef25bf3a42590ba1450d |
|
MD5 | e0cfd407ee956d1d0802942d91b45214 |
|
BLAKE2b-256 | 8324f40ac1e392095d3a3300466fd84dbab95312ec2625a6ff0c90cfdde77508 |
Hashes for pycextensions-0.2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bbe359e7393270fe4884b3b0f3a70a876e52ce128d5b4268c4e11277c91352ec |
|
MD5 | 7b3c13dc1b4a46ce47fb15ea80e414e6 |
|
BLAKE2b-256 | 5ff466f30b90f1daee8b00b05b0da210603a58f94a4264ba9ebf75fceaa0077b |
Hashes for pycextensions-0.2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0a219fa6eaa3903d419190911e23e6d99e9e97d53c85e5541f24572bf3f0a2e |
|
MD5 | 0f98145b98ddad28a91f7be942a30fa0 |
|
BLAKE2b-256 | ac53fa87e489491ff3285fd2711012efc1a7125fbd056124391e9ad9c2a63a33 |
Hashes for pycextensions-0.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1dd1a242b7a2e7aca00a210d2266582fdce55352d6386211935eec609aa8960 |
|
MD5 | 09292613ba8f0b69cf7028495d0b5dc4 |
|
BLAKE2b-256 | 55d98f0ad3900663fd8897cabdcb13a0c419db07be560b4d28a46167fd7c6c72 |
Hashes for pycextensions-0.2.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b97faaa5368df481aaf16e137ee38afc17ce3ff2e02761fb79cba54102cca415 |
|
MD5 | 35a052417b91ae29352c19401aad9105 |
|
BLAKE2b-256 | a87dbb111f8c52c4d17f655ec8b3734398ed3665eec2822e099da2c5534a4b72 |
Hashes for pycextensions-0.2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b68348780ed58bda541fa96b2a330540f4a5a9490d6583f014ba5c279d6d35c6 |
|
MD5 | fe87b108a45be208aca921be391121e2 |
|
BLAKE2b-256 | 92ed07382210fa29019f9c1fc5b85f0d019951aa381964466ba2088c068ac8a2 |
Hashes for pycextensions-0.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e72c98ecbb10ad6b277e9e222a06c65d9efd4a6ac92ab2c17d72fcf6ab22fe09 |
|
MD5 | 2ca3b4c2ad88ed33193dd3f58b35029a |
|
BLAKE2b-256 | edf53d90e4a1276aee5a3d2174bb7550bee9f319db9d380415e20428d7123949 |
Hashes for pycextensions-0.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 126a0067bb7cf573054fe85a9aba9737c38cdfcd837e14638b6b3999cc19031d |
|
MD5 | 7b2bc25f48f2d463c777b4df6a646df4 |
|
BLAKE2b-256 | 8e818d46bcfdd0cd3c6e6834c54adbe5133a78555b9d2d48bae0f8537b41902f |
Hashes for pycextensions-0.2.0-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3eb4a6a2b186d73ca2fd2dac0caea6cc6d5f4c1817b5819570dec56647396d54 |
|
MD5 | 43dccd171da408f4db76ba75482fc68b |
|
BLAKE2b-256 | cf42a51329962f7fcfeda1dd63bd869d253c8f0d9813a973e1f51b27816a3738 |
Hashes for pycextensions-0.2.0-cp311-cp311-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7be0ad161ac12ae01d9e1d03a18b6f461e2872c7ca09722bfe841e740fd32be |
|
MD5 | 14608bb2f321e4e6cf8a2028a38e321a |
|
BLAKE2b-256 | 7f9c8487c19e8404c6c4ffe62349f5171bdbcf2b2295bbe65f2263495253a4c9 |
Hashes for pycextensions-0.2.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f506a9e5a8451ccdc82e0323a029f03fcdc3cd723851cc39eef8c7584abaa5f3 |
|
MD5 | 7eee2fb1d7e243d6ef10052a6e2eea5c |
|
BLAKE2b-256 | b6bc6746d4c2d340a79756a25a842a0a28e61f87170253e354dc319ddadf0121 |
Hashes for pycextensions-0.2.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 831b77e3c16188b5d9378222012abe1a735654a2f9ec939c7cfa535607a621eb |
|
MD5 | a2380f54cbe2bbfd4ac54d267936028e |
|
BLAKE2b-256 | 1b2440d3d92bca876a27956bde7bd2629abf5ce807a74d565f733254a531d59f |
Hashes for pycextensions-0.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a900aa531f6a465be2f8303f83b3478a7d62a483bc09b927d350fb515fe71731 |
|
MD5 | 7c176c8c413e051030bb5b9432145613 |
|
BLAKE2b-256 | a4f29af4c022e69a6fd17c5cac74d2db0b589439de70d501d4310120620d2308 |
Hashes for pycextensions-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d122f086422ec1de3c25f04b102e4b7cbea4cffd33f025281ad983da0c75f31 |
|
MD5 | fe7d15a4f2adb2a8f128ac48178b42a4 |
|
BLAKE2b-256 | 4a06424bd3720be6fffacd083d45de63547404376f2d64aad03d0002399ae7a3 |
Hashes for pycextensions-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7097a60d78bc6d508cec725e21679c991e2fa120602584b27693f6c39d6d42fe |
|
MD5 | c1821942fb1c99790e07a0415d839171 |
|
BLAKE2b-256 | 214deac9ed8904bbf06212e2d7b1c396f6da63b35e75234dc92fbacd66448a98 |
Hashes for pycextensions-0.2.0-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 48a6689683c69c0709516d76a783f1e165e462d5431d706f2cda74dae881636b |
|
MD5 | 30fbd7b9a72db98b61a0bcbc6c1738ed |
|
BLAKE2b-256 | fb8402b1b02024391a77ff81c57e432e3a72ed23d9013c34011e26fac8d4f1ec |
Hashes for pycextensions-0.2.0-cp310-cp310-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3898b5f7540925652fd94adccb531b3d59e29829eba935d827a304a603933f31 |
|
MD5 | 6d6fb489120f3691700950279378d880 |
|
BLAKE2b-256 | 7723371f5d01b35afcbf24a2d4f82bf804be43e0bd79734e9924f09c50217a7b |
Hashes for pycextensions-0.2.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3a2aabe6889579b0e6c0ab19c6a5c08814b2b61213693474bae441bebc1504d4 |
|
MD5 | 6ae5d1606f408d5866758d334dcb1fad |
|
BLAKE2b-256 | eb276d017c8be340f488f783a0b50b435a3cf2d7d850e8d3df77510614fea140 |
Hashes for pycextensions-0.2.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d0da3b397c0fc5f01c4852914ce2c96c3c6276fef4d3a98333b3241fa7fb41e |
|
MD5 | d608a9a965b42edd9b0cfe6f35f660da |
|
BLAKE2b-256 | cb93d2fc2a67236b19bbaec07f7d26a86b64c78e93663ed46ee124d6dfb11b9a |
Hashes for pycextensions-0.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f3fc3348ebd18ed17b79db2b1e87763bf8050c729386c90e7b1d7b3b985e3de |
|
MD5 | 8316f2f97624732b540f381d606a7066 |
|
BLAKE2b-256 | 260eef2edb7047d691a7a11273848d9b689f6cc1d27197c948b51345aa96b727 |
Hashes for pycextensions-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 409fcf5fa3e1a9383fbfd6bf48771c4bb2957f331b4e2eda186816a4a41dcc54 |
|
MD5 | a14a837c51a252e4241094c217d97358 |
|
BLAKE2b-256 | 15d21d92c0a3430085b3890db5406c46a14d906a03581f34415b263b580ed0e0 |
Hashes for pycextensions-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 164bd3d0b0928548133ac9e4022edd171ff63fed6e70efaf8e654063301694be |
|
MD5 | 821deace22d2e50dbf016d196a007cc2 |
|
BLAKE2b-256 | 4f2c750373a1bcab60fad58bc56193072c1247b5ba878d2e353225950231120f |
Hashes for pycextensions-0.2.0-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b753eaf48ff484d7c0ac76dfccdee7ae4a9364471519a278a73f3e02353d931 |
|
MD5 | 497323ec4dd8d54cdb8675381fd9b549 |
|
BLAKE2b-256 | c01c9e7671e4cc09f546b21e35066c2b5a7155229e9887fa3526ab10312c3df9 |
Hashes for pycextensions-0.2.0-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fa4d7a479ebd5b5a4d38a8bd424b92916a907ec2cd437a455286c759056b094a |
|
MD5 | 69c70aa1dfb959d24317f2347fd627f8 |
|
BLAKE2b-256 | 93b6a7cdd4e15d703c814429bf8576e3eb29754f234172897a7ee6284526eed7 |
Hashes for pycextensions-0.2.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 797f5687fab31cfdcebaa9c0abb807856d4d6fc07bf7be1f7fed21f3e8a30a13 |
|
MD5 | e86b4eb9614415b35525d3c6cbdbdf49 |
|
BLAKE2b-256 | 3d48259191f02ed40d416f4e3e61e212bb14bedf25cabee346d65de5e10fd42e |
Hashes for pycextensions-0.2.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d859e8b104182a5224f76a7d33731539a533e9b57732082cc1bdb15dae3fd91 |
|
MD5 | 48769fabd2332fe781bab5c511aaa73f |
|
BLAKE2b-256 | b9f491d5366cf0d58af0cfbb927ff92e7bc795251078067f47c707a6fdb57c89 |
Hashes for pycextensions-0.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fca96789454d7294a59a2ac17ef3500f39820c1fa5277b420c5a93490c440f1 |
|
MD5 | ee742b86a749554190aabcec54fb8bf9 |
|
BLAKE2b-256 | e79701c177c18f328dbee2af771a576c95ccc934147db857b559154471f303ad |
Hashes for pycextensions-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae40447b3311aca4b397358e1e0531e3791a51570e942ddd25dc7c09088540be |
|
MD5 | eecff2f9b54871d0b366ca5d7d349928 |
|
BLAKE2b-256 | 592ee5b8ec896d8b544299486d680c401410d16556e59dcfd8f3f87d68d47184 |
Hashes for pycextensions-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 67fd0680300b153f227307ab6330d05d236e7ee74c77762958ad8ab94eeadc3c |
|
MD5 | c6408dcb5e835b858fb8081f88d0285d |
|
BLAKE2b-256 | ce36e09522322d87a1de0b1e00d4db49942b8a8970606a708d42167d75065a00 |
Hashes for pycextensions-0.2.0-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4483ca908ae5235806d4ffbc4c8b5e732cd5f57aa2227f145022f4c413b9db2 |
|
MD5 | e536de5d038210acdffed51c65f54956 |
|
BLAKE2b-256 | 56dbc51de7d2a6b83bd378a3bd4cccb7734b2b6b2a3c17a9a8f8b7f8a2448fd4 |
Hashes for pycextensions-0.2.0-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d44c6736737395ba8cb2f592bdd2877d73378ab17a1b28b6a7e6d5a2e3a6a21e |
|
MD5 | 63969006ac44abb5d2a5ae296e85b8f3 |
|
BLAKE2b-256 | 8f14ecff555aa988a3d2b9ead27facec3faf7a4e70bf40022bc83822aa0dc205 |
Hashes for pycextensions-0.2.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 509f09967a45f337f7b59cfe8dfa76045edd497616312a1f1fdd4686974635fe |
|
MD5 | 3a05be7a3a671255b3307858c7e6b17d |
|
BLAKE2b-256 | 06f8177ca9feba3ca3d16584e9485e8852fa37b7df8948bad4bad71fb1abfd5a |
Hashes for pycextensions-0.2.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ef860ec7428594d839d810462eb15bca5923a9fa0fcfff67591815b25a2d8b7 |
|
MD5 | 8d0be1642b8e709cca586339c370e76d |
|
BLAKE2b-256 | 9938fcffea45fcee5729c2ac8db0d1c0265fe3a96f071decc1e8f819e20a1462 |
Hashes for pycextensions-0.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | acf076e3053902214d2ab90541e23da1e7bbe61ed18684371f80d906dbc0571b |
|
MD5 | 959e9c1c19a277f1bc5547308828a9f2 |
|
BLAKE2b-256 | ce7f9abbe1b359fdff1c642d6e9ee7e94fafb2ca0cba3177c9544c555377fbb7 |
Hashes for pycextensions-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3244e1fb4e36ac34fc011de90bf3e79091596f0eb359e10564ae273af39ef2f9 |
|
MD5 | e628ac9a7466ad1178ce1d14f3a8ff30 |
|
BLAKE2b-256 | f799a8d7ddf0a2b1ccc364b8f5622b5b5f26eb86dc0dd788285d56a211f99871 |
Hashes for pycextensions-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4bfa38a4a0f46095423725459799aa5a685744e0a21535ebc8adbef90afbc4de |
|
MD5 | ed6514074a183f11161a4c2dee935abd |
|
BLAKE2b-256 | 1a28b65e9c2435f87193970aa7a4f78d8f29dd02ad2d20a4dda31a5f5b21d7e8 |