A certain engineer "COMPLEX"

開発メモ その88 C/C++からPythonを呼び出せない

Problem


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

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

Windows 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


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


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

I am trying to install Python for the first time. I downloaded the following installer from the Python website:Python 2.7.1 Windows Installer (Windows binary...

So I have searched this question before, and it's been answered satisfactorily for other users on stackoverflow (Python (Windows) - ImportError: No modu...

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

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

windows7/64bit,pytho2.6環境でreportlabをインストールしようとすると、pythonが見つからない旨のメッセージが表示されてしまい、インストールができません。pdfの生成...

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

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

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

OS=64bit python=32bit用


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用


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とつけてファイルに保存し、ダブルクリックで実行します。
その後、プログラムを実行するとうまくいくようになりました、

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。