Visitar URL original
Segmentation Fault on PythonEngine.Initialize() · Issue #2479 · pythonnet/pythonnet · GitHub
Skip to content

Segmentation Fault on PythonEngine.Initialize() #2479

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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions