目標
Visual Studioを使ってC++のプロジェクトからPythonのスクリプトを実行する.また,この際に遭遇した「Visual StudioがC++からのPythonの呼び出しに,Anacondaを参照してくれない」という問題の解決についてまとめる.
実装環境
- OS: Windows 10 Pro
- IDE: Visual Studio 2017 Community
- Anaconda 4.4.0
Visual StudioとPython Toolsのインストール
- Visual Studio 2017 Communityのインストーラをダウンロードして起動
- 以下にチェックを入れてインストール
- 環境変数の設定
- PYTHONHOME
- C:\Program Files\Anaconda3
- PATH
- C:\Program Files\Anaconda3
- C:\Program Files\Anaconda3\Scripts
- C:\Program Files\Anaconda3\Library\bin
- PYTHONHOME
- 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 StudioとPython Toolsのインストール」のステップ3にあるように,PYTHONHOMEを自ら設定しないといけない.これを設定すると,上手く実行できる.正しく機能すると,以下の様に出力される.
Before numpy import. After numpy import. type(a) [1 2 3]