Skip to content

Commit 28ba6eb

Browse files
committed
Support for Python 3.5 and 3.6 added
1 parent 23a3b28 commit 28ba6eb

File tree

7 files changed

+233
-156
lines changed

7 files changed

+233
-156
lines changed

PythonForDelphi/Components/Python_XE7.dpk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
2+
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
13
package Python_XE7;
24

35
{$R *.res}

PythonForDelphi/Components/Sources/Core/Definition.Inc

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -322,19 +322,23 @@
322322
// Note that the installer will let the user specify its default Python version, and
323323
// thus will edit this file.
324324

325-
{$IFNDEF PYTHON34}
326-
{$IFNDEF PYTHON33}
327-
{$IFNDEF PYTHON32}
328-
{$IFNDEF PYTHON31}
329-
{$IFNDEF PYTHON30}
330-
{$IFNDEF PYTHON27}
331-
{$IFNDEF PYTHON26}
332-
{$IFNDEF PYTHON25}
333-
{$IFNDEF PYTHON24}
334-
{$IFNDEF PYTHON23}
335-
{---<START OF DEFAULT PYTHON VERSION>---}
336-
{$DEFINE PYTHON27}
337-
{---<END OF DEFAULT PYTHON VERSION>---}
325+
{$IFNDEF PYTHON36}
326+
{$IFNDEF PYTHON35}
327+
{$IFNDEF PYTHON34}
328+
{$IFNDEF PYTHON33}
329+
{$IFNDEF PYTHON32}
330+
{$IFNDEF PYTHON31}
331+
{$IFNDEF PYTHON30}
332+
{$IFNDEF PYTHON27}
333+
{$IFNDEF PYTHON26}
334+
{$IFNDEF PYTHON25}
335+
{$IFNDEF PYTHON24}
336+
{$IFNDEF PYTHON23}
337+
{---<START OF DEFAULT PYTHON VERSION>---}
338+
{$DEFINE PYTHON27}
339+
{---<END OF DEFAULT PYTHON VERSION>---}
340+
{$ENDIF}
341+
{$ENDIF}
338342
{$ENDIF}
339343
{$ENDIF}
340344
{$ENDIF}
@@ -369,20 +373,23 @@
369373
{$DEFINE PYTHON23_OR_HIGHER}
370374
{$DEFINE PYTHON24_OR_HIGHER}
371375
{$DEFINE PYTHON25_OR_HIGHER}
376+
{$DEFINE PYTHON26_OR_HIGHER}
372377
{$DEFINE PYTHON27_OR_HIGHER}
373378
{$ENDIF}
374379
{$IFDEF PYTHON30}
375380
{$DEFINE PYTHON23_OR_HIGHER}
376381
{$DEFINE PYTHON24_OR_HIGHER}
377382
{$DEFINE PYTHON25_OR_HIGHER}
378383
{$DEFINE PYTHON26_OR_HIGHER}
384+
{$DEFINE PYTHON27_OR_HIGHER}
379385
{$DEFINE PYTHON30_OR_HIGHER}
380386
{$ENDIF}
381387
{$IFDEF PYTHON31}
382388
{$DEFINE PYTHON23_OR_HIGHER}
383389
{$DEFINE PYTHON24_OR_HIGHER}
384390
{$DEFINE PYTHON25_OR_HIGHER}
385391
{$DEFINE PYTHON26_OR_HIGHER}
392+
{$DEFINE PYTHON27_OR_HIGHER}
386393
{$DEFINE PYTHON30_OR_HIGHER}
387394
{$DEFINE PYTHON31_OR_HIGHER}
388395
{$ENDIF}
@@ -391,6 +398,7 @@
391398
{$DEFINE PYTHON24_OR_HIGHER}
392399
{$DEFINE PYTHON25_OR_HIGHER}
393400
{$DEFINE PYTHON26_OR_HIGHER}
401+
{$DEFINE PYTHON27_OR_HIGHER}
394402
{$DEFINE PYTHON30_OR_HIGHER}
395403
{$DEFINE PYTHON31_OR_HIGHER}
396404
{$DEFINE PYTHON32_OR_HIGHER}
@@ -400,6 +408,7 @@
400408
{$DEFINE PYTHON24_OR_HIGHER}
401409
{$DEFINE PYTHON25_OR_HIGHER}
402410
{$DEFINE PYTHON26_OR_HIGHER}
411+
{$DEFINE PYTHON27_OR_HIGHER}
403412
{$DEFINE PYTHON30_OR_HIGHER}
404413
{$DEFINE PYTHON31_OR_HIGHER}
405414
{$DEFINE PYTHON32_OR_HIGHER}
@@ -410,11 +419,39 @@
410419
{$DEFINE PYTHON24_OR_HIGHER}
411420
{$DEFINE PYTHON25_OR_HIGHER}
412421
{$DEFINE PYTHON26_OR_HIGHER}
422+
{$DEFINE PYTHON27_OR_HIGHER}
423+
{$DEFINE PYTHON30_OR_HIGHER}
424+
{$DEFINE PYTHON31_OR_HIGHER}
425+
{$DEFINE PYTHON32_OR_HIGHER}
426+
{$DEFINE PYTHON33_OR_HIGHER}
427+
{$DEFINE PYTHON34_OR_HIGHER}
428+
{$ENDIF}
429+
{$IFDEF PYTHON35}
430+
{$DEFINE PYTHON23_OR_HIGHER}
431+
{$DEFINE PYTHON24_OR_HIGHER}
432+
{$DEFINE PYTHON25_OR_HIGHER}
433+
{$DEFINE PYTHON26_OR_HIGHER}
434+
{$DEFINE PYTHON27_OR_HIGHER}
435+
{$DEFINE PYTHON30_OR_HIGHER}
436+
{$DEFINE PYTHON31_OR_HIGHER}
437+
{$DEFINE PYTHON32_OR_HIGHER}
438+
{$DEFINE PYTHON33_OR_HIGHER}
439+
{$DEFINE PYTHON34_OR_HIGHER}
440+
{$DEFINE PYTHON35_OR_HIGHER}
441+
{$ENDIF}
442+
{$IFDEF PYTHON36}
443+
{$DEFINE PYTHON23_OR_HIGHER}
444+
{$DEFINE PYTHON24_OR_HIGHER}
445+
{$DEFINE PYTHON25_OR_HIGHER}
446+
{$DEFINE PYTHON26_OR_HIGHER}
447+
{$DEFINE PYTHON27_OR_HIGHER}
413448
{$DEFINE PYTHON30_OR_HIGHER}
414449
{$DEFINE PYTHON31_OR_HIGHER}
415450
{$DEFINE PYTHON32_OR_HIGHER}
416451
{$DEFINE PYTHON33_OR_HIGHER}
417452
{$DEFINE PYTHON34_OR_HIGHER}
453+
{$DEFINE PYTHON35_OR_HIGHER}
454+
{$DEFINE PYTHON36_OR_HIGHER}
418455
{$ENDIF}
419456

420457
/////////////////////////////////////////////////////////////////////////////

PythonForDelphi/Components/Sources/Core/PythonEngine.pas

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ interface
126126
end;
127127
const
128128
{$IFDEF MSWINDOWS}
129-
PYTHON_KNOWN_VERSIONS: array[1..10] of TPythonVersionProp =
129+
PYTHON_KNOWN_VERSIONS: array[1..12] of TPythonVersionProp =
130130
( (DllName: 'python23.dll'; RegVersion: '2.3'; APIVersion: 1012; CanUseLatest: True),
131131
(DllName: 'python24.dll'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True),
132132
(DllName: 'python25.dll'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True),
@@ -136,10 +136,12 @@ interface
136136
(DllName: 'python31.dll'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True),
137137
(DllName: 'python32.dll'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True),
138138
(DllName: 'python33.dll'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True),
139-
(DllName: 'python34.dll'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True) );
139+
(DllName: 'python34.dll'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True),
140+
(DllName: 'python35.dll'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True),
141+
(DllName: 'python36.dll'; RegVersion: '3.6'; APIVersion: 1013; CanUseLatest: True) );
140142
{$ENDIF}
141143
{$IFDEF LINUX}
142-
PYTHON_KNOWN_VERSIONS: array[1..10] of TPythonVersionProp =
144+
PYTHON_KNOWN_VERSIONS: array[1..12] of TPythonVersionProp =
143145
( (DllName: 'libpython2.3.so'; RegVersion: '2.3'; APIVersion: 1012; CanUseLatest: True),
144146
(DllName: 'libpython2.4.so'; RegVersion: '2.4'; APIVersion: 1012; CanUseLatest: True),
145147
(DllName: 'libpython2.5.so'; RegVersion: '2.5'; APIVersion: 1013; CanUseLatest: True),
@@ -149,7 +151,9 @@ interface
149151
(DllName: 'libpython3.1.so'; RegVersion: '3.1'; APIVersion: 1013; CanUseLatest: True),
150152
(DllName: 'libpython3.2.so'; RegVersion: '3.2'; APIVersion: 1013; CanUseLatest: True),
151153
(DllName: 'libpython3.3.so'; RegVersion: '3.3'; APIVersion: 1013; CanUseLatest: True),
152-
(DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True) );
154+
(DllName: 'libpython3.4.so'; RegVersion: '3.4'; APIVersion: 1013; CanUseLatest: True),
155+
(DllName: 'libpython3.5.so'; RegVersion: '3.5'; APIVersion: 1013; CanUseLatest: True),
156+
(DllName: 'libpython3.6.so'; RegVersion: '3.6'; APIVersion: 1013; CanUseLatest: True) );
153157
{$ENDIF}
154158
{$IFDEF PYTHON23}
155159
COMPILED_FOR_PYTHON_VERSION_INDEX = 1;
@@ -180,6 +184,12 @@ interface
180184
{$ENDIF}
181185
{$IFDEF PYTHON34}
182186
COMPILED_FOR_PYTHON_VERSION_INDEX = 10;
187+
{$ENDIF}
188+
{$IFDEF PYTHON35}
189+
COMPILED_FOR_PYTHON_VERSION_INDEX = 11;
190+
{$ENDIF}
191+
{$IFDEF PYTHON36}
192+
COMPILED_FOR_PYTHON_VERSION_INDEX = 12;
183193
{$ENDIF}
184194
PYT_METHOD_BUFFER_INCREASE = 10;
185195
PYT_MEMBER_BUFFER_INCREASE = 10;
@@ -3493,7 +3503,7 @@ procedure TPythonInterface.AfterLoad;
34933503
inherited;
34943504
FIsPython3000 := Pos('PYTHON3', UpperCase(DLLName)) = 1;
34953505
FMajorVersion := StrToInt(DLLName[7 {$IFDEF LINUX}+3{$ENDIF}]);
3496-
FMinorVersion := StrToInt(DLLName[8{$IFDEF LINUX}+3{$ENDIF}]);
3506+
FMinorVersion := StrToInt(DLLName[8{$IFDEF LINUX}+4{$ENDIF}]);
34973507

34983508

34993509
if FIsPython3000 then
@@ -9676,8 +9686,14 @@ function IsPythonVersionRegistered(PythonVersion : string;
96769686
// the registry info in HKEY_CURRENT_USER.
96779687
// Hence, for Current user installations we need to try and find the install path
96789688
// since it may not be on the system path.
9689+
9690+
// The above convension was changed in Python 3.5. Now even for all user
9691+
// installations the dll is located at the InstallPath.
9692+
96799693
var
96809694
key: string;
9695+
MajorVersion : integer;
9696+
MinorVersion : integer;
96819697
begin
96829698
Result := False;
96839699
InstallPath := '';
@@ -9690,6 +9706,11 @@ function IsPythonVersionRegistered(PythonVersion : string;
96909706
if KeyExists(key) then begin
96919707
AllUserInstall := True;
96929708
Result := True;
9709+
MajorVersion := StrToInt(PythonVersion[1]);
9710+
MinorVersion := StrToInt(PythonVersion[3]);
9711+
if (MajorVersion > 3) or ((MajorVersion = 3) and (MinorVersion >= 5)) then
9712+
if OpenKey(Key, False) then
9713+
InstallPath := ReadString('');
96939714
end;
96949715
finally
96959716
Free;

PythonForDelphi/Demos/Demo32/Project1.dpr

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// JCL_DEBUG_EXPERT_GENERATEJDBG OFF
2+
// JCL_DEBUG_EXPERT_INSERTJDBG OFF
13
program Project1;
24

35
{$I Definition.Inc}

0 commit comments

Comments
 (0)