Help us understand the problem. What is going on with this article?

pyenvでインストールしたAnaconda-PythonをopenFrameworksから使う

More than 1 year has passed since last update.

アドオンを使いつつ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」をドラッグ&ドロップします。このとき、オプションでプロジェクトディレクトリにライブラリファイルをコピーするかどうかを聞かれますが、コピーしなくていいです。
pyenv-of-01.jpeg

つぎに、プロジェクトのbuild settingsを編集します。
Header Search Pathsに以下を追加します。ディレクトリは適宜利用されているanacondaのインストールディレクトリに読み替えてください。
/Users/me/.pyenv/versions/anaconda3-4.3.1/include
/Users/me/.pyenv/versions/anaconda3-4.3.1/include/python3.6m

続いて、Library Search Paths
/Users/me/.pyenv/versions/anaconda3-4.3.1/lib

さらに、実行時に「ライブラリが無い」と言われるのを防ぐために、Runpath Search Pathsにも同様のパスを設定します。
/Users/me/.pyenv/versions/anaconda3-4.3.1/lib

プロジェクトのbuild phasesでは、Copy Filesに「libpython3.6m.dylib」を追加します。僕の場合はただ追加するだけで、DestinationやSubpathなどの設定はしませんでした。

テストコード

基本的にはofxPyのエグザンプルファイルが動けばいいですが、動作チェックだけなら以下のコードでエラーが出なければ成功ということになると思います。
重要なのは、$PYTHONHOMEを設定して、というメッセージがでてPythonが使えないことがあるので、putenv関数でプログラム内の環境変数にPythonのホーム(=Anacondaディレクトリ)へのパスを指定しておくことです。

ofApp.h
#pragma once

#include "ofMain.h"
#include "ofxPy.h"

class ofApp : public ofBaseApp{

    public:
        void setup();
        void update();
        void draw();

    ofxPy::Context  python;
};
ofApp.cpp
#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();
}

以上で、つかえるはず。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away