Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

C++からPythonを呼び出す

目標

Visual Studioを使ってC++のプロジェクトからPythonスクリプトを実行する.また,この際に遭遇した「Visual StudioC++からのPythonの呼び出しに,Anacondaを参照してくれない」という問題の解決についてまとめる.

実装環境

Visual StudioPython Toolsのインストール

  1. Visual Studio 2017 Communityのインストーラをダウンロードして起動
  2. 以下にチェックを入れてインストール
    • Desktop development with C++
    • Python development
      • Cookiecutter template support
      • Python web support
      • Python 3 64-bit (3.6.2) ←8月30日現在
      • Python native development tools
    • Anaconda3 64-bit (4.4.0) f:id:Mugichoko:20170830205550p:plain
  3. 環境変数の設定
    • PYTHONHOME
      • C:\Program Files\Anaconda3
    • PATH
      • C:\Program Files\Anaconda3
      • C:\Program Files\Anaconda3\Scripts
      • C:\Program Files\Anaconda3\Library\bin
  4. C++のプロジェクトを立ち上げ,次に示す「サンプルプログラム」を実行

サンプルプログラム

#include <Python.h>

int main()
{
    Py_Initialize();

    PyRun_SimpleString("print(\"Before numpy import.\")");
    PyRun_SimpleString("import numpy as np");
    PyRun_SimpleString("print(\"After numpy import.\")");
    PyRun_SimpleString("a = np.array([1, 2, 3])");
    PyRun_SimpleString("print(\"type(a)\")");
    PyRun_SimpleString("print(a)");
    
    Py_Finalize();
    
    return 0;
}

遭遇した問題とその対処

問題

Numpyを呼び出そうとした時,つまり,サンプルプログラムの8行目で以下のようなエラーが出て止まる.

Before numpy import.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'

要は,numpyが読み込めないらしい.numpyはAnacondaに含まれているはずなので,なぜVisual Studioが見つけられないのかが謎,というわけである.

対処法

結論を書くと「Visual StudioPython Toolsのインストール」のステップ3にあるように,PYTHONHOMEを自ら設定しないといけない.これを設定すると,上手く実行できる.正しく機能すると,以下の様に出力される.

Before numpy import.
After numpy import.
type(a)
[1 2 3]