上下文版本使用 S3 boto3 和雪花连接器时发生冲突



我正在尝试使用boto3snowflake-connector-python连接到 Amazon S3,我正在运行以下软件包:

boto3==1.14.8
botocore==1.17.8
snowflake-connector-python==2.2.7
snowflake-sqlalchemy==1.2.3

我通过以下方式创建 s3 连接:

import boto3
import pandas as pd
import io
def retrieveCSV():
session = boto3.Session(
aws_access_key_id = [ACCESSKEY],
aws_secret_access_key = [SECRETKEY],
)
s3 = session.resource('s3')
obj = s3.Object('mybucket','MyData.csv')
body = obj.get()['Body'].read()
dfCSV = pd.read_csv(io.BytesIO(body),header=2)
print(dfCSV)
return dfCSV

我使用以下方法连接到雪花:

from sqlalchemy import create_engine
def createEngine(schema):
strConn = 'snowflake://{user}:{password}@{account}/{database}/{schema}'.format(
user = [MYUSER],
password = [MYPASSWORD],
account = [MYSERVER],
database = [MYDATABASE],
schema = [MYSCHEMA]
)
print(strConn)
engine = create_engine(strConn)
return engine

这会导致运行create_engine时出现以下错误:

raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (boto3 1.14.8(/home/ubuntu/.local/lib/python3.6/site-packages), Requirement.parse('boto3<1.14,>=1.4.4'), {'snowflake-connector-python'})

我尝试通过以下方式升级:

pip3 install --upgrade snowflake-connector-python

SegFault结尾:

Installing collected packages: urllib3, six, python-dateutil, docutils, jmespath, botocore, s3transfer, boto3, pycparser, cffi, cryptography, idna, certifi, chardet, requests, azure-core, oauthlib, requests-oauthlib, isodate, msrest, azure-storage-blob, pyjwt, asn1crypto, pytz, oscrypto, pycryptodomex, pyOpenSSL, azure-common, ijson, snowflake-connector-python
Segmentation fault (core dumped)

解决这一冲突的方法是什么?

解决此冲突的方法是什么?

您可以尝试遵循使用最低宜人版本的路径。分解一下:

  • snowflake-connector-python包依赖项似乎限制了它对boto3库的使用最多1.13.x
  • 您的要求指定了boto31.14.x的显式版本。
  • 您使用简单的boto3API(按共享的代码段(似乎不涉及任何特定于 1.14.x 的更改或功能。
  • boto31.13.x版本继续针对实时 AWS S3 服务工作。

因此,请尝试使用可接受的 boto3/botocore 版本代替当前版本:

boto3==1.13
botocore==1.16
snowflake-connector-python==2.2.7
snowflake-sqlalchemy==1.2.3

最新更新