用Anaconda克隆根环境

25

我看了一篇(非常稀少的)有关Anaconda的教程,然后试着做了以下操作:

$ conda create -n rootclone --clone root

这个失败了:

src_prefix: '/home/bir/conda'
dst_prefix: '/home/bir/conda/envs/rootclone'
Packages: 49
Files: 471
An unexpected error has occurred, please consider sending the
following traceback to the conda GitHub issue tracker at:

    https://github.com/conda/conda/issues

Include the output of the command 'conda info' in your report.


Traceback (most recent call last):
  File "/home/bir/conda/bin/conda", line 5, in <module>
    sys.exit(main())
  File "/home/bir/conda/lib/python2.7/site-packages/conda/cli/main.py", line 203, in main
    args_func(args, p)
  File "/home/bir/conda/lib/python2.7/site-packages/conda/cli/main.py", line 208, in args_func
    args.func(args, p)
  File "/home/bir/conda/lib/python2.7/site-packages/conda/cli/common.py", line 609, in inner
    return func(args, parser)
  File "/home/bir/conda/lib/python2.7/site-packages/conda/cli/main_create.py", line 50, in execute
    install.install(args, parser, 'create')
  File "/home/bir/conda/lib/python2.7/site-packages/conda/cli/install.py", line 170, in install
    clone(args.clone, prefix, json=args.json, quiet=args.quiet)
  File "/home/bir/conda/lib/python2.7/site-packages/conda/cli/install.py", line 91, in clone
    quiet=quiet)
  File "/home/bir/conda/lib/python2.7/site-packages/conda/misc.py", line 177, in clone_env
    data = s.encode('utf-8')
MemoryError

糟糕。环境已经被创造出来:

$ conda info -e
# conda environments:
#
oracle                   /home/bir/conda/envs/oracle
oracleclone              /home/bir/conda/envs/oracleclone
rootclone                /home/bir/conda/envs/rootclone
root                  *  /home/bir/conda

但是它根本不起作用:

$ . activate rootclone
discarding /home/bir/conda/bin from PATH
prepending /home/bir/conda/envs/rootclone/bin to PATH
(rootclone)bir@N2C:~/python$ which python
/usr/bin/python   # Should be in /home/bir/conda/envs/rootclone/bin

但这是一个真正的 bug 吗,还是 conda create -n --clone 只是不适用于克隆 conda 根环境?


在 GitHub 的问题列表中快速搜索可以发现,有其他人报告了类似的 bug,而不是被告知“别这么做,笨蛋”,例如 #1248 - abarnert
同时,在问题跟踪器或StackOverflow上,如果您告诉我们您使用的平台、Anaconda版本和安装方式等信息,您可能会获得更多/更好的帮助。 - abarnert
我不明白为什么你要克隆root。Root保存了创建新环境时使用的默认软件包。你只能克隆envs文件夹中存在的环境。请注意,root不在envs文件夹中。 - alvits
你应该可以很好地克隆根目录。一个conda环境不必在envs目录中才能成为一个环境。 - asmeurer
我认为你的内存不足,因为你试图克隆包含其他环境的根目录。当克隆根目录被创建时,它会尝试克隆已经克隆的根目录。这是递归的,并导致实用程序耗尽内存。 - alvits
把它看作是试图将/home/bir/conda复制到/home/bir/conda/envs/rootclone。该实用程序将尝试递归复制,因此/home/bir/envs/rootclone下的所有文件也将被复制到/home/bir/envs/rootclone/envs/rootclone下,并且这些文件将被复制到/home/bir/envs/rootclone/envs/rootclone/envs/rootclone下。这是一个无限递归。 - alvits
2个回答

41

使用以下命令克隆Anaconda的默认根环境,根环境的名称为base。这个命令在我的Anaconda3-5.0.1上有效。

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

1
尝试创建一个新的环境,但是我收到了以下消息:无法从根环境克隆以下软件包:-conda-env-2.6.0-1 -conda-4.5.12-py37_0 -conda-build-3.17.6-py37_0。如果有人能够提供一些关于这个消息的背景以及为什么这些软件包不能被克隆的上下文,那将有助于理解。 - user3731622
当我使用Anaconda 4时,出现了“CondaEnvironmentNotFoundError:无法找到环境:base”的错误,因此我不得不使用“conda create --name <env_name> --clone root”。 - rovyko

1

MemoryError 表示 conda 进程耗尽了内存。也许您需要分配更多的交换空间。


我认为克隆尝试递归地克隆根,从而创建 envs/rootclone,并将其作为 envs/rootclone/envs/rootclone 克隆。 - alvits
克隆在非根环境下运行良好,因此我认为问题可能类似于alvits的建议... - birone
有人知道这个问题是否已经解决,现在克隆根环境是安全的吗?我做了一些搜索,但是有很多帖子都与错误和克隆根环境有关。 - user3731622
检查我的答案,对我有用 https://dev59.com/u10a5IYBdhLWcg3wdYiO#48947435 - DevC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接