Hinweis) Es ist eine Geschichte für Anfänger, vorsichtig mit den Importspezifikationen umzugehen.
Der folgende Beispielcode, der gestern funktionierte, gab plötzlich einen Fehler aus. Die Umgebung ist pyenv + pipenv + python3.7 + Google Cloud SDK (Dies ist der Code zum Schreiben in den 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
})
Der Inhalt des Fehlers ist wie folgt
>> 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'
Ich denke, Leute, die Python regelmäßig lieben, fühlen sich ein bisschen, aber ich habe ein schlechtes Gefühl, weil es ein Importfehler ist, wenn pyenv und pipenv gleichzeitig verwendet werden.
Aber gestern hat es gut funktioniert. Ich mache mir auch Sorgen um gcloud auth.
File "/mnt/v01/workspace/sandbox-python-firestore/select.py", line 3, in <module>
db = firestore.Client()
Warum,
Es gibt ./select.py, die Sie nicht anrufen sollten. Natürlich habe ich select.py in ./ früher als Beispielcode erstellt.
Nach dem Entfernen dieser ./select.py funktioniert das Programm einwandfrei.
Es scheint, dass select.py im aktuellen Verzeichnis von subprocess.py aufgerufen wurde, das während der Verarbeitung verwendet wurde.
Diesmal war es gut, weil es ein Beispielprogramm war, das ich selbst geschrieben habe, aber ich fragte mich, ob es notwendig war, auf den Dateinamen zu achten, insbesondere bei der Entwicklung eines Teams mit Python, und es war ein Fehler, dass eine kalte Sache auf meinem Rücken lief.
Recommended Posts