Create from file gives CondaHTTPError: HTTP 404 NOT FOUND

Create from file gives CondaHTTPError: HTTP 404 NOT FOUND

我创建了一个 Anaconda Python Conda 环境并导出了一个规范文件,这样我可以在以后需要时使用命令 conda list --explicit 重新安装完全相同的环境。那天是今天,但我很失望地看到其中一个文件不可用并被替换为较新的版本:

https://conda.anaconda.org/conda-forge/win-64/gdal-2.1.3-np111py35_vc14_0.tar.bz2 https://conda.anaconda.org/conda-forge/win-64/gdal-2.1.3-np111py35_vc14_7.tar.bz2

Conda 遇到错误,因为 link 已损坏,然后重试多次未成功:

CondaError: CondaHTTPError: HTTP 404  NOT FOUND for url <https://conda.anaconda.org/conda-forge/win-64/gdal-2.1.3-np111py35_vc14_0.tar.bz2
Elapsed: 00:01.270000
CF-RAY: 3fa8f7eb093298a1-LAX

An HTTP error occurred when trying to retrieve this URL.
HTTPerrors are often intermittent, and a simple retry will get you on your way.

四部分问题:

  1. 规格文件是否仅供短期使用?
  2. 我是否应该单独归档每个 .bz2 文件以便以后能够重新创建环境?
  3. 是否有可用的工具来帮助我执行此操作,或者我应该查看文件夹并手动找到我需要的内容并复制它并 conda 安装每个文件夹?
  4. 除了尝试安装并观察它崩溃之外,是否有更好的方法来检查规范文件的所有 link 的有效性?看起来 conda 会检查它是否已经在另一个环境中下载了相同的文件并且不会尝试再次下载并且损坏的 link 可能被隐藏。

在conda channels中,不保证您使用的工具的版本会永久维护。例如,如果在工具中发现错误,将予以更正,并用更新的版本代替旧版本。

conda list --explicit 不是导出环境的好方法,正如您所说,它只能在很短的时间内起作用。而且,它不能移植到其他OS。我会推荐 conda env exportconda list --export,如 conda 文档中所述:https://conda.io/docs/commands/env/conda-env-export.html .这样,将保留工具的版本,但不会保留完整版本 URL,每个包都可以下载,并且可能经常更改。

所以要回答

Q1:
如果您以正确的方式导出环境,您可以随着时间的推移使用它们。您永远无法确定您 10 年前使用的工具版本是否仍然可用,但 conda 会在导入您的环境时告诉您这一点。

Q2:
您可以创建自己的 conda 通道,并使用固定版本打包您想要的任何工具。但问题是:"do you really need this?"。这意味着您无法升级您使用的工具。有时更新您的代码并使用该工具的新版本比保留旧的错误版本或忘记改进更可取。

我从未测试过,但在另一个 post 我读到环境是自包含在一个文件夹中的,$CONDA_HOME/envs/[your_env] 并且这个文件夹可以直接复制到另一个 conda 安装中,如果它是相同的体系结构(linux64,windows,OSX...).

Q3:
除了 conda env export 之外,没有其他工具可以做到这一点。顺便说一下,我认为所有下载的包都在 $CONDA_HOME/pkgs.

Q4:
不,因为这不是导出环境的好方法。有关信息,conda 不会为不同的环境多次下载相同的包。它重用已经安装的包。您可以在家中添加一个名为 .condarc 的文件,并将该文件放入 allow_softlinks: false。这将告诉 conda 重新安装安装新环境所需的任何包,而不是 link 已经安装在其他环境中的工具。

执行以下命令,即可解决问题:

conda config --remove-key channels
conda config --append channels conda-forge --append channels bioconda --append 
channels defaults

另请注意,我故意遗漏了您目前在频道列表中的 r 频道。您不需要也不应该使用该通道(因为它实际上会降低求解器的性能),因为 R 包已经是默认多通道的一部分,如 https://repo.anaconda.com/pkgs/r.