我正在尝试使用 AWS Glue 中的库
psycopg2
。
我关注了这个问题:
“我所做的是将 psycopg2-binary 安装到一个目录中并压缩该目录的内容:
mkdir psycopg2-binary
cd psycopg2-binary
pip install psycopg2-binary -t .
zip -r9 psycopg2.zip *
然后,我将 psycopg2.zip 复制到 S3 存储桶,并将其作为额外的 Python 库添加到 Glue Spark 作业的“Python 库路径”下。
但是当我尝试导入库时出现此错误
import psycopg2
:
import psycopg2
File "/tmp/psycopg2.zip/psycopg2/__init__.py", line 51, in <module>
from psycopg2._psycopg import ( # noqa
ModuleNotFoundError: No module named 'psycopg2._psycopg'
Python 3.9
Python library path
。我还尝试仅压缩 psycopg2 文件夹(而不是整个项目)并获得相同的错误。
我还尝试将
Job parameters
作为 --additional-python-modules
:psycopg2
传递而不使用 zip 文件,这样 Glue 就会尝试安装它。但我收到以下错误:
Error Category: IMPORT_ERROR; ModuleNotFoundError: No module named 'psycopg2'
也尝试过
--additional-python-modules
:psycopg2-binary==2.9.9
,但出现同样的错误。
正在安装软件包,但导入不起作用。
我的背景是我有很多软件包需要安装。 一些软件包是通过
Python library path
安装的,而其他软件包则通过 --additional-python-modules
作为 Job parameters
安装。
我所做的就是清除所有的库,并通过指定的
--additional-python-modules
版本指定所有我想要的库:
anyio==4.3.0,appdirs==1.4.4,asn1crypto==1.5.1,awswrangler==3.7.2,beautifulsoup4==4.12.3,boto3==1.34.78,botocore==1.34.78,certifi==2024.2.2,charset-normalizer==3.3.2,exceptiongroup==1.2.0,frozendict==2.4.1,h11==0.14.0,html5lib==1.1,httpcore==0.16.3,httpx==0.23.3,idna==3.6,jmespath==1.0.1,lxml==4.9.4,multitasking==0.0.11,numpy==1.26.4,packaging==24.0,pandas==1.5.3,pandas-datareader==0.10.0,peewee==3.17.1,psycopg2-binary==2.9.9,pyarrow==15.0.2,python-bcb==0.1.8,python-dateutil==2.9.0.post0,python-dotenv==1.0.1,pytz==2024.1,redshift-connector==2.1.0,requests==2.31.0,rfc3986==1.5.0,ruff==0.2.2,s3transfer==0.10.1,scramp==1.4.4,six==1.16.0,sniffio==1.3.1,soupsieve==2.5,tenacity==8.2.3,typing_extensions==4.11.0,urllib3==1.26.18,webencodings==0.5.1,yfinance==0.2.37
注意
psycopg2-binary
,它起作用了。
我还传递了以下作业参数:
--python-modules-installer-option
:--upgrade
当事情变得奇怪时,全新安装总是一个好的开始!