MaxCompute 2.0复杂数据类型之array

以前咱们介绍过在 PyODPS DataFrame 中使用三方包。对于二进制包而言,MaxCompute 要求使用包名包含 cp27-cp27m 的 Wheel 包。但对于部分长时间未更新的包,例如 oss2 依赖的 crcmod,PyPI 并未提供 Wheel 包,于是须要自行打包。本文介绍了如何使用 quay.io/pypa/manylinux1_x86_64 镜像制做可在 MaxCompute 上使用的 Wheel 包。python

本文参考 https://github.com/pypa/manylinux ,quay.io/pypa/manylinux1_x86_64 镜像也是目前绝大多数 Python 项目在 Travis CI 上打包的标准工具,若有进一步的问题可研究该项目。linux

  1. 准备依赖项

很多包都有依赖项,例如 devel rpm 包或者其余 Python 包,在打包前须要了解该包的依赖,一般能够在 Github 中找到安装或者打包的相关信息。对于 crcmod,除 gcc 外再也不有别的依赖,于是此步可略去。git

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

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

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

from distutils.core import setup

vim

from setuptools import setup

便可。bash

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

python setup.py bdist_wheel

若是没有报错且生成的 Wheel 包可在本地使用,说明 setup.py 已可使用。工具

  1. 准备打包脚本

在项目中新建 bin 目录,并在其中建立 build-wheel.sh:ui

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; do
    auditwheel repair "$whl" -w /io/wheelhouse/
done

将第一步获知的依赖项安装脚本填入此脚本,在使用 python 或 pip 时,注意使用 /opt/python/cp27-cp27m/bin 中的版本。

最后,设置执行权限

chmod a+x bin/build-wheel.sh
  1. 打包

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

 

原文连接

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

相关文章
相关标签/搜索