CondaValueError: 值错误:前缀已存在:

29

参考:

https://uoa-eresearch.github.io/eresearch-cookbook/recipe/2014/11/20/conda/

我已经运行了以下命令来安装conda和创建虚拟环境。阅读代码块后继续阅读我的问题。

C:\Windows\System32>conda -V
conda 4.1.11

C:\Windows\System32>conda update conda
Fetching package metadata .........
Solving package specifications: ..........

Package plan for installation in environment C:\Program Files\Miniconda2:

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    conda-env-2.6.0            |                0          498 B
    enum34-1.1.6               |           py27_0          53 KB
    conda-4.2.9                |           py27_0         421 KB
    ------------------------------------------------------------
                                           Total:         475 KB

The following NEW packages will be INSTALLED:

    enum34:    1.1.6-py27_0

The following packages will be UPDATED:

    conda:     4.1.11-py27_0 --> 4.2.9-py27_0
    conda-env: 2.5.2-py27_0  --> 2.6.0-0

Proceed ([y]/n)? y

Fetching packages ...
conda-env-2.6. 100% |###############################| Time: 0:00:00  99.60 kB/s
enum34-1.1.6-p 100% |###############################| Time: 0:00:00 719.03 kB/s
conda-4.2.9-py 100% |###############################| Time: 0:00:00   1.33 MB/s
Extracting packages ...
[      COMPLETE      ]|##################################################| 100%
Unlinking packages ...
[      COMPLETE      ]|##################################################| 100%
Linking packages ...
[      COMPLETE      ]|##################################################| 100%

C:\Windows\System32>


C:\Windows\System32>Python -V
Python 2.7.12

C:\Windows\System32>conda create -n ENV1 python=2.7.12 anaconda

...

<-- chose 'n' for install

我选择了'n',因为这是当我试图安装大约十亿个程序时,由于磁盘空间不足而导致Linux服务器崩溃的时刻。相反,我选择了'n',然后希望将其记录到文件中,以便我可以查看整个列表,因为我无法在Windows命令提示符中向上滚动,所以我运行了下面的代码。它等待了一段时间,然后我使用CTRL+C退出。继续阅读代码块后面的部分来了解我的问题。

C:\Windows\System32>conda create -n ENV1 python=2.7.12 anaconda > C:\output.txt

y
Traceback (most recent call last):
  File "C:\Program Files\Miniconda2\Scripts\conda-script.py", line 5, in <module
>
    sys.exit(conda.cli.main())
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\cli\main.py", line 1
50, in main
    return conda_exception_handler(_main)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\exceptions.py", line
 473, in conda_exception_handler
    return_value = func(*args, **kwargs)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\cli\main.py", line 1
44, in _main
    exit_code = args.func(args, p)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\cli\main_create.py",
 line 68, in execute
    install(args, parser, 'create')
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\cli\install.py", lin
e 405, in install
    execute_actions(actions, index, verbose=not context.quiet)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\plan.py", line 643,
in execute_actions
    inst.execute_instructions(plan, index, verbose)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\instructions.py", li
ne 134, in execute_instructions
    cmd(state, arg)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\instructions.py", li
ne 47, in FETCH_CMD
    fetch_pkg(state['index'][arg + '.tar.bz2'])
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\fetch.py", line 336,
 in fetch_pkg
    download(url, path, session=session, md5=info['md5'], urlstxt=True)
  File "C:\Program Files\Miniconda2\lib\site-packages\conda\fetch.py", line 419,
 in download
    for chunk in resp.iter_content(2**14):
  File "C:\Program Files\Miniconda2\lib\site-packages\requests\models.py", line
664, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "C:\Program Files\Miniconda2\lib\site-packages\requests\packages\urllib3\
response.py", line 353, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "C:\Program Files\Miniconda2\lib\site-packages\requests\packages\urllib3\
response.py", line 310, in read
    data = self._fp.read(amt)
  File "C:\Program Files\Miniconda2\lib\httplib.py", line 612, in read
    s = self.fp.read(amt)
  File "C:\Program Files\Miniconda2\lib\socket.py", line 384, in read
    data = self._sock.recv(left)
  File "C:\Program Files\Miniconda2\lib\ssl.py", line 756, in recv
    return self.read(buflen)
  File "C:\Program Files\Miniconda2\lib\ssl.py", line 643, in read
    v = self._sslobj.read(len)
KeyboardInterrupt

C:\Windows\System32>conda create -n ENV1 python=2.7.12 anaconda > C:\output.txt

CondaValueError: Value error: prefix already exists: C:\Program Files\Miniconda2
\envs\ENV1

我该如何删除ENV1前缀,以便我可以尝试重新安装?我该如何在Windows中记录所有输出?如果我移动到C:\output.txt,输入将不可见。


5
conda env remove -n ENV1 应该可以删除该环境。顺便提一下,最近好像有一个 bug 或者其他问题,就是 conda createconda installconda update 脚本在看起来完成(即停止打印输出)后需要一段时间才能真正完成。您可能需要等待几分钟才能重新获得命令提示符。此外,除非您确实希望这样做,否则不需要安装所有的 anaconda。您可以安装单独的包,这样就不会有数十亿个(或多或少)安装了。 - darthbith
我该如何选择安装哪些软件包? - Entree
2
我不知道,基本上,当你决定需要一个包时,你就安装它。你想做什么? - darthbith
6个回答

37
我只是删除了文件夹 C:\Program Files\Miniconda2\envs\ENV1\

这个普通Conda的文件夹在哪里?找不到它。 - xiaodai
1
你可以在这里找到它:C:\ProgramData\Anaconda3\envs - Mehdi Souregi
这种感觉似乎不是最好的方式,当然删除环境 conda env remove 或强制覆盖 --force 是更可取的选择吧? - Chris_Rands

33

你可以通过添加 --force 选项来覆盖现有环境。

因此:

conda create -n ENV1 python=2.7.12 anaconda --force

请确保您已更新Anaconda,因为这是一个最近的功能。

编辑: --force 功能在conda 4.6中添加,但显然在最新版本4.7、4.8中,它并不总是起作用。


2
“--force” 功能在 conda 4.6 版本中被添加,但显然在最新版本 4.7、4.8 中,并不总是有效:https://github.com/conda/conda/issues/7819#issuecomment-611657889 - Noam Manos

3
您可以直接停用现有的并删除它,然后创建新的。
    conda deactivate
    conda env remove -n env_name

2
  1. 打开你的environment.yml文件
  2. 检查环境的nameprefix,通常在文件的第一行(name)和最后一行(prefix)。
  3. 将名称和路径前缀都更改为你要创建新环境的名称。
  4. 再次运行创建环境命令。
  5. conda env list 现在应该给出你的新环境。

很可能是你使用的 environment.yml 文件来自已经存在的其他环境,因此它们的名称(和前缀)与你尝试创建的新环境重复了。


这是我认为最好的答案。 - Victor Wang

2

如果之前已经删除了conda环境,但是实际目录仍然存在(由于某些原因),那么“conda env remove -n ENV1”将无法执行任何操作:

$ conda-env list

  # conda environments:
  #
  base                  *  /home/nmanos/miniconda
  test-env                 /home/nmanos/miniconda/envs/test-env

$ conda-env remove -n ENV1
# Nothing was removed (exit code zero)   

$ ls /home/nmanos/miniconda/envs/ENV1  
  bin  conda-meta  etc  go
# Directory still exists

所以,您可以按照以下步骤删除实际的ENV1目录:
$ ENV_BASE=$(conda-env list | awk '/base/ { print $NF }')
$ echo $ENV_BASE
  /home/nmanos/miniconda

$ rm -rf "$ENV_BASE/envs/ENV1"

-1
下次打开终端并出现提示符 (base) C:\Users\whatever> 只需要输入: (base) C:\Users\whatever> conda activate ENV1

提示符会变成: (ENV1) C:\Users\whatever>

完成工作后,只需输入: (ENV1) C:\Users\whatever> conda deactivate

因为一遍遍地删除文件夹显然不方便。


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