看不懂也要跟蹤下,哪哪出問題了,嗯,是python的Py_Initialize()出問題,這行代碼
Py_Initialize := Import('Py_Initialize');
咋辦呢,萬能的互聯網啊(哪天不能上網,那是不是也活的差不多了)
網上說,一般出這個問題,是python的路徑出問題了,系統環境變量裏找不着python了,哦,是這樣,但是我不能設置python32路徑在系統變量裏啊,不能爲了python4delphi而毀了其它的千千萬萬的python代碼。。。(我的系統裏是不設置python路徑的環境變量的,因爲不是固定一個python版本)
網上說,2個辦法:
“兩個方法:
一個就是補全python的環境變量。
另一個就是手動設置初始化函數的搜尋路徑(也就是加載路徑)”
真好,可以手動臨時設置,就是這個python函數Py_SetPythonHome()
那python4delphi裏在哪設置呢,嗯,剛纔跟蹤的時候看到了
procedure SetPythonHome(const PythonHome: string);
是個public方法,爲什麼不publish成屬性啊?
呵,這個PathHome和DLLPath一樣,然後在那裏調用這個方法啊,還是跟蹤的時候看到了幾個個事件,OnAfterLoad和 OnBeforLoad,是在Py_Initialize()前調用的,正正好,設置TPythonEngine的OnAfterLoad或OnBeforLoad:
procedure TForm1.PythonEngine1AfterLoad(Sender: TObject);
begin
PythonEngine1.SetPythonHome(PythonEngine1.DllPath);
end;
感覺這個更好
procedure TForm1.PythonEngine1BeforeLoad(Sender: TObject);
begin
PythonEngine1.SetPythonHome(PythonEngine1.DllPath);
end;
給我起吧,運行好了。。。。
不過demo1 例子會提示錯誤啊,不過這個錯誤表明了運行正確,因爲,語句print 2+2,這是python2的,改成print(2+2),OK