Conda和conda-forge安装所有conda环境中可用的命令

时间:2019-04-12 18:04:31

标签: mercurial anaconda conda conda-forge

我想在一个特定的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 meta-package,使用一个非常简单的命令就可以做到这一点。此外,为Meld和TortoiseHg创建conda包应该不难。

从这个阶段开始,hg命令在激活环境时可用(安装其他Mercurial扩展名非常简单)。为了使其在其他环境(和基本环境)中可用,需要将包含hg的目录的路径附加到环境变量PATH或在Unix上以创建符号链接(我不知道Windows足以知道类似的东西是否行得通)。两种解决方案都不简单明了,命令也不独立于平台。

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

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

编辑:Conda应用程序

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

这可能有助于解决问题。

在基于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

2 个答案:

答案 0 :(得分: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函数。这样,我可以愉快地切换黑白环境,而不必担心很多。

答案 1 :(得分: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和重要扩展。