之前我们介绍过在 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 镜像也是目前绝大多数 Python 项目在 Travis CI 上打包的标准工具,如有进一步的问题可研究该项目。

1. 准备依赖项

不少包都有依赖项,例如 devel rpm 包或者其他 Python 包,在打包前需要了解该包的依赖,通常可以在 Github 中找到安装或者打包的相关信息。对于 crcmod,除 gcc 外不再有别的依赖,因而此步可略去。

2. 修改 setup.py 并验证(建议在 Mac OS 或者 Linux 下)

较旧的 Python 包通常不支持制作 Wheel 包。具体表现为在使用 python setup.py bdist_wheel 打包时报错。如果需要制作 Wheel 包,需要修改 setup.py 以支持 Wheel 包的制作。对于一部分包,可以简单地将 distutils 中的 setup 函数替换为 setuptools 中的 setup 函数。而对于部分自定义操作较多的 setup.py,需要详细分析打包过程,这一项工作可能会很复杂,本文就不讨论了。

例如,对于 crcmod,修改 setup.py 中的

from distutils.core import setup

from setuptools import setup

即可。

修改完成后,在项目根目录执行

python setup.py bdist_wheel

如果没有报错且生成的 Wheel 包可在本地使用,说明 setup.py 已可以使用。

3. 准备打包脚本

在项目中新建 bin 目录,并在其中创建 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 中的版本。

最后,设置执行权限

chmod a+x bin/build-wheel.sh

4. 打包

使用 Docker 下载所需的镜像(本步需要使用 Docker,请提前安装),此后在项目根目录下打包:

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 目录下。



本文作者:继盛

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

如何制作可以在 MaxCompute 上使用的 crcmod相关推荐

  1. 如何制作可以在 MaxCompute 上使用的 crcmod 1

    之前我们介绍过在 PyODPS DataFrame 中使用三方包.对于二进制包而言,MaxCompute 要求使用包名包含 cp27-cp27m 的 Wheel 包.但对于部分长时间未更新的包,例如 ...

  2. 手把手教你制作AppPreview视频并上传到appStore进行审核

    手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...

  3. 如何制作和发布网页(上)

    hello,大家好,我是智能黑客谢佳宇,作为一个合格的程序猿,首先要学的语言就是html,现在已经推出了html5,不过我们不需要那么高深的语言,这一期,我们就来用记事本来试验一个简单的网页! 第一步 ...

  4. 小红书文案怎么编辑制作?小红书上的文案怎么做的?

    其实我们平时翻看小红书上的文案就会发现,小红书文案本身具有极强的社交属性,不同于其他平台的文案,小红书文案还是有着自己本身的特点的,我们能从小红书文案中总结出一些规律来,按着这个规律写总归是没错的.小 ...

  5. 个人制作的一个uni-app上的课程表

    个人制作的一个uni-app上的课程表,timetable课程表

  6. 文字扭曲效果(制作绣在丝绸上的文字图案效果)

    学习PS不是很久,很多效果都不会制作,今天学了一种文字扭曲效果(是用ps制作绣在丝绸上的文字图案效果),通过多次尝试理解到,这是利用置换滤镜的功能,以及图层混合模式来做出的效果,效果是使得文字与背景更 ...

  7. 使用FileReader制作一个简短图片上传

    使用FileReader制作一个简短图片上传 效果示例图 代码示例图 效果示例图 代码示例图 <!DOCTYPE html> <html><head><met ...

  8. css设置div从下到上显示,科技常识:css制作从下往上逐渐显示的div

    今天小编跟大家讲解下有关css制作从下往上逐渐显示的div ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关css制作从下往上逐渐显示的div 的相关资料,希望小伙伴们看了有所帮助. htm ...

  9. (私有云)客户给的VMware镜像磁盘如何制作成自定义镜像上传至openstack镜像服务器供客户使用

    (私有云)客户给的VMware镜像磁盘如何制作成自定义镜像上传至openstack镜像服务器供客户使用 目录 1.准备工作 2.修改域xml配置文件以及是否缩容 3.在镜像更新服务器上启动这个自定义镜 ...

最新文章

  1. UITableView注意点
  2. MyBatisPlus中全局Sql注入器应用_逻辑删除使用
  3. ReentrantReadWriteLock可重入读写锁分析
  4. 【IBatisNet Spring.Net】ORM与IOC 简单配置
  5. 深入理解DOM节点关系
  6. Bootstrap中的条纹进度条使用案例
  7. 从程序员到阿里技术总监之路
  8. python读取mysql数据_Selenium(Python) ddt读取MySQL数据驱动
  9. java hibernate 多对多_java - hibernate多对多问题
  10. C#类型的强制转换及隐式转换
  11. java 线程间的通讯(升级版)
  12. 高速理解掌握node.js 字符编码,确码过程 以及base64编解码原理
  13. 7-1 特殊a串数列求和 (20 分)
  14. unity 相机的问题
  15. Docker学习(三)Docker常用命令
  16. 什么是服务器的上行带宽和下行带宽
  17. 【大咖分享】BFF在千寻位置网前端的落地和演进
  18. (附源码)spring boot社区养老医疗服务平台 毕业设计 041148
  19. ChatGPT与文心一言对比思考
  20. July大神交大读书会子atoi

热门文章

  1. 禾川触摸屏编程软件_汇川PLC编程PLC代写程序
  2. 廖雪峰Python教程-笔记
  3. java 线程接口_java - 实现线程的接口
  4. ubantu自启脚本
  5. AI:IPPR的数学表示-CNN可视化语义分析
  6. AI:狄拉克之海上的涟漪
  7. 山西上党残疾男子“只”手脱贫 带领村民增收
  8. 【转载】(EM算法)The EM Algorithm
  9. OC类导入Swift工程演示
  10. pl/sql developer导入导出