【python】Snowflakeコネクタのインポートエラー解決方法

ホリ

Snowflakeコネクタを使った接続ができない。
インポートエラーが解消できない。

Snowflakeコネクタをインストールしたのに、インポートエラーが解消できなくて困っていませんか?

Snowflakeに関する記事は、他の主要なDBに比べてまだ少なく、私はこの問題に2日間悩まされました。

同じような問題を抱えている方の手助けになれればと思い、私が解決した方法をご紹介したいと思います。

本記事では下記の内容についてまとめています。

  • インポートエラーを解決するために行った環境の公開
  • 環境の再構築を行う具体的な方法

Snowflakeコネクタのインストールと接続確認

Snowflakeコネクタを次のコマンドでインストール

pip install snowflake-connector-python==3.0.0

Snowflakeへの接続確認のため、Snowflakeのバージョンを表示するコードを作成します。

import snowflake.connector

# Gets the version
ctx = snowflake.connector.connect(
    user='<user_name>',
    password='<password>',
    account='<account_identifier>'
    )
cs = ctx.cursor()
try:
    cs.execute("SELECT current_version()")
    one_row = cs.fetchone()
    print(one_row[0])
finally:
    cs.close()
ctx.close()

snowflake DOCUMENTATION : Pythonコネクタのインストールを参考にしています。

インポートエラーの発生状況

上記のコードをコマンドプロンプトから実行すると、Snowflakeコネクタのインポートエラーが発生

ModuleNotFoundError: No module named 'snowflake.connector'; 'snowflake' is not a package

ここで、頭の中は???となりました。

こういった恐らくコード自体は悪くない状況でのエラーは、環境周りの関係が原因であることが多く、解決が困難な場合が多いのでとても苦労します。

インポートエラーが解消した環境

結論から言うと、pythonのバージョンダウンとファイル名を変更することでインポートエラーが解消しました。

snowflake.pyというファイル名がダメだとは全く思っていなかったので、解消したときはとても驚きました。笑

変更前変更後
pythonのバージョン3.11.13.9.12
ファイル名snowflake.pysnow.py

その他、仮想環境にインストールしたモジュールのバージョン情報も載せておきます。

Package                    Version
-------------------------- ---------
asn1crypto                 1.5.1
certifi                    2022.12.7
cffi                       1.15.1
charset-normalizer         2.1.1
cryptography               39.0.0
filelock                   3.9.0
idna                       3.4
numpy                      1.24.2
oscrypto                   1.3.0
pandas                     1.4.4
pip                        23.0.1
pyarrow                    10.0.1
pycparser                  2.21
pycryptodomex              3.16.0
PyJWT                      2.6.0
pyOpenSSL                  23.0.0
python-dateutil            2.8.2
pytz                       2022.7.1
requests                   2.28.2
setuptools                 58.1.0
six                        1.16.0
snowflake-connector-python 3.0.0
typing_extensions          4.4.0
urllib3                    1.26.14

pythonのバージョンを変更した仮想環境の作成方法

必要なPythonのバージョンのインストーラーを以下のサイトからダウンロードします。

インストールしたpythonのバージョンで仮想環境を作成します。

今回はpythonのバージョン3.9.12を想定

py -3.9 -m venv snowflake

作成したsnowflakeの仮想環境をアクティベート化して、再度コードを実行して接続確認を行う。

このとき、コードのファイル名がsnowflake.pyだとインポートエラーになるので気を付けてください。

接続に成功すると次のようにsnowflakeのバージョン情報が表示されます。

7.6.4

まとめ

Snowflakeは日本に参入してまだ間もないこともあり、日本語の記事が思っていたより少なかったため、解決にとても苦労しました。

Pythonとインストールしたモジュールの関連性でのエラーには時々悩まされますが、本当に解決が困難です。

うまくいったという環境を公開している記事に出くわすと本当に助かります。

本記事もどなたかの手助けになりましたら大変うれしく思います。