为了在我的团队中进行可重复的改进,我在新创建的存储库中导出了一个 conda 环境文件,该文件正在运行conda env export > environment.yml
.
我的想法是让我的同事下载存储库并运行conda env create -f environment.yml
并准备好使用该代码。
然而,我的一些同事向我指出,在yaml文件的底部有:
- readline=7.0=hc1231fa_4
- requests=2.18.4=py35h0d65e6b_1
- setuptools=38.5.1=py35_0
- six=1.11.0=py35h39a4c60_1
- sqlite=3.22.0=h3efe00b_0
- tk=8.6.7=h35a86e2_3
- urllib3=1.22=py35he002d57_0
- wheel=0.30.0=py35h5c0b906_1
- xz=5.2.3=h0278029_2
- zlib=1.2.11=hf3cbc9b_2
prefix: </path/to/your/anaconda/distribution>/envs/<env-name>/bin
最后一行与prefix
变量实际上显示了我的机器名称和 miniconda 安装的唯一路径。
当我的同事尝试加载环境时,脚本实际上对他们来说工作得很好,这意味着prefix
conda 基本上会忽略变量。
我曾经使用 virtualenvs,并且我的绝对路径进入一个应该共享的文件以使事情可以在不同的机器上重现的想法确实让我感到困惑。
所以我的问题是:前缀变量的用途是什么?有没有办法在没有它的情况下导出 conda 环境文件?
这个问题已经解决了here https://stackoverflow.com/questions/41274007/anaconda-export-environment-file,但没有真正解释其作用prefix
。
至少有一个解决方案可以通过编程排除前缀行。
文中没有提到康达文档 https://conda.io/docs/commands/env/conda-env-export.html,除了以下事实:conda env export --prefix PATH
允许指定前缀。
但请注意--name
and --prefix
这里的选项是独家的。
如果你看一下conda
的代码,你会看到conda create
指的是cli_install.check_prefix()
。然后安装.py https://github.com/conda/conda/blob/370e05969595a7821e27ce1fdf5190490d5f9e01/conda/cli/install.py/似乎表明对环境名称进行了安全检查(摘自prefix
)和完整的prefix
路径,以确保不存在具有相同名称或路径的环境。
来自 conda/cli/install.py
def check_prefix(prefix, json=False):
name = basename(prefix)
error = None
if name == ROOT_ENV_NAME:
error = "'%s' is a reserved environment name" % name
if exists(prefix):
if isdir(prefix) and 'conda-meta' not in os.listdir(prefix):
return None
error = "prefix already exists: %s" % prefix
if error:
raise CondaValueError(error, json)
if ' ' in prefix:
stderrlog.warn("WARNING: A space was detected in your requested environment path\n"
"'%s'\n"
"Spaces in paths can sometimes be problematic." % prefix)
我的猜测是这个prefix
in environment.yaml
是确保conda
就会知道在哪里创造环境。但在大多数情况下它似乎毫无用处,并且可能它的存在只是由于之间的机械联系--name
and --prefix
.
来自 conda.base.context.py Context()
# This block of code sets CONDA_PREFIX based on '-n' and '-p' flags, so that
# configuration can be properly loaded from those locations
EDIT:
事实是prefix
甚至在“手动创建环境文件 https://conda.io/docs/user-guide/tasks/manage-environments.html#creating-an-environment-file-manually“ conda 文档的部分令人欣慰的是,这条线毫无用处......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)