google.cloud 导入存储:无法导入存储

Posted

技术标签:

【中文标题】google.cloud 导入存储:无法导入存储【英文标题】:google.cloud import storage: cannot import storage 【发布时间】:2018-11-23 05:30:14 【问题描述】:

我尝试按照我在此处找到的谷歌教程运行下面的代码:https://cloud.google.com/docs/authentication/production

def implicit():
    from google.cloud import storage

    # If you don't specify credentials when constructing the client, the
    # client library will look for credentials in the environment.
    project = 'my_project_name'
    storage_client = storage.Client(project=project)

    # Make an authenticated API request
    buckets = list(storage_client.list_buckets())
    print(buckets)

implicit()

但它一直给我以下错误:

Traceback (most recent call last):
  File "[PATH]/scratch_5.py", line 13, in <module>
    implicit()
  File "[PATH]/scratch_5.py", line 2, in implicit
    from google.cloud import storage
ImportError: cannot import name storage

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

我看到您正在尝试使用Google Cloud Storage client libraries。

为了使用它,您应该首先确保它已安装在您的机器上:

pip install --upgrade google-cloud-storage

然后,您可能应该通过在运行代码的机器中设置GOOGLE_APPLICATION_CREDENTIALS 环境变量来设置身份验证(如果您使用的是Application Default Credentials,来自您提到的文档),如下所示。如果您使用的是 Windows,请改用steps presented in the documentation。

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/file.json"

或者,您可以尝试using explicit credentials。您共享的一个(使用从环境中获取的隐式凭据)和一个使用显式凭据的唯一区别是,当您声明 GCS 客户端时,您应该执行以下操作:

storage_client = storage.Client.from_service_account_json('/path/to/SA_key.json')

所有这些准备就绪后,运行您提供的示例代码应该不会有任何问题。为了继续了解 GCS 及其客户端库,请随时搜索我链接的文档并查看 library reference page。

【讨论】:

我已经完成了这两个步骤。但就这样,我可以 100% 确定不是这样。我又做了一次,它给了我一个完全不同的错误,它说我无法自动确定凭据 然后看起来该库未安装(或至少未正确安装),因为现在它没有因cannot import name storage 而失败,而是在稍后的步骤中尝试获取凭据时失败.现在,它可能是两件事之一,要么您没有将正确的凭据传递给环境变量(请注意,我提到的 JSON 文件必须是项目中服务帐户之一的有效密钥);或者你可以try using explicit credentials。 另外,您从哪里运行此代码?这是您的个人计算机,GCE 中的 VM 实例吗? 我尝试使用显式方式,它与相同的 json 密钥文件工作得很好。另外,我正在使用 pycharm 在我的个人计算机上运行它。非常感谢您的帮助!我现在只是好奇为什么它不隐含地这样做。 我很高兴您可以使用明确的凭据。如果它不适用于隐式凭据,则可能是您设置了错误的环境变量,或者它没有正确指向 SA 密钥。无论如何,如果对您有帮助,请考虑accepting and/or upvoting我的回答。谢谢!【参考方案2】:

另外,请确保您的main.py 文件和requirements.txt 与正在部署的函数位于同一目录和同一目录中。

仅供参考,因为即使在指定环境变量后我也必须这样做。

【讨论】:

+1 我在使用 Pub/Sub 应用时遇到问题,将 google.cloud.storage 添加到 requirements.txt 解决了我的问题。【参考方案3】:

我收到错误是因为我忘记在“requirements.txt”中指定它

【讨论】:

以上是关于google.cloud 导入存储:无法导入存储的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 在 Firebase 中自动导入存储桶 - Google Cloud Storage

从 Cloud Function (python) 写入 Google Cloud Storage

ImportError:无法从“google.cloud”(未知位置)导入名称“bigquery”

Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”

如何将公共数据集导入 Google Cloud Bucket

google cloud pubsub ImportError:无法导入名称类型