我正在尝试进行与本文类似的设置:https://aws.amazon.com/blogs/big-data/simplify-and-optimize-python-package-management-for-aws-glue- pyspark-jobs-with-aws-codeartifact/
我想使用自定义安装一些软件包
--index-url <my-index-url>
。
为此,我在此处关注 Glue 作业文档:https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html
根据指南,我应该向作业添加一个参数,如下所示:
--python-modules-installer-option
具有价值 --index-url <my-index-url>
。
然而,这个论点根本没有被采纳。日志没有显示任何使用此参数的迹象。
当我尝试从自定义索引安装某些内容时,它失败了,因为未选择参数。
即使尝试使用像
--upgrade
这样的简单值也不起作用。
但是,诸如
--additional-python-modules
之类的其他选项确实会被选中,当然,模块安装会通过Python环境设置的默认pip3
索引而不是通过我设置的索引,如果我指定的包不在我的索引中。
重现此问题:
pip3
有效选项作为作业参数,例如:Key: "--python-modules-installer-option"
、Value: "<valid-pip3-option>"
。谢谢!
该标志和博客是 Glue ETl 的
对于 Shell,--additional-python-modules 的值直接传递给 pip,您可以直接在该值内指定选项(就像将参数传递给 pip 一样)
在努力让它工作近 2 小时后,我想分享最终对我有用的东西。
注意:此答案专门针对 AWS Glue 中的 Python Shell 类型的作业。 Spark 作业需要稍微不同的方法。
@GonzaloHerreros 的答案基本上是所需要的,但这里有更多细节:
假设
mypackage
)设置
您可以使用
--additional-python-modules
作业参数来指定您的包以及 CodeArtifact 存储库的 URL。 URL 必须包含身份验证所需的令牌。
URL 的形式为
https://aws:<codeartifact token>@<codeartifact domain>-<account ID>.d.codeartifact.<aws region>.amazonaws.com/pypi/<repository name>/simple
您可以从安装了 AWS CLI 的 shell 中使用此命令获取
<codeartifact token>
:
aws codeartifact get-authorization-token --domain-owner <account id> --domain <domain name> --query 'authorizationToken' --output text
所以最后你的
--additional-python-modules
的值看起来会像 mypackage --index-url=https://aws:eyJ2ZXIiOjEsImlzdSI6MTcw...@mydomain-999999999999.d.codeartifact.us-east-1.amazonaws.com/pypi/myrepo/simple
陷阱和痛点
/
之后没有引号,没有尾随
simple