繁体   English   中英

如何将pip / pypi安装的python包转换为要在AWS Glue中使用的zip文件

[英]How to turn pip / pypi installed python packages into zip files to be used in AWS Glue

我正在使用AWS Glue和PySpark ETL脚本,并希望使用辅助库(如google_cloud_bigquery作为PySpark脚本的一部分。

文档说明这应该是可能的 之前的Stack Overflow讨论 ,特别是其中一个答案中的一个评论似乎提供了额外的证据。 但是, 如何做到这一点我不清楚。

因此,目标是将pip install ed包转换为一个或多个zip文件,以便能够在S3上托管包并指向它们,如下所示:

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

应当如何做没有明确规定的任何地方我已经看了。

即如何pip install包然后将其转换为我可以上传到S3 的zip文件 ,以便PySpark可以将它与这样的S3 URL一起使用?

通过使用命令pip download我已经能够获取libs,但默认情况下它们不是.zip文件,而是.whl文件或.tar.gz

..所以不知道如何将它们变成AWS Glue可以消化的zip文件。 也许有名为.tar.gz我可能只是tar -xf他们,然后zip他们回来了,但如何WHL文件?

因此,在浏览过去48小时内我在评论中提供的材料后,我就是这样解决问题的。

注意:我使用Python2.7,因为这是AWS Glue似乎附带的内容。

按照E. Kampf博客文章“Best Practices Writing Production-Grade PySpark Jobs”中的说明这个堆栈溢出答案 ,以及由于随机错误的一些调整,我做了以下内容:

  1. 创建一个名为ziplib的新项目文件夹并将其cd入其中:

mkdir ziplib && cd ziplib

  1. 创建一个requirements.txt文件,每行包含包的名称。

  2. 在其中创建一个名为deps的文件夹:

mkdir deps

  1. 在当前文件夹中使用python 2.7创建一个新的virtualenv环境:

virtualenv -p python2.7 .

  1. 使用ABSOLUTE路径将需求安装到文件夹deps中(否则将无效):

bin/pip2.7 install -r requirements.txt --install-option --install-lib="/absolute/path/to/.../ziplib/deps"

  1. cd进入deps文件夹并将其内容压缩到父文件夹中的zip archive deps.zip,然后cd出deps文件夹:

cd deps && zip -r ../deps.zip . && cd ..

..所以现在我有一个zip文件,如果我把它放到AWS S3上并从AWS Glue上的PySpark指向它,它似乎工作。

但是 ,我无法解决的问题是, 由于某些软件包(例如Google Cloud Python客户端库)使用的是所谓的隐式命名空间软件包(PEP-420) ,因此它们没有__init__.py文件通常出现在模块中,因此import语句不起作用 我在这里不知所措。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM