web-dev-qa-db-ja.com

makefileからAnaconda Python環境をアクティブ化する

Makefileを使用して、makefileと anaconda/miniconda を使用してプロジェクトの環境を構築したいので、リポジトリのクローンを作成して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

ただし、これを試してみると、次のエラーが発生します

make:ソース:コマンドが見つかりません

make:*** [ソース]エラー127

解決策を探しましたが、[この質問/回答( Makefileでスクリプトを入手する方法は? )は、Makefile内からsourceを使用できないことを示唆しています。

この回答 しかし、解決策を提案します(そしていくつかの賛成票を受け取りました)が、これは私にとってもうまくいきません

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

/ bin/sh:2:ソース:見つかりません

make:*** [ソース]エラー127

また、source activateステップを別のbashスクリプトに移動し、そのスクリプトをmakefileから実行してみました。それは機能しません。同様の理由で、つまり、シェル内からsourceを実行していると思います。

ターミナルからsource activate myprojectを実行すると、正しく機能することを追加する必要があります。

12
Philip O'Brien

私も同様の問題を抱えていました。 Makefileからconda環境を作成または更新して、自分のスクリプトがそのconda環境のpythonを使用できるようにしたかったのです。
デフォルトでは、makeはshを使用してコマンドを実行し、shわからないsourcethis SO answer )も参照)Iシェルを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

それが役に立てば幸い

8
Ludo

あなたはこれを使うべきです、それは今のところ私にとって機能的です。

report.ipynb : merged.ipynb
    ( bash -c "source ${HOME}/anaconda3/bin/activate py27; which -a python; \
        jupyter nbconvert \
        --to notebook \
        --ExecutePreprocessor.kernel_name=python2 \
        --ExecutePreprocessor.timeout=3000 \
        --execute merged.ipynb \
        --output=$< $<" )
3
Wallas Tg

私も同じ問題を抱えていました。基本的に、唯一の解決策は9000で示されています。conda環境をセットアップするセットアップシェルスクリプトがあり(source activate python2)、makeコマンドを呼び出します。 Makefile内から環境をセットアップしてみましたが、成功しませんでした。

Makefileに次の行があります:

installpy :
   ./setuppython2.sh && python setup.py install

エラーメッセージは次のとおりです。

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'

基本的に、書き込みアクセス権を持つローカルcondaを使用するようにconda環境をセットアップすることができました。しかし、これはmakeプロセスでは検出されません。 'source'を使用してシェルスクリプトで設定された環境がmakeプロセスに表示されない理由がわかりません。 sourceコマンドは、現在のシェルを変更することになっています。他の人がこれをやろうとして時間を無駄にしないように、私はこれを共有したいと思います。 autotooolsにはPythonを操作する方法があることを私は知っています。しかし、makeプログラムはおそらくこの点で制限されています。

私の現在の解決策はシェルスクリプトです:

猫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

これは私にとってはうまくいくようです。

同様の状況で 解決策 がありましたが、私にはうまくいかないようです:

変更したMakefileセグメント:

installpy :
   ( source activate python2; python setup.py install )

Makeを呼び出した後のエラーメッセージ:

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

どこが間違っているのかわからない。誰かがより良い解決策を持っているなら、それを共有してください。

1
Kemin Zhou