使用S3 boto3和雪花连接器时ContextualVersion冲突

时间:2020-06-23 14:29:55

标签: python-3.x amazon-s3 pip boto3 snowflake-cloud-data-platform

我正在尝试使用运行以下软件包的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

然后我使用以下方法连接到Snowflake:

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)

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

1 个答案:

答案 0 :(得分:3)

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

您可以尝试遵循使用最低认可版本的方法。分解:

  • snowflake-connector-python程序包的依赖性似乎限制了它对boto3库的使用,最多只能使用1.13.x
  • 您的要求指定了boto3 1.14.x的显式版本。
  • 您使用的简单boto3 API(通过共享代码段使用)似乎不涉及any 1.14.x specific changes or features
  • boto3 1.13.x版本继续与实时AWS S3服务配合使用。

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

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