【问题标题】:How to disable `site.ENABLE_USER_SITE` for an environment?如何为环境禁用`site.ENABLE_USER_SITE`?
【发布时间】:2014-08-30 16:02:14
【问题描述】:

来自the docs

site.ENABLE_USER_SITE

显示用户站点包目录状态的标志。 True 表示已启用并已添加到sys.pathFalse 表示它已被用户请求禁用(-sPYTHONNOUSERSITE)。无表示出于安全原因(用户或组 ID 与有效 ID 不匹配)或管理员禁用了它。

我对短语或管理员特别感兴趣。在我是管理员(即我自己的)的机器上,如何针对特定的解释器可执行文件全局禁用此选项?

我想这样做的原因是新的 conda 环境启用了此功能:https://github.com/conda/conda/issues/448

【问题讨论】:

  • 你最后做了什么?

标签: python


【解决方案1】:

该变量的值完全在Python code 中确定:

def check_enableusersite():
    """Check if user site directory is safe for inclusion

    The function tests for the command line flag (including environment var),
    process uid/gid equal to effective uid/gid.

    None: Disabled for security reasons
    False: Disabled by user (command line option)
    True: Safe and enabled
    """
    if sys.flags.no_user_site:
        return False

    if hasattr(os, "getuid") and hasattr(os, "geteuid"):
        # check process uid == effective uid
        if os.geteuid() != os.getuid():
            return None
    if hasattr(os, "getgid") and hasattr(os, "getegid"):
        # check process gid == effective gid
        if os.getegid() != os.getgid():
            return None

    return True

第一个测试只是针对已使用的-s 开关或PYTHONNOUSERSITE 环境变量。

如果有效用户 ID 或组 ID 与进程用户 ID 或组 ID 不同,则剩下的测试返回 None

管理员可以set the effective user id or group id bits,此时可执行文件的有效用户变为可执行文件的所有者或组,而不是执行Python的用户,此时上述函数将返回None

除此之外,sitecustomize.py 包可以再次将值设置为None,并再次从路径中显式删除用户目录。如果是这样,则跳过 usercustomize.py 导入步骤。

【讨论】:

  • 是的,我看到了。文档似乎暗示还有另一种方式:“无意味着出于安全原因(用户或组 ID 与有效 ID 不匹配)被管理员禁用。”。这意味着除了更改用户/组 ID 之外还有另一种方法。
  • @ontologist:上面的实现是实际将要发生的。由于设置有效的用户/组位是管理员操作,我认为这就是文档(无效地)暗指的内容。
  • 是的,可能是这样。虽然,这些解决方案都不是很方便。环境变量不是特定于解释器的,总是使用命令行标志是脆弱的,更改用户/组 id 会产生其他影响。
  • 啊,看到你的编辑了。这可能是唯一的出路。恼人的是,仅将值设置为 None 是不够的,您必须明确编辑 sys.path
  • @ontologist:您将检查 site.getusersitepackages() 返回的内容并再次删除该路径。
【解决方案2】:

基本上你可以添加环境变量PYTHONNOUSERSITE=1(随便设置一下)

因此,如果需要全局更改,请将其添加到 .bashrc 或您使用的任何内容中。

对于康达:

您可以指定将为特定环境设置的变量see link 简而言之:

conda env config vars set PYTHONNOUSERSITE=1

然后重新激活您的环境

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多