详情页标题前

阿里云云原生大数据计算服务 MaxComputePyODPS制作第三方包-云淘科技

详情页1

PyODPS自V0.11.3版本开始提供了pyodps-pack命令行工具,用于制作符合PyODPS及DataWorks PyODPS节点标准的三方使用方法类似pip命令。您可以使用该工具将所有依赖项目制作成一个后缀为.tar.gz的压缩包,其中包含所有依照MaxCompute或DataWorks环境编译并打包的项目依赖。您也可以使用该工具打包您项目中自行创建的Python包。

环境准备

pyodps-pack命令需要在操作系统命令行(Windows CMD或者macOS/Linux Shell)中执行,DataWorks和odpscmd中不能调用。

Docker模式

您需要安装Docker以顺利使用Docker模式运行pyodps-packpyodps-pack会自动调用已安装的Docker,您无需手动在Docker中运行pyodps-pack

  • Linux环境:可以参考Docker官方文档安装Docker。

  • macOS或Windows环境:

    • 个人开发者:可以使用Docker Desktop。

    • 未购买过授权的企业用户:推荐使用开源的Rancher Desktop。

说明

我们没有在包括minikube在内的其他Docker环境中测试pyodps-pack,不保证在这些环境中的可用性。

对于Windows用户,可能您的Docker服务需要依赖Windows系统的Server服务才能启动,而Server服务由于安全问题在很多企业被禁止启动。在遇到问题时,请改用Linux打包或者设法启用Server服务。Rancher Desktop在Windows 10下可能无法使用containerd作为容器引擎,可以尝试改用dockerd,配置详情请参考Container Engine。

无Docker模式

说明

建议您在打包时,尽量使用Docker模式。非Docker模式仅用于Docker不可用的场景,且生成的包有可能不可用。

如果您安装Docker遇到困难,可以尝试使用非Docker模式。使用方式为新增一个--without-docker参数。该模式需要您的Python环境中已经安装pip。如果使用该模式出现错误,请改用Docker模式。Windows用户需要安装Git Bash以使用该模式,Git Bash包含在Git for Windows中。

打包操作

您可以使用pyodps-pack命令在本地PyODPS环境中执行打包操作,其中包括打包所有依赖、打包自定义代码、打包Git Repo中的代码及打包二进制依赖。

说明

请勿在Docker环境中执行pyodps-pack命令。

使用限制

  • MaxCompute建议除非不得已,新项目请尽量使用Python 3。我们不保证下面打包步骤对Python 2的可用性。

  • 旧项目请尽量迁移至Python 3以减少后续维护的难度。

  • 在Linux中使用下列命令时,请使用sudo调用pyodps-pack以保证Docker正常运行。

打包所有依赖

安装完PyODPS后,您可以在本地PyODPS环境中使用以下命令为Python 3打包pandas及所有pandas的依赖项:

  • 使用Docker模式打包:

    pyodps-pack pandas
  • 使用非Docker模式打包:

    pyodps-pack --without-docker pandas
  • 打包时指定所需版本:

    pyodps-pack pandas==1.2.5

经过一系列的打包步骤,工具会显示包中的所有依赖版本,具体如下。并在当前目录中生成一个packages.tar.gz文件,其中包括下面列出的所有依赖项目。

Package         Version
--------------- -------
numpy           1.21.6
pandas          1.2.5
python-dateutil 2.8.2
pytz            2022.6
six             1.16.0

如果您希望为Python 2.7打包,请确定包的后续使用环境为MaxCompute还是DataWorks,辨别方法请参考PyODPS DataFrame的代码运行环境。

  • 在MaxCompute中使用Python 2.7包的打包命令:

    pyodps-pack --mcpy27 pandas
  • 在DataWorks中使用Python 2.7包的打包命令:

    pyodps-pack --dwpy27 pandas

打包自定义代码

pyodps-pack支持打包使用setup.pypyproject.toml组织的用户自定义Python Project。详情请参考Build System Interface。

示例:以基于pyproject.toml组织的项目为例,为您介绍如何使用pyodps-pack打包。假定项目的目录结构如下:

test_package_root
├── test_package
│   ├── __init__.py
│   ├── mod1.py
│   └── subpackage
│       ├── __init__.py
│       └── mod2.py
└── pyproject.toml

其中pyproject.toml内容可能为:

[project]
name = "test_package"
description = "pyodps-pack example package"
version = "0.1.0"
dependencies = [
    "pandas>=1.0.5"
]

完成包的开发后,使用以下命令可以将此包和所有依赖打包进packages.tar.gz文件中(path_to_packagetest_package_root的上级路径):

pyodps-pack //test_package_root

打包Git Repo中的代码

pyodps-pack支持打包远程Git代码仓库(例如GitHub)中的代码。以PyODPS本身为例,可以使用以下命令执行打包:

pyodps-pack git+https://github.com/aliyun/aliyun-odps-python-sdk.git

如果想要打包某个分支或者Tag,可以使用:

pyodps-pack git+https://github.com/aliyun/aliyun-odps-python-sdk.git@v0.11.2.2

如果打包前需要安装一些打包依赖(例如cython),可以使用--install-requires参数增加安装时依赖。也可以编写一个格式与requirements.txt相同的install-requires.txt文件,并使用--install-requires-file选项指定。例如,如果需要先安装Cython再打包PyODPS,可以执行如下命令:

pyodps-pack \
    --install-requires cython \
    git+https://github.com/aliyun/aliyun-odps-python-sdk.git@v0.11.2.2

也可以创建一个install-requires.txt文件并依照requirements.txt格式编写如下:

cython>0.29

打包命令可以写成:

pyodps-pack \
    --install-requires-file install-requires.txt \
    git+https://github.com/aliyun/aliyun-odps-python-sdk.git@v0.11.2.2

更复杂的例子:二进制依赖

一部分包包含额外的二进制依赖,例如需要编译或安装的外部动态链接库。pyodps-pack提供了--run-before参数用以指定打包前需要执行的步骤,该步骤中可以安装所需的二进制依赖。下面以地理信息库GDAL为例为您介绍如何打包。

  1. 确定打包时需要安装的二进制依赖。

    根据GDAL 3.6.0在PyPI上的文档,我们需要安装3.6.0以上版本的libgdal。libgdal编译说明则指出,该包依赖6.0版本以上的PROJ包,这两个二进制包均使用CMake打包。据此,编写二进制包安装文件并保存为install-gdal.sh

    #!/bin/bash
    set -e
    
    cd /tmp
    curl -o proj-6.3.2.tar.gz https://download.osgeo.org/proj/proj-6.3.2.tar.gz
    tar xzf proj-6.3.2.tar.gz
    cd proj-6.3.2
    mkdir build && cd build
    cmake ..
    cmake --build .
    cmake --build . --target install
    
    cd /tmp
    curl -o gdal-3.6.0.tar.gz http://download.osgeo.org/gdal/3.6.0/gdal-3.6.0.tar.gz
    tar xzf gdal-3.6.0.tar.gz
    cd gdal-3.6.0
    mkdir build && cd build
    cmake ..
    cmake --build .
    cmake --build . --target install
  2. 使用pyodps-pack进行打包,命令如下:

    pyodps-pack --install-requires oldest-supported-numpy --run-before install-gdal.sh gdal==3.6.0

命令详情

下面列出pyodps-pack命令的可用参数,可用于控制打包过程:

参数名称

描述

-r--requirement

根据给定的依赖文件打包。该选项可被指定多次。

-o--output

指定打包生成目标文件名,默认为packages.tar.gz

--install-requires

指定打包时所需的PyPI依赖,可指定多个,一般用于命令行中。这些依赖不一定会包含在最终的包中。

--install-requires-file

指定打包时所需的PyPI依赖定义文件,可指定多个。这些依赖不一定会包含在最终的包中。

--run-before

指定打包前需要执行的Bash脚本,通常可用于安装二进制依赖。

-x--exclude

指定打包时需要从最终包删除的PyPI依赖。该选项可被指定多次。

--no-deps

指定打包时不包含指定项目的依赖项。

-i--index-url

指定打包时所需的PyPI URL。如果缺省,会使用pip config list命令返回的global.index-url值,该值通常配置在pip.conf配置文件中。

--trusted-host

指定打包时需要忽略证书问题的HTTPS域名。

-l--legacy-image

指定后,将使用CentOS 5镜像进行打包,这使得包可以被用在旧版专有云等环境中。

--mcpy27

指定后,将为MaxCompute内的Python 2.7制作三方包。如果启用,将默认--legacy-image选项开启。

--dwpy27

指定后将为DataWorks内的Python 2.7制作三方包。如果启用。将默认--legacy-image选项开启。

--prefer-binary

指定后,将倾向于选择PyPI中包含二进制编译的旧版,而不是仅有源码包的新版。

--docker-args

指定在执行Docker命令时需要额外附加的参数。如有多个参数需用引号包裹,例如--docker-args "--ip 192.168.1.10"

--without-docker

使用无Docker模式运行pyodps-pack。当依赖中存在二进制依赖,可能报错或导致包不可用。

--without-merge

下载或生成Wheel包后不生成.tar.gz包,而是保留.whl文件。

--debug

指定后,将输出命令运行的详细信息,用于排查问题。

第三方包的使用方法请参见PyODPS使用第三方包。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/159572.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云日志服务SLS开启SQL独享版-云淘科技

    SQL独享版是日志服务提供的计费资源,用于SQL分析。SQL独享版针对日志服务免费的SQL分析功能存在的操作并发数限制和分析数据量限制进行了优化。 前提条件 已创建Standard Logstore。具体操作,请参见创建Logstore。 已采集日志。具体操作,请参见数据采集。 已配置索引。具体操作,请参见配置索引。 背景信息 当您在使用SQL分析时,如果数…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云对象存储OSSBrowser.js快速入门-云淘科技

    本文介绍如何在Browser.js SDK中快速使用OSS服务,包括上传文件、下载文件和查看文件列表等。 前提条件 已安装Browser.js SDK。具体操作,请参见Browser.js安装。 已配置跨域资源共享(CORS)规则。具体操作,请参见准备工作。 注意事项 目前浏览器中不允许执行Bucket相关的操作,仅允许执行Object相关的操作,例如Put…

    阿里云对象存储 2023年12月10日
  • 阿里云ECS云服务器TagResources-云淘科技

    调用TagResources为指定的ECS资源列表统一创建并绑定标签。 接口说明 绑定标签前,阿里云会校验资源已有标签数量。超过限制值后返回报错信息。更多详情,请参见使用限制。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 请求参数 名称 类型 …

    阿里云服务器 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACK将节点容器运行时从Docker迁移到containerd-云淘科技

    Kubernetes v1.24将不再支持将Docker作为内置容器运行时,为了将ACK升级到Kubernetes v1.24及更高版本,您需要将节点容器运行时从Docker迁移到containerd。本文介绍如何在ACK管理控制台将节点容器运行时从Docker迁移到containerd。 前提条件 已创建Kubernetes集群。具体操作,请参见创建Kub…

    2023年12月10日
  • 阿里云RDS数据库ModifyHADiagnoseConfig – 修改实例可用性检测方式-云淘科技

    该接口用于修改RDS实例的可用性检测方式。 接口说明 适用引擎 RDS MySQL RDS PostgreSQL RDS SQL Server RDS MariaDB 相关功能文档 注意 使用该接口前,请仔细阅读功能文档,确保完全了解使用接口的前提条件及使用后造成的影响后,再进行操作。 什么是可用性检测方式。 调试 您可以在OpenAPI Explorer中…

    阿里云数据库 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。