【问题标题】:how to reuse global site-packages in conda env如何在 conda env 中重用全局站点包
【发布时间】:2016-06-20 12:05:05
【问题描述】:

我有一个名为 ABC 的项目,我在折叠 ~/anaconda/envs/ABC 中有一个专门用于它的 conda env,我相信它是一个 venv,我想使用全局站点包中的一些特定包。

对于普通的 Python 安装,可以从 venv 文件夹中删除 no-global-site-package.txt,或者将 venv 设置为使用 global-site-packages,但我没有找到任何等效的方法在 Anaconda 中执行此操作。在线文档也没有答案。

如何为 Anaconda 做到这一点?

【问题讨论】:

    标签: python virtualenv anaconda


    【解决方案1】:

    您可以使用 PYTHONPATH 环境变量。例如

    export PYTHONPATH="/Users/me/anaconda/lib/python2.7/site-packages:$PYTHONPATH"
    

    将使每个环境都可以访问 anaconda 发行版中的所有库。虽然有点违背环境的目的。如果您还想访问使用 home-brew 安装的库,您可以添加

    export PYTHONPATH=/usr/local/Cellar/another_package/lib/python2.7/site-packages:$PYTHONPATH
    

    【讨论】:

    • 嗯,Dominick,你能解释一下吗?
    【解决方案2】:

    您不能在 conda 中明确地执行此操作,其原则是 env 是完全独立的。

    conda 的当前默认行为是允许从环境中看到所有 全局用户站点包,如in this question 所述。因此,默认行为将允许您按照自己的意愿进行操作,但无法根据请求仅允许“某些特定的”全局包。

    此行为已导致 onetwo 问题。为了避免它,export PYTHONNOUSERSITE=1source activate <your env> 之前。请注意,开发人员计划在 4.4.0 中更改默认行为以设置 PYTHONNOUSERSITE=1(根据链接的第二个问题)。

    【讨论】:

    • 我有 conda 4.5.8 和 export PYTHONNOUSERSITE=1 之前 source activate 没有为我做任何事情,它仍然拥有所有全局库:(
    • 我无法重现用户 citynorman 的问题。在 Windows 上使用 conda 4.5.11,以下不包括 tmp env conda list > /tmp/global.txt; conda create -n tmp python=3.6; PYTHONUSERSITE=1 source activate tmp; conda list > /tmp/local.txt; diff /tmp/global.txt /tmp/local.txt # files differ 中的全局库
    【解决方案3】:

    如果有人现在回到这个问题,对于 conda 4.7.12,在 conda activate 调用之前输入 export PYTHONNOUSERSITE=True 成功地将 conda 环境与全局/用户站点包隔离开来。

    另一方面,输入 export PYTHONNOUSERSITE=0 允许将 conda 环境重新引入全局/用户站点包。

    注意:这不是之前建议的export PYTHONNOUSERSITE=1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2012-09-08
      • 2018-10-19
      • 2018-05-21
      • 2021-10-01
      • 2016-09-09
      • 2021-07-25
      相关资源
      最近更新 更多