@@ -1718,6 +1718,7 @@ TPythonType = class; //forward declaration
1718
1718
{ $IFEND}
1719
1719
TPythonEngine = class (TPythonInterface)
1720
1720
private
1721
+ FVenvPythonExe: string;
1721
1722
FInitScript: TStrings;
1722
1723
FIO: TPythonInputOutput;
1723
1724
FRedirectIO: Boolean;
@@ -1862,6 +1863,7 @@ TPythonEngine = class(TPythonInterface)
1862
1863
property ProgramName: UnicodeString read FProgramName write SetProgramName;
1863
1864
published
1864
1865
property AutoFinalize: Boolean read FAutoFinalize write FAutoFinalize default True;
1866
+ property VenvPythonExe: string read FVenvPythonExe write FVenvPythonExe;
1865
1867
property DatetimeConversionMode: TDatetimeConversionMode read FDatetimeConversionMode write FDatetimeConversionMode default DEFAULT_DATETIME_CONVERSION_MODE;
1866
1868
property InitScript: TStrings read FInitScript write SetInitScript;
1867
1869
property InitThreads: Boolean read FInitThreads write SetInitThreads default False;
@@ -4064,7 +4066,19 @@ procedure TPythonEngine.Initialize;
4064
4066
procedure InitSysPath ;
4065
4067
var
4066
4068
_path : PPyObject;
4069
+ const Script =
4070
+ ' import sys' + sLineBreak +
4071
+ ' sys.executable = r"%s"' + sLineBreak +
4072
+ ' path = sys.path' + sLineBreak +
4073
+ ' for i in range(len(path)-1, -1, -1):' + sLineBreak +
4074
+ ' if path[i].find("site-packages") > 0:' + sLineBreak +
4075
+ ' path.pop(i)' + sLineBreak +
4076
+ ' import site' + sLineBreak +
4077
+ ' site.main()' + sLineBreak +
4078
+ ' del sys, path, i, site' ;
4067
4079
begin
4080
+ if VenvPythonExe <> ' ' then
4081
+ ExecString(AnsiString(Format(Script, [VenvPythonExe])));
4068
4082
_path := PySys_GetObject(' path' );
4069
4083
if Assigned(FOnSysPathInit) then
4070
4084
FOnSysPathInit(Self, _path);
0 commit comments