目前p4d已經可以支持到XE7,可惜googlecode即將關閉,不知道作者是否會在github上繼續更新。
因為此開源項目歷史較久遠,拿到源代碼后可能還需要手動修改相關的文件引用,畢竟需要兼顧低版本的delphi。
step1.安裝 python4delphi
1、首先是組件安裝,打開對應版本的Python_??.dpk ,編譯修改引用,XE后很多單元帶VCL 和FMX的前綴了,需要手工指定,
編譯成功后,選擇release模式下 安裝
2、在我們的項目中添加搜索路徑:xxxxx/python4delphi/Components/Sources/Core
3、在系統盤中的system32或者sysWOW64中找到python27.dll放在程序輸出目錄中
Step2. 將 P4D 的定義文件加到 PRoject.dpr
----------------------------
在Delphi project.dpr, 在uses之前,加上{$I Definition.Inc}
----------------------------
Step3. 使用pythonengince 等組件
----------------------------
設置 pythonengince 組件的屬性.
UseLastKnownVersion=False
DLLName='python27'
DllPath= 'c:/WINDOWS/system32'
----------------------------
Step4. 發布應用前, 需解決run as administrator問題,
----------------------------
(a) 需要 Microsoft.VC90.CRT 和 Microsoft.Windows.Common-Controls 信息作為資源加到delphi project中, 否則加載python的 c-extensions 模塊會報錯.
(b)創建 XP_UAC.manifest 文件, 內容見后.
(c)創建 XP_UAC.rc 文件, 內容:
1 24 XP_UAC.manifest
其中: 1-代表資源編號, 24-資源類型為 RTMAINIFEST , UAC.manifest為manifest文件名稱
(d)使用delphi的brcc32將 XP_UAC.rc編譯成 XP_UAC.res
命令: brcc32 XP_UAC.rc
(e)在Delphi project.dpr 源碼
(1)在{$R *.res} 后, 加上 {$R XP_UAC.res}
=================================
部署python4delphi的應用程序
=================================
方式1. 和開發一樣, 老老實實安裝python以及python的第3方包, 然后你的delphi程序應該就能使用.
方式2. 像dreampie, 將python環境打包, 連同exe一起發布. 有專門的py2exe,cx_freeze等制作工具.
=================================
XP_UAC.manifest 的內容
=================================
C:/WINDOWS/WinSxS 目錄查找 Windows.Common-Controls 和 Microsoft.VC90.CRT, 如果能找到并且version一致, 只需修改 PyScripter 名字. 如果沒有找到這兩個文件, 需要到微軟官網下載 Microsoft Visual C++ 2008 Redistributable Package, 并對比版本號和publicKeyToken.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="PyScripter"
type="win32"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"
language="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker"/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
=================================
關于PYTHONPATH的設置
=================================
關于PYTHONPATH的設置, 可在 TPythonEngine.OnSysPathInit 事件中, 將我們自己的path加到 PythonPATH 中.
如果代碼中沒有加, 我們需要修改注冊表, 位置是 HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/2.7/PythonPath, 將我們的path加進去.
注意: TPythonEngine.OnPathInitialization 事件, 只有在注冊表沒有定義 PythonPath 才有用, 所以不推薦使用.
新聞熱點
疑難解答