Python “你怎么能这样?”;克隆;将conda环境转换为根环境?

Python “你怎么能这样?”;克隆;将conda环境转换为根环境?,python,anaconda,conda,Python,Anaconda,Conda,我希望conda的根环境将所有包复制到另一个环境中。如何做到这一点 可以选择将依赖项名称/URL/版本复制到文件中 建议 通常,在新环境中工作比更改根目录更安全。但是,在尝试更改之前,请考虑备份现有环境。通过在演示环境中测试这些命令来验证所需的结果。要备份您的根目录env,例如: λ conda activate root λ conda env export > environment_root.yml λ conda list --explicit > spec_file_roo

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

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

建议

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

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

选项1-YAML文件

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

λ activate myenv
λ conda env export > environment.yml  
λ conda env update --name root --file environment.yml     
然后+(例如
root
)使用yaml文件:

λ activate myenv
λ conda env export > environment.yml  
λ conda env update --name root --file environment.yml     

选项2-克隆环境

使用该标志克隆环境(请参阅@DevC的帖子):

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


选项3-等级库文件

使用++从环境中附加依赖项(请参见@Ormetrom):

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

另请参见

  • 有关env子命令的详细信息
  • 桌面程序提供更多的图形化体验
  • 在更新的命令上。对于较旧的conda版本,使用
    激活
    (Windows)和
    源代码激活
    (Linux/Mac OS)。较新版本的conda可以使用
    conda activate
    (这可能需要通过
    conda init
    对shell配置进行一些设置)
  • 保存
    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之前,这可能不适合在生产中使用

+康达文件自原发布以来发生了变化;链接更新。
++等级库文件仅适用于在同一操作系统上创建的环境。与前两个选项不同,spec文件只捕获到conda依赖项的链接;不包括pip依赖项。

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

conda create --name <env_name> --clone base
conda create--name--clone base
您可以使用以下命令列出conda环境中安装的所有软件包

conda list -n <env_name>
conda列表-n

设置新环境时,我需要新环境中基本环境的包(通常是这样),我在提示符中使用spec-file.txt创建一个相同的conda环境,其中包括:

conda list --explicit > spec-file.txt
spec文件包括基本环境等的包

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

conda install --name myenv --file spec-file.txt
然后,来自base的包可以在新环境中使用

整个过程在文档中描述:

我还遇到了将一个环境克隆到另一台机器上的麻烦,我想提供一个答案。我遇到的关键问题是解决当前环境包含无法直接从
conda install
pip install
获取的开发包时出现的错误。对于这些情况,我强烈建议(请参阅):

或者

然后备份环境,要使用当前环境,只需省略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

你的意思是“…从另一个环境复制所有包”[到根目录]?这种技术似乎只适用于使用conda或pip安装的包,对吗?一些没有安装简单conda或pip软件包管理器的软件包不起作用。例如,使用Bazel构建的Tensorflow不会通过yaml文件复制到新环境。要克服上述问题,可以通过bash脚本将环境目录文件复制到根目录中吗?我知道这适用于
conda
/
pip
软件包。我不熟悉您描述的设置。这回答了您发布的原始问题。你的评论反映了另一个问题。也许您应该编辑您的问题。对于版本4.4.8,第一行给出了>CondaEnvException:Conda Env Exception:无法确定环境使用此方法在使用anaconda提示符安装时不在新环境中安装软件包我一直在克隆环境中检查有解决方案吗?
conda install conda-pack
# 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