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.1 | 3.9.12 |
ファイル名 | snowflake.py | snow.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とインストールしたモジュールの関連性でのエラーには時々悩まされますが、本当に解決が困難です。
うまくいったという環境を公開している記事に出くわすと本当に助かります。
本記事もどなたかの手助けになりましたら大変うれしく思います。