4

我想在一个特定的 conda 环境中安装带有 conda 的程序,并能够使用来自所有 conda 环境的相关命令。

我的目标是让学生使用一个简单的命令(或几个简单的命令)在任何平台(尤其是 Windows)上安装 Mercurial(加上一些 Mercurial 扩展和相关实用程序,如 Meld 和 TortoiseHg),当然无需编译。

当然,该hg命令应该在任何 conda 环境(Windows 上的 anaconda 提示符)的终端中可用。Mercurial 包不能安装在基础环境中,因为 Mercurial 在 Python 2.7 中仍然可以更好地工作(无论如何,它不会是干净的)。

现在 Mercurial 和我们需要的扩展可以安装在所有平台上,例如:

conda create -n py27_mercurial -c conda-forge python=2.7 mercurial dulwich ipaddress
conda activate py27_mercurial
pip install hg-evolve hg-git

稍微使用 conda-forge 和 conda 元包,用一个非常简单的命令就可以做到这一点。此外,为 Meld 和 TortoiseHg 创建 conda 包应该不难。

从这个阶段开始,该hg命令在环境被激活时可用(并且安装其他 Mercurial 扩展非常简单)。要使其可从其他环境(和基本环境)使用,需要将包含目录的路径附加hg到环境变量 PATH 或在 Unix 上以创建符号链接(我对 Windows 的了解不够,无法知道是否有类似的工作)。两种解决方案都不是直截了当的,而且命令也不是平台独立的。

我没有在 conda 中找到执行此类操作的命令,但有时 conda 专家能够做令人印象深刻的事情!这个问题的优雅解决方案是什么?

在某个地方(在 Anaconda 启动器中?)为图形应用程序(Meld 和 TortoiseHg)创建图标也很好。可能吗?

编辑:康达应用

我发现有一种方法可以在 meta.yaml 文件中指定一个包是一个应用程序:https ://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#应用部分

它可能有助于解决问题。

在基于 bash 函数的第一个答案后进行编辑:

当然,我正在寻找一种解决方案,该解决方案涉及用户的非常小的工作(和理解)以及跨平台命令。

请注意,对于 Linux 和 Bash,可以这样做:

CONDA_APP_DIR=$HOME/.local/bin/bin-conda-app/
mkdir -p $CONDA_APP_DIR
echo -e "\nexport PATH=\$PATH:$CONDA_APP_DIR\n" >> ~/.bashrc
ln -s $(which hg) $CONDA_APP_DIR/hg

每次使用时无需激活/停用环境hg...

当然,这种依赖于系统和外壳的解决方案并不令人满意。应该可以使用类似 conda 的跨平台命令(请参阅https://github.com/conda/conda/issues/8556)来执行此类操作,例如

conda config --add channels conda-forge
conda install conda-app
conda-app install mercurial

现在,我只需要实施conda-app

4

2 回答 2

0

人们总是可以创建一个 shell 函数/别名并将其放入 shell 的运行时配置文件中。例如,对于您的用例,我将在我的 中添加以下内容~/.bashrc

hg() {
   (conda activate py27_mercurial
    command hg "$@"
    _hg_exit_code=$?
    conda deactivate
    exit $_hg_exit_code)
}

然后,无论您在哪个环境中,您总是从安装它的环境中运行 hg。为了确保在新会话中为您的 shell 加载此功能,可以随时查看以下输出:type -a hg

我为所有工具(有些是自定义编译的)执行此一次性设置,并且每个工具都有一个别名/shell 函数。这样我就可以愉快地切换黑白环境而不必担心太多。

于 2019-04-29T09:57:47.690 回答
0

解决方案https://stackoverflow.com/a/55900964/1779806对于使用脚本来说是错误的,command hg ...并且对于这种情况(安装命令行应用程序)效率太低。见https://github.com/conda/conda/issues/8556#issuecomment-488703716

我创建了一个小型 Python 包 conda-app ( https://pypi.org/project/conda-app/ ) 来改善这种情况。

这现在应该适用于 Unix 系统(使用 Bash 和 Fish):

conda activate base
conda config --add channels conda-forge
pip install conda-app
conda-app install mercurial

conda-app改进也支持 Windows应该不难。

目前,Windows 用户可以通过安装TortoiseHG来安装 Mercurial 和重要的扩展。

于 2019-05-02T14:56:45.993 回答