妙用Dataphin的Python三方包管理

本文涉及的产品
智能数据建设与治理Dataphin,200数据处理单元
简介: Dataphin 中的 Python 计算任务不随意增加内置 module 是为了避免安装包过大和升级时间延长。用户可通过执行 "pip list" 或 "pip3 list" 查看内置 module 列表。 Dataphin 的 Python 环境在镜像中固定,无法用户直接修改,但 v3.14 版本起支持在线安装或上传安装三方包,预安装后在任务中显式引入。对于依赖操作系统库的 module,用户需上传包含相应程序的自定义安装包进行预安装。此外,此功能也可扩展用于管理 shell 任务所需的系统程序。

Dataphin 中使用 Python 计算任务时,经常会遇到想要使用的 module 未被系统内置。那为什么 Dataphin 不能随时增加内置 module,也不在新版本中添加更多 module 呢?


问: Datpahin 目前内置了哪些 module,都是什么版本?

答: 各个版本的内置 module 清单可能会有差异,可以在 shell 任务中执行 “pip list” (Python 2.7) 或 “pip3 list” (Python 3.7)来查看内置的 module 清单。


问: Dataphin 每个新版本为啥不能定期将用户所需要的 module 额外内置进去?

答: Dataphin 的用户比较多,各家所需要的 module 不一样,module 版本也有差异。如果全部都内置,安装包会膨胀得很大,升级部署的时间会变长。


问: Dataphin 为啥不能由用户自行管理内置 module,让用户随时可以添加新的 module?

答: Dataphin 是容器化部署,通过镜像文件分发安装部署文件,镜像生成后无法在用户侧修改。Python 的执行环境在镜像中已经固定不可修改,每次运行 Python 脚本,是从镜像“克隆”出的一个可运行的“实例”。在这个“实例”里面,可以安装新的 module,但是运行结束后,“实例”整个会被销毁。所有对“实例”环境本身的“变更”,如安装 Python module,都随之销毁了。


Python 三方包管理

Dataphin 在 v3.14 版本上线了 Python 三方包管理功能,提供了以下能力:

  1. 在线安装 Python 三方包(v4.0+),支持输入 module 的名称,系统自动连接镜像源安装指定 module 在所选 Python 版本下的最新版本。支持配置企业自有的镜像源。使用在线安装的前提是,Dataphin 可以连接到镜像源。连接内置镜像源,需要能连接访问公网。
  2. 上传安装,如果无法使用在线安装或安装过程需要有其他操作,可以使用此种方式。具体使用方式可查看产品文档或根据页面提示说明。


Dataphin 的“Python 三方包”管理功能中的安装实际上是“预安装”,作用是下载安装资源(在线安装)或校验安装资源是否满足安装条件(上传安装)。预安装会在一个虚拟环境真实执行一遍安装动作,成功安装后,整个虚拟环境就被销毁了。当任务需要使用三方包时,需要在任务上显式引入已安装(已预安装)的 module,每次执行 Python 脚本时,系统都会自动在本次的“实例”中重新安装 module ,执行结束后,“实例”就被销毁了。任务显式引入 module 的方式如下:


  1. 新建 Python 或 shell 任务对话框,“Python 三方包”下拉多选所需 module


  1. 编辑 Python 或 shell 任务,在“属性-Python 三方包”中设置 module



Python 三方包管理进阶使用

有一些 Python module 除了 Python 资源外,还依赖操作系统的一些 lib。安装这类 module,可能会遇到 module 安装成功,但是无法正常使用,错误信息告知所依赖外部 lib/程序不存在或版本不满足。下面通过一个示例来说明。


Dataphin 内置的 pyodps 的版本是 0.8.0,有的用户可能需要使用更高版本的 pyodps,比如 0.11.6 。在“Python 三方包”中安装 pyodps-0.11.6 (在线安装或上传*.whl 均可)后,实验执行见下图


可以看到:

  1. pyodps-0.11.6 安装成功
  2. from dataphin import odps 时报错了,提示当前版本依赖 OpenSSL 1.1.1+,而系统当前 OpenSSL 的版本是 1.0.2k。OpenSSL 是操作系统的一个程序,通过 SSL/TLS 方式连接外部服务时,需要调用该程序。


升级 pyodps 到 0.11.6,除了 pyodps 本身外,还需要升级操作系统下的 OpenSSL。下文是步骤说明:

  1. 在本地新建目录(文件夹) openssl
  2. 下载 openssl-1.1.1,下载地址为:  https://www.openssl.org/source/old/1.1.1/openssl-1.1.1k.tar.gz,保存到 openssl 目录下
  3. 在 openssl 目录下新建 shell 脚本 setup.sh, 代码内容如下
#!/bin/bash
# setup.sh

# 执行安装
tar -zxvf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k/
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make
make install
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

# 设置环境
echo "/usr/local/openssl/lib" | sudo tee /etc/ld.so.conf.d/openssl.conf
ldconfig
export PATH=/usr/local/openssl/bin:$PATH
  1. openssl 目录下的文件内容如下

  1. 选中 openssl-1.1.1k.tar.gz 和 setup.sh,打包为 openssl.zip,注意: setup.sh 必须在 openssl.zip 的根目录下。
  2. 在 “Python 三方包”管理中,“安装 Python Module”,选择“上传安装-自定义安装包”,上传 openssl.zip, 点击“确定”后开始预安装。

  1. 预安装成功后,在任务中增加 openssl 的引用,重新执行后见下图


写在最后

Python 三方包管理一开始的设计目标只是帮助用户更方便引入 Python module (在线安装或上传 *.whl 安装),发现某些 module 同时还需要对安装或升级操作系统的某些程序后,才增加了“上传自定义安装包”方式安装。聪明的你应该意识到,这种方式也可以用于在 shell 任务中安装一些 shell 任务所需要的系统程序。这个功能已经不完全是“Python 三方包”管理了,而是“三方程序”管理。

相关文章
|
安全 Python
使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质)
新浪微博:山寨版的twitter,各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三方登录来提高用户登录体验就显得尤为重要,本次使用Python3+Tornado5来集成微博登录,记录一下,坑还是不少的。
使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质)
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
2月前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
52 14
|
2月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
116 2
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
人工智能 数据挖掘 开发者
探索Python编程之美:从基础到进阶
本文是一篇深入浅出的Python编程指南,旨在帮助初学者理解Python编程的核心概念,并引导他们逐步掌握更高级的技术。文章不仅涵盖了Python的基础语法,还深入探讨了面向对象编程、函数式编程等高级主题。通过丰富的代码示例和实践项目,读者将能够巩固所学知识,提升编程技能。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上Python编程的美妙旅程吧!
|
2月前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
65 10
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!

热门文章

最新文章

推荐镜像

更多