前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Python4Delphi安装

qiguaw 2025-03-04 13:41:04 资源文章 15 ℃ 0 评论

起因

很早之前曾经有人给我提到过这个


当时没在意,主要是因为的原因是我自己不会 Python(不知道为什么就是不喜欢缩进式层及编码),另外就是移植性的问题,当时完全不知道怎么把两者融合起来

最近因为工作中需要用到 Python 的内容,迫不得已只能学习了,然后顺带着学习一下这个 Delphi 的控件

P4D 介绍

Python for Delphi(P4D)是一组免费组件,它们将 PythonDLL 包装成 Delphi 和 Lazarus(FPC)。它们让您可以轻松地执行 Python 脚本、创建新的 Pythons 模块和新的 Pyphon 类型。您可以将 Python 扩展创建为 DLL 等

GitHub 地址:
https://github.com/pyscripter/python4delphi

先说一下兼容性,从官方介绍不难看出,它支持 Delphi 和 Lazarus。同时从官方的 issues 中也可以看到在 Delphi7 上也可以使用

Python 的优势是第三方库足够丰富,但是做 PC 端界面程序很明显不是特别方便,虽然它有 pyqt 之类的库。

Delphi 的优势和 Python 对比的话恰恰相反。如果能够将 Delphi 和 Python 结合的话可以解决很多问题(虽然这种玩法算是偏锋中的偏锋)

安装 P4D

官方没有很好的入门文档,我算是补全了这方面的空白吧,当然英语比较好的可以直接按照官方文档安装

官方 wiki:
https://github.com/pyscripter/python4delphi/wiki/Installation

先决条件是安装 Python3,这里不建议使用 Python2.x,官方都已经不建议了。具体安装步骤就不说了(这个可以自行百度)

下载地址:
https://www.python.org/ftp/python/3.10.4/python-3.10.4-amd64.exe

下载 GitHub 源码(直接克隆仓库即可):git clone
https://github.com/pyscripter/python4delphi.git

需要关注的就是我标红的 3 个目录

打开目录$python4delphi_home\Packages\Delphi\Delphi 10.4+ 当然需要根据自己 Delphi 的版本,我使用的是 DelphiXE10.4.2

打开项目组文件
P4DComponentSuite.groupproj
,在需要安装的项目上右击,如果需要使用 Fmx 控件的话它也需要安装,因为我不使用所以我没装



至此控件安装完成

运行 HelloWorld 程序

打开目录$DelphiLibrary_home\python4delphi\Demos,找到Demos_01_to_34.groupproj 项目组文件并用工具打开

打开项目之后先不要着急运行,我们需要在 Library Path 中关联以下源码





如果看到下面的画面表示运行成功



移植性

对于这种代码的移植性分两种情况说,未含第三方模块和包含第三方模块。今天先说未含第三方的情况

├─py
|  ├─hell.py
└─python310
    ├─python310.dll
    └─python310.zip
 |-Project1.exe  

起初我各种百度、Google 想找点教程,可惜资料少的可怜。最后还是群里的朋友 yaHa 指点搞定的,随后我在官方示例 demodll 中也看到了相关代码

function PyInit_demodll : PPyObject;
begin
  Result := nil;
  try
    gEngine := TPythonEngine.Create(nil);
    //自动初始化
    gEngine.AutoFinalize := False;
    //已知的上一个版本
    gEngine.UseLastKnownVersion := False;
    //使用的版本
    gEngine.RegVersion := '3.7';  //<-- Use the same version as the python 3.x your main program uses
    //API 版本
    gEngine.APIVersion := 1013;
    //DLL 文件
    gEngine.DllName := 'python37.dll';
    //加载 Python 的 DLL
    gEngine.LoadDll;

    gModule := TPythonModule.Create(nil);
    gModule.Engine := gEngine;
    gModule.ModuleName := 'demodll';
    gModule.AddMethod( 'add', @Add, 'add(a,b) -> a+b' );
    gModule.Initialize;
    Result := gModule.Module;
  except
  end;
end;

从代码中大概可以看出,初始加载 Python DLL 的核心代码就这么多。我处理之后的代码如下

procedure TForm1.FormCreate(Sender: TObject);
begin

  PythonEngine1.DllPath := ExtractFilePath(Application.ExeName);

  PythonEngine1.AutoLoad := False;

  PythonEngine1.RegVersion := '3.10';  //<-- Use the same version as the python 3.x your main program uses

  PythonEngine1.APIVersion := 1013;

  PythonEngine1.DllName := 'python310.dll';

  PythonEngine1.LoadDll;

  PythonEngine1.SetPythonHome(ExtractFilePath(Application.ExeName)+'\python310')

end;

至此基本完成了,只要将 python310.dll 文件和 python310.zip 放到和 Delphi 的 exe 放在同一目录下就可以完成在无 Python 环境下顺利运行

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表