折騰python4delphi


python4delphi有更新了,支持最新的python(python3.7)和delphi(10.3)。

 git上下載更新的python4delphi,然后安裝控件,打開demo1,

提示不能打開python27.dll,這個,我電腦上的是3.6,肯定不行,改TPythonEngine控件的DllPath,DllName,RegVersion( 這個屬性可以不管)。。。運行,還是不行,還是裝載了'python27.dll',奇怪了,跟蹤,原來是PythonEngine的UseLastKnowVersion屬性作怪,設置UseLastKnowVersion為False,運行,還是不能打開,現在的DLL名稱是'python36.dll'了,怎么不能打開呢,跟蹤,就是SafeLoadLibary()出問題,這是dll不對了,怎么回事。。。亂點鼠標中。。。win32,win64, 想起了,我的python是64bit的!!!這個Demo是32bit,切換成64,編譯不了,嗯,我只是安裝了32BIT的控件,沒安裝編譯64BIT的。。。64BIT的怎么編譯安裝,打開控件包,切換64BIT,各種錯誤。。。

(這里順便記下:delphi里的32/64是指支持運行在32/64,但是,delphi IDE 本身是32bit,所以,沒有64BIT的設計時控件,只有'運行時'的64BIT控件,也就是說,控件支持32/64,是在運行時支持64,設計時永遠是32,所以設計時控件不要在64BIT下編譯,試試就知道了,在64BIT下,控件是沒有安裝這個選項的)

糾結了下,還是轉個32BIT的PYTHON吧,萬一以后還有其它的需求32BIT的PYTHON呢,裝,網上索了下,ANCONDA3下同時安裝64bit和32bit的python,照着做:

這里重復記錄下:

在anaconda Prompt 下, conda info,查看當前的信息:

首先切換到Window 32BIT平台:set CONDA_FORCE_32BIT=1

這就是32BIT了,然后要在這個環境下安裝(網上說在這個情況下,也不能用anaconda navigator的界面來安裝,只能在COMMAND PROMPT下安裝)

為了和64BIT的共存,32BIT的安裝要建立一個新環境:

conda create -n python32bit python=3.6

然后安裝,安裝完后會在python的env 下有個新目錄 python32bit

 

好了,python32BIT安裝好了,再去試python4delphi

打開DEMO,修改Dllpath,運行,直接崩潰。。。。

 

 

 

 匯編不會啊,看不懂

看不懂也要跟蹤下,哪哪出問題了,嗯,是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

😓。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM