0
0

More than 3 years have passed since last update.

世にも奇妙で恐ろしいPythonのエラーの話

Posted at

注)importの仕様には注意しましょうねという話で、初級者向けの内容です。

Pythonでとある機能のテストをしていた時のこと。

昨日は動いていた次のサンプルコードが突然エラーを出すようになりました。
環境はpyenv+pipenv+python3.7+Google Cloud SDK
(Google Firestoreの書き込みを行うコードです)

insert.py
from google.cloud import firestore

db = firestore.Client()
db.collection(u'users').document().set({
    u'first': u'oda',
    u'last': u'nobunaga',
    u'born': 1534
})

エラーの内容は次のとおり

>> pipenv run insert
Loading .env environment variables...
Traceback (most recent call last):
  File "insert.py", line 1, in <module>
    from google.cloud import firestore
  File "/mnt/v01/workspace/sandbox-python-firestore/.venv/lib/python3.7/site-packages/google/cloud/firestore.py", line 18, in <module>
    from google.cloud.firestore_v1 import __version__
  File "/mnt/v01/workspace/sandbox-python-firestore/.venv/lib/python3.7/site-packages/google/cloud/firestore_v1/__init__.py", line 17, in <module>
    from pkg_resources import get_distribution
  File "/mnt/v01/workspace/sandbox-python-firestore/.venv/lib/python3.7/site-packages/pkg_resources/__init__.py", line 33, in <module>
    import platform
  File "/home/dev-user/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/platform.py", line 116, in <module>
    import sys, os, re, subprocess
  File "/home/dev-user/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/subprocess.py", line 140, in <module>
    import select
  File "/mnt/v01/workspace/sandbox-python-firestore/select.py", line 3, in <module>
    db = firestore.Client()
AttributeError: module 'google.cloud.firestore' has no attribute 'Client'

普段からPythonを愛でておられる方々は薄々感じていると思いますが、pyenvとpipenvを同時に使用している状況でのimport errorなので、嫌な予感がします。

けれど、昨日はちゃんと動いていたのです。gcloud authあたりも心配になってきます。

ここで、奇妙な事に気づきます。

  File "/mnt/v01/workspace/sandbox-python-firestore/select.py", line 3, in <module>
    db = firestore.Client()

なぜか、

呼んでいないはずの./select.pyが登場しています。確かに、先ほどサンプルコードとして./にselect.pyを作成していました。

この./select.pyを削除するとプログラムは正常に動作するようになりました。

結局

処理中に使用されていたsubprocess.pyからカレントディレクトリのselect.pyが呼ばれてしまっていたようです。

今回は一人で作成していたサンプルプログラムだったから良かったのですが、Pythonで特にチーム開発している際はファイル名にも注意が必要なのかと、背筋に冷たいものが走ったエラーでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0