【问题标题】:Multi-user Conda Workflow多用户 Conda 工作流程
【发布时间】:2020-05-16 14:26:13
【问题描述】:

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

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

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

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

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

如果我需要,我完全愿意重新开始,或者尝试其他关于最佳方式的建议。

【问题讨论】:

    标签: python conda windows-server-2016


    【解决方案1】:

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

    您还必须设置继承,以便在顶级目录下创建的所有文件/文件夹/对象都继承此权限。

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

    D:
    mkdir D:\conda
    

    然后为 Active Directory 组PythonUsers 设置conda 的权限,以便所有子文件夹/文件都继承。

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

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

    • 替换授予的权限 (/grant:r)
    • 为广告组PythonUsers
    • 完全控制(F 结尾)
    • 另外,设置继承使其适用于该级别的文件夹和文件(OI)
    • 和所有子文件夹/文件(CI)
    • /T 遍历所有已存在的子文件夹,应该没有,但确实很痛。

    现在,当您(或 PythonUsers AD 组中的任何用户)创建/修改 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
    

    【讨论】:

    • 感谢一百万的帮助。只是为了澄清我们有自己的 miniconda 安装。今天早上完成了上述步骤,看起来工作正常。再次感谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我完全赞同这种方法。跨用户共享包缓存 (pkgs_dirs),但具有特定于用户的环境 (envs_dirs)。如果您将它们保持在同一个卷上,并且用户使用通用 YAML 创建他们的 env,那么 Conda 对硬链接的使用将使物理磁盘使用率接近单个共享 env 的使用率。顺便说一句,an awesome answer in another thread 探索了自动化环境版本控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2017-01-19
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    相关资源
    最近更新 更多