导出环境变量给 JupyterHub 用户,不使用 Docker?

Export environment variables to JupyterHub users, without using Docker?

JupyterHub 有多种身份验证方法,我使用的是 the PAMAuthenticator,这基本上意味着您使用 Linux 用户名和密码登录 JupyterHub。

但是,在 运行 JupyterHub 之前,我创建的环境变量,像这样(或在我的 .bashrc 中设置的环境变量),不会在用户的 JupyterLab 会话中设置。如您所见,它们在控制台中可用,有或没有 pipenv,并且在 python 本身内通过 os.getenv().

但是在 JupyterHub 为我的用户(我)生成的 JupyterLab 中:

这个环境变量 myname 不可用,即使我从 JupyterLab 中的 bash 会话中导出它,如下所示:

现在 documentation 说我可以使用 Docker 容器为每个用户自定义用户环境,但这似乎是不必要的重量级。有更简单的方法吗?

如果没有,通过 Docker 执行此操作的最简单方法是什么?

jupyterhub_config.py文件中,您可能需要使用c.Spawner.env_keep[=18添加您需要的环境变量=]变量

c.Spawner.env_keep = ['PATH', 'PYTHONPATH', 'CONDA_ROOT', 'CONDA_DEFAULT_ENV', 'VIRTUAL_ENV', 'LANG', 'LC_ALL', 'JUPYTERHUB_SINGLEUSER_APP']

有关所有不同配置的更多信息,请访问 https://jupyterhub.readthedocs.io/en/stable/reference/config-reference.html

不幸的是,与 single-user Jupyter notebook/lab 不同,Jupyterhub 适用于 multi-user 环境,并且自定义和设置安全性不是某个具体领域。它们为您提供了一些默认设置和大量自定义使用的方法,可惜它们只提供了少量示例。您需要深入研究文档,检查与您的用例的相似性,并在 trial-error 过程中进行调整。

幸运的是,除了使用用于配置 Jupyterhub 和 Jupyter notebook 服务器的配置文件,即 jupyter_notebook_config.pyjupyterhub_config.py,我们还可以使用每个用户的环境读取包。这种灵活性来自编程语言内核的使用。

但这需要能够安装新包,已经安装了它们,或者要求管理员在当前内核上安装它们。

这是在当前工作区中使用自定义环境变量的一种方法。

  • 创建一个新文件并给一个明确的名称以表明它是一个环境文件。您可以根据需要拥有任意数量的不同文件。大多数生产练习使用 .env 名称,但 jupyter 不会在文件视图中列出 dot files,因此请避免这样做。另外,请注意引号;有时您需要它们,有时您会遇到错误,具体取决于您使用的库和使用它们的位置。

test.env:

NAME="My Name"
TEST=This is test 42
  • 安装并使用您喜欢的环境文件reader,然后从您想要的文件中读取。需要的时候可以在notebook中使用`pip install``,谨慎使用。

test.ipynb

#package already installed, so installation commented out
#%pip install python-environ
import environ
env = environ.Env()
env.read_env(env.str('ENV_PATH', 'test.env'))
NAME=env("NAME")
TEST=env("TEST")
print(NAME," : ",TEST)

如果您是中心的管理员,请注意图书馆的用例,因为有些图书馆可能会打破您的限制。因此,请留意您授予用户的权限。不过,如果您使用自定义 docker 图像,则不应存在泄漏,因为它们已经设计为与您的系统隔离。