Skip to content

Segmentation Fault on PythonEngine.Initialize() #2479

@ddaigle-dge

Description

@ddaigle-dge

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-shared flag. 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions