-
Notifications
You must be signed in to change notification settings - Fork 770
Closed
Description
Environment
- Pythonnet version: 3.0.4
- Python version: 3.11.3
- Operating System: Linux Mint 21.1
- .NET Runtime: NET 8
Details
- I have a C# NET application that works well under Windows but fails with multiple different Python versions under Linux. Pythonnet fails when I try to initialize it with PythonEngine.Initialize()
- I'm compiling this CLI application in VS2022 under Windows using net8.0
- Because pythonnet requires libpython3.11.so, I'm compiling Python from source on the target system with the
--enable-sharedflag. To compile Python 3.11.3 I'm using the following commands:
./configure --enable-shared
make -s -j2
- Is there a compilation flag I'm missing?
if (!Linux)
{
PythonHome = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "python-3.11.3-embed-amd64");
PythonDLL = "python311.dll";
PythonPath = $"{PythonHome}/Lib";
path = PythonHome + ";" + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process);
}
else
{
PythonHome = "/home/user/cli/Python-3.11.3";
PythonPath = $"{PythonHome}/Lib";
PythonDLL = $"libpython3.11.so";
path = PythonHome + ":" + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process);
}
Environment.SetEnvironmentVariable("PATH", path, EnvironmentVariableTarget.Process);
Console.WriteLine("PATH = " + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process));
Environment.SetEnvironmentVariable("PYTHONHOME", PythonHome, EnvironmentVariableTarget.Process);
Console.WriteLine("PYTHONHOME = " + Environment.GetEnvironmentVariable("PYTHONHOME", EnvironmentVariableTarget.Process));
Environment.SetEnvironmentVariable("PYTHONPATH", PythonPath, EnvironmentVariableTarget.Process);
Console.WriteLine("PYTHONPATH = " + Environment.GetEnvironmentVariable("PYTHONPATH", EnvironmentVariableTarget.Process));
Environment.SetEnvironmentVariable("PYTHONNET_PYDLL", PythonDLL, EnvironmentVariableTarget.Process);
Console.WriteLine("PYTHONNET_PYDLL = " + Environment.GetEnvironmentVariable("PYTHONNET_PYDLL", EnvironmentVariableTarget.Process));
if (Linux)
{
Runtime.PythonDLL = PythonDLL;
PythonEngine.PythonHome = PythonHome;
PythonEngine.PythonPath = PythonPath;
}
Console.WriteLine("Initializing.");
PythonEngine.Initialize();
Console.WriteLine("Allowing threads.");
PythonEngine.BeginAllowThreads();
Console.WriteLine("Initialized.");
No NET exception is thrown. It simply segfaults during initialization.
PATH = /home/user/cli/Python-3.11.3:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PYTHONHOME = /home/user/cli/Python-3.11.3
PYTHONPATH = /home/user/cli/Python-3.11.3/Lib
PYTHONNET_PYDLL = libpython3.11.so
Initializing.
Segmentation fault (core dumped)
Metadata
Metadata
Assignees
Labels
No labels