@@ -2011,8 +2011,8 @@ TPythonEngine = class(TPythonInterface)
20112011 FClients: TList;
20122012 FExecModule: AnsiString;
20132013 FAutoFinalize: Boolean;
2014- FProgramName: WCharTString ;
2015- FPythonHome: WCharTString ;
2014+ FProgramName: UnicodeString ;
2015+ FPythonHome: UnicodeString ;
20162016 FPythonPath: WCharTString;
20172017 FInitThreads: Boolean;
20182018 FOnPathInitialization: TPathInitializationEvent;
@@ -2033,8 +2033,6 @@ TPythonEngine = class(TPythonInterface)
20332033 FPyDateTime_TZInfoType: PPyObject;
20342034 FPyDateTime_TimeTZType: PPyObject;
20352035 FPyDateTime_DateTimeTZType: PPyObject;
2036- function GetPythonHome : UnicodeString;
2037- function GetProgramName : UnicodeString;
20382036 function GetPythonPath : UnicodeString;
20392037 procedure SetPythonPath (const Value : UnicodeString);
20402038
@@ -2074,7 +2072,6 @@ TPythonEngine = class(TPythonInterface)
20742072 function Run_CommandAsObjectWithDict (const command: AnsiString; mode: Integer; locals, globals: PPyObject; const FileName: string = ' <string>' ): PPyObject;
20752073 function EncodeString (const str: UnicodeString): AnsiString; { $IFDEF FPC} overload;{ $ENDIF}
20762074 { $IFDEF FPC}
2077- overload;
20782075 function EncodeString (const str: AnsiString): AnsiString; overload;
20792076 { $ENDIF}
20802077 function EncodeWindowsFilePath (const str: string): AnsiString;
@@ -2157,8 +2154,8 @@ TPythonEngine = class(TPythonInterface)
21572154 property LocalVars : PPyObject read FLocalVars Write SetLocalVars;
21582155 property GlobalVars : PPyObject read FGlobalVars Write SetGlobalVars;
21592156 property IOPythonModule: TObject read FIOPythonModule; { TPythonModule}
2160- property PythonHome: UnicodeString read GetPythonHome write SetPythonHome;
2161- property ProgramName: UnicodeString read GetProgramName write SetProgramName;
2157+ property PythonHome: UnicodeString read FPythonHome write SetPythonHome;
2158+ property ProgramName: UnicodeString read FProgramName write SetProgramName;
21622159 property PythonPath: UnicodeString read GetPythonPath write SetPythonPath;
21632160 published
21642161 property AutoFinalize: Boolean read FAutoFinalize write FAutoFinalize default True;
@@ -2992,6 +2989,7 @@ procedure PythonVersionFromDLLName(LibName: string; out MajorVersion, MinorVersi
29922989function PythonVersionFromRegVersion (const ARegVersion: string;
29932990 out AMajorVersion, AMinorVersion: integer): boolean;
29942991function PyStatus_Exception (const APyStatus: PyStatus): Boolean;
2992+ function StringToWCharTString (Str: string): WcharTString;
29952993
29962994// #######################################################
29972995// ## ##
@@ -4692,19 +4690,7 @@ procedure TPythonEngine.Initialize;
46924690 procedure InitSysPath ;
46934691 var
46944692 _path : PPyObject;
4695- const Script =
4696- ' import sys' + sLineBreak +
4697- ' sys.executable = r"%s"' + sLineBreak +
4698- ' path = sys.path' + sLineBreak +
4699- ' for i in range(len(path)-1, -1, -1):' + sLineBreak +
4700- ' if path[i].find("site-packages") > 0:' + sLineBreak +
4701- ' path.pop(i)' + sLineBreak +
4702- ' import site' + sLineBreak +
4703- ' site.main()' + sLineBreak +
4704- ' del sys, path, i, site' ;
47054693 begin
4706- if VenvPythonExe <> ' ' then
4707- ExecString(AnsiString(Format(Script, [VenvPythonExe])));
47084694 _path := PySys_GetObject(' path' );
47094695 if Assigned(FOnSysPathInit) then
47104696 FOnSysPathInit(Self, _path);
@@ -4788,11 +4774,18 @@ procedure TPythonEngine.Initialize;
47884774 AssignPyFlags(Config);
47894775
47904776 // Set programname and pythonhome if available
4791- if Length(FProgramName) > 0 then
4792- PyConfig_SetString(Config, @Config.program_name, PWCharT(FProgramName));
4793- if Length(FPythonHome) > 0 then
4794- PyConfig_SetString(Config, @Config.program_name, PWCharT(FPythonHome));
4795-
4777+ if FProgramName <> ' ' then
4778+ PyConfig_SetString(Config, @Config.program_name,
4779+ PWCharT(StringToWCharTString(FProgramName)));
4780+ if FPythonHome <> ' ' then
4781+ PyConfig_SetString(Config, @Config.program_name,
4782+ PWCharT(StringToWCharTString(FPythonHome)));
4783+ // Set venv executable if available
4784+ if FVenvPythonExe <> ' ' then
4785+ PyConfig_SetString(Config, @Config.program_name,
4786+ PWCharT(StringToWCharTString(FVenvPythonExe)));
4787+
4788+ PyConfig_Read(Config);
47964789 // Set program arguments (sys.argv)
47974790 SetProgramArgs(Config);
47984791
@@ -5025,18 +5018,6 @@ procedure TPythonEngine.SetPyFlags(const Value: TPythonFlags);
50255018 end ; // of if
50265019end ;
50275020
5028- function TPythonEngine.GetPythonHome : UnicodeString;
5029- begin
5030- { $IFDEF POSIX}
5031- if Length(FPythonHome) = 0 then
5032- Result := ' '
5033- else
5034- Result := UCS4StringToUnicodeString(FPythonHome);
5035- { $ELSE}
5036- Result := FPythonHome;
5037- { $ENDIF}
5038- end ;
5039-
50405021function TPythonEngine.GetPythonPath : UnicodeString;
50415022begin
50425023{ $IFDEF POSIX}
@@ -5062,18 +5043,6 @@ function TPythonEngine.GetSequenceItem(sequence: PPyObject;
50625043 end ;
50635044end ;
50645045
5065- function TPythonEngine.GetProgramName : UnicodeString;
5066- begin
5067- { $IFDEF POSIX}
5068- if Length(FProgramName) = 0 then
5069- Result := ' '
5070- else
5071- Result := UCS4StringToUnicodeString(FProgramName);
5072- { $ELSE}
5073- Result := FProgramName;
5074- { $ENDIF}
5075- end ;
5076-
50775046procedure TPythonEngine.SetPythonHome (const PythonHome: UnicodeString);
50785047begin
50795048{ $IFDEF POSIX}
@@ -9916,6 +9885,15 @@ function PyStatus_Exception(const APyStatus: PyStatus): Boolean;
99169885 Result := APyStatus._type <> _PyStatus_TYPE_OK;
99179886end ;
99189887
9888+ function StringToWCharTString (Str: string): WcharTString;
9889+ begin
9890+ { $IFDEF POSIX}
9891+ Result := UnicodeStringToUCS4String(UnicodeString(Str));
9892+ { $ELSE}
9893+ Result := Str;
9894+ { $ENDIF}
9895+ end ;
9896+
99199897{ TPyEngineAndGIL - Internal class for SafePythonEngine }
99209898
99219899type
0 commit comments