Difference between revisions of "Using Python in Lazarus on Windows/Linux"
From Free Pascal wiki
Jump to navigationJump to searchLine 26: | Line 26: | ||
Make modifications to PythonEngine.pas, see lines with "//AT". Compile and use package. You must see "Python" tab appeared in component pallette. | Make modifications to PythonEngine.pas, see lines with "//AT". Compile and use package. You must see "Python" tab appeared in component pallette. | ||
− | == | + | == Files == |
+ | |||
+ | -- | ||
+ | |||
+ | == App form == | ||
Put on form: TPythonEngine, TPythonInputOutput, | Put on form: TPythonEngine, TPythonInputOutput, | ||
Line 40: | Line 44: | ||
* UseLastKnownVersion=False | * UseLastKnownVersion=False | ||
− | + | == Event handlers == | |
* PythonEngine.AfterInit: must add paths to "sys.path". Must do only for Windows, for portable Python, don't do for Linux. I add paths: dir+'DLLs', dir+'python33.zip', dir+'Py' (dir is ExtractFilePath(Application.ExeName)). | * PythonEngine.AfterInit: must add paths to "sys.path". Must do only for Windows, for portable Python, don't do for Linux. I add paths: dir+'DLLs', dir+'python33.zip', dir+'Py' (dir is ExtractFilePath(Application.ExeName)). |
Revision as of 22:43, 8 February 2015
Intro
I need to make app, cross platform, Win/Linux, which embeds Python engine. I tried Python4Delphi, but it doesn't compile and work on Linux x64. Same app must run on Win and Linux, must use portable Python 3 on Win and system Python 3 on Linux.
Result
Links
Work on Ubuntu 14.04 x64
Work on Windows7 x64
Code
P4D
Package "p4dlaz.lpk": delete all refs to units "...Delphi...". (Maybe units aren't needed for Lazarus apps.) Make modifications to PythonEngine.pas, see lines with "//AT". Compile and use package. You must see "Python" tab appeared in component pallette.
Files
--
App form
Put on form: TPythonEngine, TPythonInputOutput, set such props of PythonEngine:
- AutoLoad=False
- DllName empty
- DllPath empty
- FatalAbort=False
- InitScript="import sys; print('Python', sys.version)"
- IO=PythonInputOutput1
- PyFlags=[pfIgnoreEnvironmentFlag]
- UseLastKnownVersion=False
Event handlers
- PythonEngine.AfterInit: must add paths to "sys.path". Must do only for Windows, for portable Python, don't do for Linux. I add paths: dir+'DLLs', dir+'python33.zip', dir+'Py' (dir is ExtractFilePath(Application.ExeName)).
procedure TfmMain.PythonEngineAfterInit(Sender: TObject); var SDir, S1, S2, S3: string; begin {$ifdef windows} SDir:= ExtractFilePath(Application.ExeName); S1:= SDir + 'DLLs'; S2:= SDir + 'python33.zip'; S3:= SDir + 'Py'; Py_SetSysPath([S1, S2, S3]); {$endif} end;