我想在一个特定的 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