Problem

前回、C/C++のコードからPythonを呼び出してみました。

が、自宅の環境だと、Windows 10で動作し、Windows 7で動作しないという問題が発生しました。

Windows 10

1
2
3
4
5
6
7
8
9
10
b:\Release>ver

Microsoft Windows [Version 10.0.15063]

b:\Release>where python
C:\Python27\python.exe
C:\Program Files\Miniconda2\python.exe

b:\Release>ConsoleApplication.exe
10

Windows 7

1
2
3
4
5
6
7
8
9
D:\Works\Demo\CppPython1\x64\Release>ver

Microsoft Windows [Version 6.1.7601]

D:\Works\Demo\CppPython1\x64\Release>where python
C:\Program Files\Miniconda2\python.exe

D:\Works\Demo\CppPython1\x64\Release>ConsoleApplication.exe
ImportError: No module named site

python.exeはPathが通っているのは間違いないのですが… きになるのは、Windows 10側はPythonインタプリタが一つ多いところ。

Resolution

調べてみると、そこそこ発生している問題の様子。

ただ、どれも環境変数PYTHONHOME, PYTHONPATHを通せ、という説明だけで、私の環境は解決できませんでした。
そもそも、Windows 10側にはこの2つの環境変数は定義されていませんでしたし。

そんな中、日本語の開発者向けQ&Aコミュニティteratailで回答を見つけました。

ようするに、レジストリがおかしいよ、という話。
確かに、Windows 10側には指摘されているレジストリの項目が存在していましたが、Windows 7側にはありませんでした。

そのため、レジストリに適切な値を追加することで動作するようです。
上のteratailの回答では親切にもレジストリへの追加スクリプトも用意してありましたので、適切に書き換えて実行するだけです。
実行前に、問題のレジストリが存在しないことを確認してから実行します。

自分の環境では、Minicondaに関連付けたいので下記のように修正しました。
インストールしてあるMinicondaは4.0.5 64bit (Python 2.7.11)版でした。
OS=64bit python=32bit用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Help]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Help\MainPythonDocumentation]
@="C:\\Program Files (x86)\\Miniconda2\\Doc\\python2713.chm"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath]
@="C:\\Program Files (x86)\\Miniconda2\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath\InstallGroup]
@="Python 2.7"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Modules]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\PythonPath]
@="C:\\Program Files\\Miniconda2 (x86)\\Lib;C:\\Program Files\\Miniconda2 (x86)\\DLLs;C:\\Program Files (x86)\\Miniconda2\\Lib\\lib-tk"

OS=64bit python=64bit または OS=32bit用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\Help]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\Help\MainPythonDocumentation]
@="C:\\Program Files\\Miniconda2\\Doc\\python2713.chm"

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPath]
@="C:\\Program Files\\Miniconda2\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPath\InstallGroup]
@="Python 2.7"

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\Modules]

[HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\PythonPath]
@="C:\\Program Files\\Miniconda2\\Lib;C:\\Program Files\\Miniconda2\\DLLs;C:\\Program Files\\Miniconda2\\Lib\\lib-tk"

上の内容を、**<適当な名前>.reg** とつけてファイルに保存し、ダブルクリックで実行します。
その後、プログラムを実行するとうまくいくようになりました、