从makefile激活Anaconda Python环境

Phi*_*ien 10 python bash makefile virtualenv anaconda

我想使用makefile来使用makefile和anaconda/miniconda构建我的项目环境,所以我应该能够克隆repo并简单地运行make myproject

myproject: build

build:
  @printf "\nBuilding Python Environment\n"
  @conda env create --quiet --force --file environment.yml
  @source /home/vagrant/miniconda/bin/activate myproject
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试这个,我会收到以下错误

make:source:找不到命令

make:***[来源]错误127

我已经搜索了一个解决方案,但是[这个问题/答案(如何在Makefile中提供脚本?)表明我无法source在makefile中使用.

然而,这个答案提出了一个解决方案(并收到了几个赞成票),但这对我来说也不起作用

(\
source/home/vagrant/miniconda/bin/activate myproject; \

)

/ bin/sh:2:source:not found

make:***[来源]错误127

我还尝试将source activate步骤移动到单独的bash脚本,并从makefile执行该脚本.这不起作用,我假设出于类似的原因,即我source在shell中运行.

我应该补充说,如果我source activate myproject从终端运行,它可以正常工作.

Lud*_*udo 8

我有类似的问题; 我想从Makefile创建或更新conda环境,以确保我自己的脚本可以使用来自该conda环境的python.
默认情况下,使用sh来执行命令,而sh不知道(也参见此SO答案).我只是将SHELL设置为bash并最终得到(仅限相关部分):

SHELL=/bin/bash
CONDAROOT = /my/path/to/miniconda2
.
.
install: sometarget
        source $(CONDAROOT)/bin/activate && conda env create -p conda -f environment.yml && source deactivate
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Kem*_*hou 1

我有同样的问题。本质上,唯一的解决方案是由 9000 陈述的。我有一个设置 shell 脚本,在其中设置 conda 环境(源激活 python2),然后调用 make 命令。我尝试从 Makefile 内部设置环境,但没有成功。

我的 makefile 中有这一行:

installpy :
   ./setuppython2.sh && python setup.py install
Run Code Online (Sandbox Code Playgroud)

错误消息是:

make
./setuppython2.sh && python setup.py install
running install
error: can't create or remove files in install directory

The following error occurred while trying to add or remove files in the
installation directory:

    [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/test-easy-install-29183.write-test'
Run Code Online (Sandbox Code Playgroud)

本质上,我能够设置我的 conda 环境来使用我有写访问权限的本地 conda。但这并没有被 make 过程识别。我不明白为什么在我的 shell 脚本中使用“source”设置的环境在 make 过程中不可见;source 命令应该更改当前的 shell。我只是想分享这个,这样其他人就不会浪费时间尝试这样做。我知道 autotools 有一种使用 python 的方法。但 make 程序在这方面可能受到限制。

我当前的解决方案是 shell 脚本:

猫 py2make.sh

#!/bin/sh

# the prefix should be change to the target
# of installation or pwd of the build system
PREFIX=/some/path
CONDA_HOME=$PREFIX/anaconda3
PATH=$CONDA_HOME/bin:$PATH
unset PYTHONPATH
export PREFIX CONDA_HOME PATH
source activate python2
make
Run Code Online (Sandbox Code Playgroud)

这似乎对我来说很有效。

对于类似的情况有一个解决方案,但它似乎对我不起作用:

我修改后的Makefile部分:

installpy :
   ( source activate python2; python setup.py install )
Run Code Online (Sandbox Code Playgroud)

调用make后出现错误信息:

make
( source activate python2; python setup.py install )
/bin/sh: line 0: source: activate: file not found
make: *** [installpy] Error 1
Run Code Online (Sandbox Code Playgroud)

不知道我哪里错了。如果有人有更好的解决方案请分享。