如何制作可以在 MaxCompute 上使用的 crcmod
之前我們介紹過在 PyODPS DataFrame 中使用三方包。對于二進制包而言,MaxCompute 要求使用包名包含 cp27-cp27m 的 Wheel 包。但對于部分長時間未更新的包,例如 oss2 依賴的 crcmod,PyPI 并未提供 Wheel 包,因而需要自行打包。本文介紹了如何使用 quay.io/pypa/manylinux1_x86_64 鏡像制作可在 MaxCompute 上使用的 Wheel 包。
本文參考?https://github.com/pypa/manylinux?,quay.io/pypa/manylinux1_x86_64 鏡像也是目前絕大多數(shù) Python 項目在 Travis CI 上打包的標準工具,如有進一步的問題可研究該項目。
1. 準備依賴項
不少包都有依賴項,例如 devel rpm 包或者其他 Python 包,在打包前需要了解該包的依賴,通常可以在 Github 中找到安裝或者打包的相關信息。對于 crcmod,除 gcc 外不再有別的依賴,因而此步可略去。
2. 修改 setup.py 并驗證(建議在 Mac OS 或者 Linux 下)
較舊的 Python 包通常不支持制作 Wheel 包。具體表現(xiàn)為在使用?python setup.py bdist_wheel?打包時報錯。如果需要制作 Wheel 包,需要修改 setup.py 以支持 Wheel 包的制作。對于一部分包,可以簡單地將 distutils 中的 setup 函數(shù)替換為 setuptools 中的 setup 函數(shù)。而對于部分自定義操作較多的 setup.py,需要詳細分析打包過程,這一項工作可能會很復雜,本文就不討論了。
例如,對于 crcmod,修改 setup.py 中的
from distutils.core import setup為
from setuptools import setup即可。
修改完成后,在項目根目錄執(zhí)行
python setup.py bdist_wheel如果沒有報錯且生成的 Wheel 包可在本地使用,說明 setup.py 已可以使用。
3. 準備打包腳本
在項目中新建 bin 目錄,并在其中創(chuàng)建 build-wheel.sh:
mkdir bin && vim bin/build-wheel.sh在其中填入以下內容:
#!/bin/bash # modified from https://github.com/pypa/python-manylinux-demo/blob/master/travis/build-wheels.sh set -e -x# Install a system package required by our library # 將這里修改為安裝依賴項的命令# Compile wheels PYBIN=/opt/python/cp27-cp27m/bin # 如果包根目錄下有 dev-requirements.txt,取消下面的注釋 # "${PYBIN}/pip" install -r /io/dev-requirements.txt "${PYBIN}/pip" wheel /io/ -w wheelhouse/# Bundle external shared libraries into the wheels for whl in wheelhouse/*.whl; doauditwheel repair "$whl" -w /io/wheelhouse/ done將第一步獲知的依賴項安裝腳本填入此腳本,在使用 python 或 pip 時,注意使用 /opt/python/cp27-cp27m/bin 中的版本。
最后,設置執(zhí)行權限
chmod a+x bin/build-wheel.sh4. 打包
使用 Docker 下載所需的鏡像(本步需要使用 Docker,請?zhí)崆鞍惭b),此后在項目根目錄下打包:
docker pull quay.io/pypa/manylinux1_x86_64 docker run --rm -v `pwd`:/io quay.io/pypa/manylinux1_x86_64 /io/bin/build-wheel.sh完成的 Wheel 包位于項目根目錄下的 wheelhouse 目錄下。
本文作者:繼盛
閱讀原文
本文為云棲社區(qū)原創(chuàng)內容,未經(jīng)允許不得轉載。
總結
以上是生活随笔為你收集整理的如何制作可以在 MaxCompute 上使用的 crcmod的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webpack4.x多页面零配置项目模板
- 下一篇: 15分钟构建超低成本数据大屏:DataV