我想在一个特定的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启动器中)创建图标。有可能吗?
我发现有一种方法可以在meta.yaml文件中指定包是应用程序:https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#app-section
这可能有助于解决问题。
当然,我正在寻找一种解决方案,该解决方案要求用户使用跨平台命令进行非常小的工作(并理解)。
请注意,对于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
答案 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和重要扩展。