【问题标题】:PyCharm: Why "Python Console" is not accessing ~\.aws\credentials file? How to set it within "Python Console"PyCharm:为什么“Python 控制台”没有访问 ~\.aws\credentials 文件?如何在“Python 控制台”中设置它
【发布时间】:2019-05-08 20:21:21
【问题描述】:

我正在 Pycharm 中开发 AWS DynamoDb 表。为此,我使用 Python 3.6 创建了一个虚拟环境,并安装了所需的库,如 boto3。我还在 ~/.aws/credentials 文件中使用 AWS CLI 工具设置了我的 AWS 凭证。

问题是当我简单地运行代码时,它就像一个魅力,能够读取凭据文件。但是,当我选择在“Python 控制台”中运行代码时,我收到凭据已过期的错误消息。在我看来,“Python 控制台”不知何故无法访问 ~/.aws/credentials 文件,并且正在其他地方寻找凭据。或者当我选择要在 python 控制台中运行的代码时,boto3 没有从 ~/.aws/credentials 访问凭证文件。

有人可以指导我如何在 Python 控制台中设置凭据,以便我可以交互地运行代码。

谢谢,

【问题讨论】:

  • 您可以使用 procmon(在 Windows 中)和 strace(在 Linux 中)查看 Python 试图打开的文件——这将显示它看起来在哪里(以及是否)对于凭证文件。 Debugging your code also works.

标签: python amazon-web-services pycharm boto3 boto


【解决方案1】:

我在 Intellij 中使用 Pycharm 时遇到了同样的问题。

Boto3 找不到凭据文件,而且我没有设置默认配置文件。

> os.environ["AWS_SHARED_CREDENTIALS_FILE"]
None
> os.environ["AWS_DEFAULT_PROFILE"]
None

解决办法,我明确设置变量

> import boto3
> import os
> os.environ["AWS_SHARED_CREDENTIALS_FILE"] = "<full-path>/.aws/credentials"
> os.environ["AWS_DEFAULT_PROFILE"] = "<profile-name>"

> boto3.client('sts').get_caller_identity().get('Account')
1234567890

【讨论】:

    【解决方案2】:

    来自Credentials — Boto 3 Docs 1.9.61 documentation

    boto3 查找凭据的机制是搜索可能位置的列表,并在找到凭据后立即停止。 Boto3 搜索凭据的顺序是:

    • boto.client() 方法中将凭据作为参数传递
    • 在创建 Session 对象时将凭据作为参数传递
    • 环境变量
    • 共享凭证文件 (~/.aws/credentials)
    • AWS 配置文件 (~/.aws/config)
    • 担任角色提供者
    • Boto2 配置文件(/etc/boto.cfg~/.boto
    • 配置了 IAM 角色的 Amazon EC2 实例上的实例元数据服务。

    因此,如果它没有使用凭证文件,它可能是从环境变量中获取凭证。

    【讨论】:

    • 这是有道理的,但是,我没有在我的虚拟环境中设置任何环境变量,所以我期待它去寻找凭证文件。
    • PyCharm 可能正在设置它?
    猜你喜欢
    • 2017-09-08
    • 2013-06-08
    • 2015-06-17
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多