多用户 Conda 工作流

Multi-user Conda Workflow

首先,提一下我的目标是:拥有一个共享的环境结构,供 2 个以上的用户访问和使用。

当前设置:我有一个 Windows Server 2016,具有连接到公司活动目录的完全管理员访问权限。我已经使用 Python/Conda 几年了,但只是为了我自己,我从来没有在相同条件下与 运行 共享任何代码。

我尝试了各种解决方案来尝试设置它并导致一遍又一遍地重新安装 anaconda/miniconda 以重新开始,但是我一直 运行关注用户之间的权限问题(两个用户都是管理员)在服务器上。我还在服务器上创建了一个组,并提供了各种 anaconda(在我尝试期间安装在不同的位置;C:\, C:\ProgramData\, D:).

理想情况下的工作方式是:我在 Conda 中创建一个新环境,该环境安装到用户之间的共享位置。一旦我创建了环境,我和其他用户就可以激活它,安装软件包,并且两个用户都可以使用其他安装的任何软件包。

我们现在的位置是,我已经在 D:\envs 中创建了一个环境。然后,我要求其他用户在该环境中安装 pandas(我们也尝试过反之亦然),pandas 安装成功,但当我尝试使用该软件包时,却说访问被拒绝。

如果需要,我完全愿意重新开始,或者尝试其他建议以达到最佳效果。

在 conda 环境的顶级目录中,您需要设置 ACL 列表,以便两个用户所属的 AD 组(或者只是两个用户的名字,但实际上,这是一个糟糕的选择)具有完整的控制所有文件、文件夹和 subfolders/files.

您还必须设置继承,使在顶级目录下创建的所有files/folders/objects都继承此权限。

最好在创建新环境之前执行此操作,这样您就不必在创建文件后重新设置所有继承。一个很好的方法是创建一个文件夹来保存你的环境(我在 D 盘中做这个例子):

D:
mkdir D:\conda

然后为 Active Directory 组 PythonUsers 设置 conda 的权限,以便所有 sub-folders/files 继承。

icacls D:\conda /grant:r PythonUsers:(OI)(CI)F /T

此命令通过以下方式更改 D:\conda 的权限:

  • 正在替换授予的权限(/grant:r
  • 广告组PythonUsers
  • 完全控制(F 在最后)
  • 此外,设置继承使其适用于此级别的文件夹和文件(OI)
  • 和所有 subfolders/files (CI)
  • /T遍历所有已经存在的子文件夹,应该是none,但是确实有伤害

现在,当您(或 PythonUsers AD 组中的任何用户)creates/modifies 文件在 D:\conda 或以下时,PythonUsers 中的所有其他用户应该有完全访问它。

此时您可以通过以下方式设置您的 conda 配置以使用新目录作为新环境和包的默认位置:

conda config --prepend envs_dirs D:\conda\envs
conda config --prepend pkgs_dirs D:\conda\pkgs

然后像往常一样启动一个新环境:

conda create -n test python=3.7 pandas

作为对 conda 环境使用共享位置的替代方法,您是否考虑过维护一个 environment file 来定义环境中应该包含哪些包,并让每个用户使用该文件在本地创建自己的环境(conda env create -f path\to\environment.yml)?

该文件可以存储在您的版本控制系统中,如果您愿意,您甚至可以在来自 VCS 的更新更改文件时通过 VCS 客户端中的挂钩自动更新 conda env。

对我来说,这听起来像是一种不那么脆弱且更具可扩展性的做事方式,维护一个定义项目依赖项的环境文件在任何情况下都是一种很好的做法。