未提供项目描述
项目描述
Python是解释型还是编译型语言?这是一个陷阱问题。实际上,Python两者都是。通过像Cython这样的工具,我们可以将编译步骤更进一步,几乎完全去除解释器循环。Cython生成的二进制文件类似于C++、Go和Rust。现在,通过GitHub Actions,开源项目的跨平台构建和发布过程可以免费自动化。这是一个巨大的机会,通过单个拉取请求使Python生态系统快20-50%。这个闪电演讲将展示一个GitHub工作流程,该流程将Cython优化的轮子发布到PyPI。了解Cython如何为您的Python代码提速,GitHub Actions如何简化您的免费跨平台发布过程。
2019年SF Python假日派对
Grant Jenks
2019年12月4日
Python是解释型还是编译型?
.
.
.
?
.
.
.
?
.
.
.
?
c2f.py
"Celsius to Fahrenheit Library"
def convert(celsius: float) -> float:
"Convert Celsius to Fahrenheit"
fahrenheit = celsius * 1.8 + 32
return fahrenheit
c2f.cpython-38.pyc
>>> import c2f
>>> dis.dis(c2f.convert)
6 0 LOAD_FAST 0 (celsius)
2 LOAD_CONST 1 (1.8)
4 BINARY_MULTIPLY
6 LOAD_CONST 2 (32)
8 BINARY_ADD
10 STORE_FAST 1 (fahrenheit)
7 12 LOAD_FAST 1 (fahrenheit)
14 RETURN_VALUE
setup.py
from setuptools import setup
from Cython.Build import cythonize
setup(
name='c2f',
version='0.0.0',
py_modules=['c2f'],
ext_modules=cythonize('c2f.py'),
)
c2f.c
$ cython c2f.py
static PyObject * __pyx_convert(double __pyx_v_celsius)
{
double __pyx_v_fahrenheit;
PyObject *__pyx_r = NULL;
__pyx_v_fahrenheit = ((__pyx_v_celsius * 1.8) + 32.0);
__pyx_r = PyFloat_FromDouble(__pyx_v_fahrenheit);
return __pyx_r;
}
c2f.so
$ python setup.py bdist_wheel
___pyx_convert:
push rbp
mov rbp, rsp
sub rsp, 16
movsd xmm0, qword ptr [rbp - 8]
mulsd xmm0, qword ptr [rip + 1379]
addsd xmm0, qword ptr [rip + 1379]
call 502 <PyFloat_FromDouble ...>
add rsp, 16
pop rbp
ret
.github/workflows/release.yml
name: release
on:
push:
tags:
- v*
jobs:
build-linux-cp38:
runs-on: ubuntu-latest
container: quay.io/pypa/manylinux2014_x86_64
steps:
...
矩阵构建
build-macos:
runs-on: macos-latest
strategy:
max-parallel: 4
matrix:
python-version: [3.5, 3.6, 3.7, 3.8]
steps:
...
Mac构建步骤
- name: Set up Python ${{ matrix.python-version }} x64
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
architecture: x64
- name: Install package dependencies
run: pip install cython wheel
- name: Build binary wheel
run: python setup.py bdist_wheel
Linux auditwheel工具
- name: Build binary wheel
run: /opt/python/cp38-cp38/bin/python setup.py bdist_wheel
- name: Apply auditwheel for manylinux wheel
run: auditwheel repair -w dist dist/*
- name: Remove linux wheel
run: rm dist/*-linux_x86_64.whl
Windows构建步骤
- name: Download Build Tools for Visual Studio 2019
run: Invoke-WebRequest -Uri https://aka.ms/vs/16/rel...
- name: Run vs_buildtools.exe install
run: ./vs_buildtools.exe --quiet --wait --norestart ...
存储构建工件
- name: Archive dist artifacts
uses: actions/upload-artifact@v1
with:
name: dist-macos-${{ matrix.python-version }}
path: dist
源分发
upload:
needs: [build-linux-cp35, ...]
runs-on: ubuntu-latest
steps:
...
- name: Install dependencies
run: pip install -r requirements.txt
- name: Create source dist
run: python setup.py sdist
阶段二进制轮子
- name: Stage linux 3.8
uses: actions/download-artifact@v1
with:
name: dist-linux-3.8
- run: mv -v dist-linux-3.8/* dist/
- name: Stage macos 3.8
uses: actions/download-artifact@v1
with:
name: dist-macos-3.8
- run: mv -v dist-macos-3.8/* dist/
...
使用Twine上传
- name: Upload with twine
env:
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
run: |
ls -l dist/*
pip install twine
twine upload dist/*
将所有东西都Cython化!
请偷走这段代码!
将所有东西都Cython化!
将所有东西都Cython化!
将所有东西都Cython化!
将所有东西都Cython化!
将所有东西都Cython化!
将所有东西都Cython化!
附录
导出汇编
$ gcc -g -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/Library/Frameworks/Python.framework/Versions/3.8/include/python3.8 -L/Library/Frameworks/Python.framework/Versions/3.8/lib -o c2f.so c2f.c -lpython3.8
$ objdump -S -df=___pyx_pw_3c2f_1convert c2f.so
Git标签
$ git tag -a v0.0.2 -m v0.0.2
$ git push
$ git push --tags
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。
源分发
c2f-1.0.5.tar.gz (28.5 kB 查看哈希值)
构建版本
c2f-1.0.5-cp38-cp38-win_amd64.whl (16.7 kB 查看哈希值)
c2f-1.0.5-cp37-cp37m-win_amd64.whl (16.6 kB 查看哈希值)
关闭
c2f-1.0.5.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 32a37e81f9011eda171b1e18efcff6f71a87642ce73f9cdae1e8ad885df2d24b |
|
MD5 | 419e2aebfb117470ec3c104dedc544a9 |
|
BLAKE2b-256 | 38a40e62e09b7caeb357e7f0a752a560e64f59d0b0d00f1845020a2a3fb9a3a7 |
关闭
c2f-1.0.5-cp38-cp38-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8b7d71c8995a1192f494a8e45a0a523eddd869290b1933ef53d681ba68331cc3 |
|
MD5 | bb6a1844a992e0cfb1a5e638c65c4df5 |
|
BLAKE2b-256 | 8c1997cd9261f66a6fc4a8ea65c4ca4506c4f7097fec2422c7f8e82101f8ee50 |
关闭
c2f-1.0.5-cp38-cp38-manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b35ae1fb5879d1afbe5b2e7bfb714edd8fc083dc5a4b02e12212f791f6fb5775 |
|
MD5 | 10b50506d80580ba4ecb6eeded56851f |
|
BLAKE2b-256 | 78c9501ed8f49eb7ab8a6d83fdd79bd963f98ce68e2aae67958b8af9efab321d |
关闭
c2f-1.0.5-cp38-cp38-manylinux1_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | af22ee0b125a11e952a5b0c4beb38608c8a6bee47c3d8ec9fce278b317c4e543 |
|
MD5 | aaf8e214a8369c5839f713b7f22d4479 |
|
BLAKE2b-256 | d5c6dee61af712f188f7893773e1ac37b2c256df9710dfc1c03174ed8da11913 |
关闭
c2f-1.0.5-cp38-cp38-macosx_10_13_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 592d56360ec5fa7525c8874b2a8ba3e4d91e347152be296209378e4c7e5fe75e |
|
MD5 | f589dc56dd8dfe18ac700e398cf5c0ec |
|
BLAKE2b-256 | fdceb1338deadbaadac1dab0edf5b0e5c88cf497bf8d691eba7765cbf93713ad |
关闭
c2f-1.0.5-cp37-cp37m-win_amd64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f007efd3d1e01fb77c5413f19532d0d2b90051d51b73f4f87bb4927c73bafaa |
|
MD5 | df976dafdcd352496aa5116a544da3f2 |
|
BLAKE2b-256 | 92bdfc05400a4b90ddb555bd0c0cf29795d533e8be0e9ae3edad2929beee85b2 |
关闭
c2f-1.0.5-cp37-cp37m-manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 62fc80307d7058f1ab197cfcc0414bcaae64674e9ef86909c24900e4646e4948 |
|
MD5 | a6ccd36f2e65ae0191d333ddab185b6f |
|
BLAKE2b-256 | d31f042cca0538e4ec7d174bbf3b3f7a3cc7681d1c8ba03b3cd9b11426c9f98b |
关闭
c2f-1.0.5-cp37-cp37m-manylinux1_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e55252cc0da11995c3ec1ed9893d49f89d21a420c5c312503d9a0b03002e4b99 |
|
MD5 | e90b80376ac82a1d7f032b29437a78fc |
|
BLAKE2b-256 | 3c98b241e9c4e10dea2e7c552a25eebc8b83fb2b20a4607d7c3aa7869bf1f119 |
关闭
哈希值 用于 c2f-1.0.5-cp36-cp36m-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2d0828f6ec2325b262df735d24fe759d4468506f4afad2695cd9ca82065cab90 |
|
MD5 | 7431def9474b812973f84f3bd1ddc761 |
|
BLAKE2b-256 | 703f4a949a5ffb058039fc5c32a175ad26c8e088f5dbd04978e961eb7f5145ae |
关闭
哈希值 用于 c2f-1.0.5-cp35-cp35m-manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 55d1687e7f585f09273ad3204f6d48c36b590b1232226b22575820e4e6fbf0f8 |
|
MD5 | 4b001883e8b50fe85246944704b02877 |
|
BLAKE2b-256 | e3586efd27bd8d6df65702c91637478d41f3fbec703da974baa6aa1c0a8d15ac |