在Jupyter笔记本电脑中存储密码

sar*_*key 7 python jupyter

有没有办法在笔记本中存储机密/访问机密/密码?我有一个api端点,可以从中提取数据,而且我不想将apiKey公开给所有可以查看笔记本的人。

Sil*_*vee 13

我已经使用了一段时间的最简单的解决方案。

使用getpass便携式密码输入模块。

import getpass

password = getpass.getpass('Enter your password')

print('Your password is: ' + password)
Run Code Online (Sandbox Code Playgroud)


hen*_*ace 6

将您的凭据存储在JSON或YAML中,并让您的笔记本解析必要的部分。

import json

with open('credentials.json') as f:
    data = json.load(f)
    username = data['username']
    password = data['password']
Run Code Online (Sandbox Code Playgroud)

您应该避免在单元输出中打印秘密,否则您选择的任何技术都会被挫败。

  • 嗯……这有效地将它隐藏起来,但问题是可以访问笔记本的人仍然可以获得秘密。我猜有笔记本访问权限的人无法被阻止访问机密... (3认同)

Jac*_*din 6

cco 的回答很好,但如果您正在寻找更简单的解决方案,许多人会使用环境变量来将秘密与源代码隔离开来。

例如,您可以在 shell 中执行脚本时提供它们:

$ API_TOKEN=abc123 python script.py
Run Code Online (Sandbox Code Playgroud)

在您的源代码中:

import os
API_TOKEN = os.environ.get("API_TOKEN")
Run Code Online (Sandbox Code Playgroud)

对于您的 Jupyter 笔记本,您可以使用python-dotenv或类似的包来“检索”.env包含项目机密且被版本控制系统忽略的文件。

创建.env文件后(手动或使用包的命令行工具),您可以python-dotenv像这样在 Jupyter(或 IPython)中使用:

%load_ext dotenv
%dotenv
import os
os.environ.get("API_TOKEN")
Run Code Online (Sandbox Code Playgroud)


cco*_*cco 5

您可以使用密钥环包将敏感信息存储在特定于系统的受保护存储中。
它可以通过pipfrom pypi安装。

  • 不是我能想到的。如果脚本(笔记本)有权访问要验证的机密,则笔记本用户可以使用相同的方法查看机密。 (2认同)