【问题标题】:How can you "clone" a conda environment into the root environment?如何将 conda 环境“克隆”到根环境中?
【发布时间】:2017-04-03 15:50:07
【问题描述】:

我希望 conda 的根环境将所有包复制到另一个环境中。如何才能做到这一点?

【问题讨论】:

  • 你的意思是“...复制所有的包另一个环境”[进入根目录]?

标签: python anaconda conda


【解决方案1】:

可以选择将依赖项名称/url/版本复制到文件中。

推荐

通常,在新环境中工作比更改root 更安全。但是,请考虑在尝试更改之前备份现有环境。通过在演示环境中测试这些命令来验证所需的结果。例如,备份您的 root 环境:

λ conda activate root
λ conda env export > environment_root.yml
λ conda list --explicit > spec_file_root.txt

选项

选项 1 - YAML 文件

在第二个环境中(例如myenv),export names+ 到一个 yaml 文件:

λ activate myenv
λ conda env export > environment.yml  

然后update the first environment+(例如root)与yaml文件:

λ conda env update --name root --file environment.yml     

选项 2 - 克隆环境

使用--clone 标志克隆环境(参见@DevC 的帖子):

λ conda create --name myclone --clone root

这基本上是创建环境的直接副本。


选项 3 - 规范文件

创建一个spec-file++ 以附加来自环境的依赖项(请参阅@Ormetrom):

λ activate myenv
λ conda list --explicit > spec_file.txt
λ conda install --name root --file spec_file.txt

或者,复制一个新环境(推荐):

λ conda create --name myenv2 --file spec_file.txt

另见

  • conda env 了解有关 env 子命令的更多详细信息。
  • Anaconada Navigator 桌面程序,提供更加图形化的体验。
  • Docs 更新命令。对于较旧的 conda 版本,请使用 activate (Windows) 和 source activate (Linux/Mac OS)。较新版本的 conda 可以使用 conda activate(这可能需要通过 conda init 对您的 shell 配置进行一些设置)。
  • Discussion 保持conda env

附加内容

似乎有一个未记录的 conda run 选项可帮助在特定环境中执行命令。

# New command
λ conda run --name myenv conda list --explicit > spec_file.txt

后一个命令在没有激活/停用步骤的环境中运行命令时有效。请参阅下面的等效命令:

# Equivalent
λ activate myenv
λ conda list --explicit > spec_file.txt
λ deactivate

请注意,这可能是一项实验性功能,因此在正式采用公共 API 之前,这可能不适合生产环境。

+自原始帖子以来,Conda 文档发生了变化;链接已更新。++规范文件仅适用于在同一操作系统上创建的环境。与前两个选项不同,spec-files 仅捕获指向 conda 依赖项的链接;不包括 pip 依赖项。

【讨论】:

  • 这种技术似乎只适用于使用 conda 或 pip 安装的软件包,对吧?一些未使用简单 conda 或 pip 包管理器安装的包不起作用。例如,使用 Bazel 构建的 Tensorflow 不会通过 yaml 文件复制到新环境。
  • 为了克服上面的评论,可以通过 bash 脚本将环境目录文件复制到根目录吗?
  • 我知道这适用于conda/pip 包。我不熟悉你描述的设置。
  • 这回答了您发布的原始问题。您的 cmets 反映了另一个问题。也许你应该编辑你的问题。
  • 对于 4.4.8 版本,第一行给出 >CondaEnvException: Conda Env Exception: Unable to determine environment
【解决方案2】:

要复制您的根环境(名为base),您可以使用以下命令;使用 Anaconda3-5.0.1 为我工作:

conda create --name <env_name> --clone base

您可以使用以下命令列出所有安装在 conda 环境中的包

conda list -n <env_name>

【讨论】:

  • 在使用 anaconda 提示符安装时,使用此方法不会在新环境中安装软件包我会不断检查克隆的环境有什么解决方案吗?
【解决方案3】:

当设置一个新环境时,我需要新环境中的基本环境中的包(通常是这种情况),我在提示符下使用 spec-file.txt 构建一个相同的 conda 环境:

conda list --explicit > spec-file.txt

spec 文件包括例如基础环境的包。

然后使用提示将软件包安装到新环境中:

conda create --name myenv --file spec-file.txt

base 中的包随后在新环境中可用。

整个过程在文档中有描述: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#building-identical-conda-environments

【讨论】:

    【解决方案4】:

    我还遇到了将环境克隆到另一台机器上的麻烦,并想提供一个答案。我遇到的关键问题是当当前环境包含无法直接从conda installpip install 获得的开发包时解决错误。对于这些情况,我强烈推荐conda-pack(见this answer):

    pip install conda-pack
    

    或者,

    conda install conda-pack
    

    然后备份环境,使用当前环境只需省略 my_env 名称,

    # Pack environment my_env into my_env.tar.gz
    $ conda pack -n my_env
    
    # Pack environment my_env into out_name.tar.gz
    $ conda pack -n my_env -o out_name.tar.gz
    
    # Pack environment located at an explicit path into my_env.tar.gz
    $ conda pack -p /explicit/path/to/my_env
    

    和恢复,

    # Unpack environment into directory `my_env`
    $ mkdir -p my_env
    $ tar -xzf my_env.tar.gz -C my_env
    
    # Use Python without activating or fixing the prefixes. Most Python
    # libraries will work fine, but things that require prefix cleanups
    # will fail.
    $ ./my_env/bin/python
    
    # Activate the environment. This adds `my_env/bin` to your path
    $ source my_env/bin/activate
    
    # Run Python from in the environment
    (my_env) $ python
    
    # Cleanup prefixes from in the active environment.
    # Note that this command can also be run without activating the environment
    # as long as some version of Python is already installed on the machine.
    (my_env) $ conda-unpack
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-17
      • 2022-12-21
      • 2020-05-06
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-07-11
      相关资源
      最近更新 更多