##アドオンを使いつつpyenvのPythonを利用したい
openFrameworksで作成するソフトウェアから普通にPythonを利用するには、chaosctさんのofxPythonや、satoruhigaさんのofxPyを使うのが楽っぽいですが、OSX上でpyenvを使ってインストールしたAnacondaパッケージのなかのPythonを使ってみたかったので、トライしてみました。
ここでは、ofxPyを利用してOSX上でoF0.9.8を使っています。導入するのはAnaconda3-4.3.1に付属するPython3.6.1です。
##プロジェクトの作成と調整
僕の場合は、普通にproject-generatorでアプリを作りました。ofxPyはもちろん追加済み。
プロジェクトを開いて、まずPythonライブラリを投入します。
インストールディレクトリが/Users/me/.pyenv/versions/anaconda3-4.3.1
なので、その中のlibディレクトリにある「libpython3.6m.dylib」をドラッグ&ドロップします。このとき、オプションでプロジェクトディレクトリにライブラリファイルをコピーするかどうかを聞かれますが、コピーしなくていいです。
つぎに、プロジェクトのbuild settingsを編集します。
Header Search Paths
に以下を追加します。ディレクトリは適宜利用されているanacondaのインストールディレクトリに読み替えてください。
/Users/me/.pyenv/versions/anaconda3-4.3.1/include/python3.6m
続いて、Library Search Paths
さらに、実行時に「ライブラリが無い」と言われるのを防ぐために、Runpath Search Pathsにも同様のパスを設定します。
プロジェクトのbuild phasesでは、Copy Filesに「libpython3.6m.dylib」を追加します。僕の場合はただ追加するだけで、DestinationやSubpathなどの設定はしませんでした。
##テストコード
基本的にはofxPyのエグザンプルファイルが動けばいいですが、動作チェックだけなら以下のコードでエラーが出なければ成功ということになると思います。
重要なのは、$PYTHONHOME
を設定して、というメッセージがでてPythonが使えないことがあるので、putenv
関数でプログラム内の環境変数にPythonのホーム(=Anacondaディレクトリ)へのパスを指定しておくことです。
#pragma once
#include "ofMain.h"
#include "ofxPy.h"
class ofApp : public ofBaseApp{
public:
void setup();
void update();
void draw();
ofxPy::Context python;
};
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){
ofSetFrameRate(0);
ofSetVerticalSync(false);
ofBackground(0);
putenv((char *)"PYTHONHOME=/Users/me/.pyenv/versions/anaconda3-4.3.1");
python.setup();
}
以上で、つかえるはず。