Python.Included icon indicating copy to clipboard operation
Python.Included copied to clipboard

Python.Runtime.BadPythonDllException

Open woaidianqian opened this issue 2 years ago • 7 comments

using System; using System.IO; using System.Threading.Tasks; using Python.Runtime;

namespace Python.Deployment.Download { class Program { static async Task Main(string[] args) { // ================================================ // This example demonstrates how to download a Python distribution (v2.7.9) and install it locally // ================================================

        // set the download source
        Python.Deployment.Installer.Source = new Deployment.Installer.DownloadInstallationSource()
        {
            DownloadUrl = @"https://www.python.org/ftp/python/3.7.3/python-3.7.3-embed-amd64.zip",
        };

        // install in local directory. if you don't set it will install in local app data of your user account
        Python.Deployment.Installer.InstallPath = Path.GetFullPath(".");

        // see what the installer is doing
        Python.Deployment.Installer.LogMessage += Console.WriteLine;

        // install from the given source
        await Python.Deployment.Installer.SetupPython();

        // ok, now use pythonnet from that installation
        PythonEngine.Initialize();

        // call Python's sys.version to prove we are executing the right version
        dynamic sys=Py.Import("sys");
        Console.WriteLine("### Python version:\n\t" + sys.version);

        // call os.getcwd() to prove we are executing the locally installed embedded python distribution
        dynamic os = Py.Import("os");
        Console.WriteLine("### Current working directory:\n\t" + os.getcwd());
        Console.WriteLine("### PythonPath:\n\t" + PythonEngine.PythonPath);

    }
}

}

PythonEngine.Initialize(); error!!!

Python.Runtime.BadPythonDllException:“Runtime.PythonDLL was not set or does not point to a supported Python runtime DLL. See https://github.com/pythonnet/pythonnet#embedding-python-in-net”

woaidianqian avatar Jun 20 '23 07:06 woaidianqian

did you compile this for x86 ?

henon avatar Jun 20 '23 09:06 henon

You may have to set this image

henon avatar Jun 20 '23 09:06 henon

image I have already set it to x64, but the problem still persists. If I don't specify the Python version, it will automatically download Python 3.11 without any error. However, when I specify the Python version, it throws an error.

woaidianqian avatar Jun 21 '23 05:06 woaidianqian

using System;
using System.Threading.Tasks;
using Python.Included;
using Python.Runtime;

namespace NetCoreExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            await Installer.SetupPython();
            PythonEngine.Initialize();
            dynamic sys=PythonEngine.ImportModule("sys");
            Console.WriteLine("Python version: " + sys.version);
        }
    }
}
dynamic sys=PythonEngine.ImportModule("sys");

The last line should be changed to:

dynamic sys=Py.Import("sys")

woaidianqian avatar Jun 21 '23 05:06 woaidianqian

and that solves it?

henon avatar Jun 21 '23 09:06 henon

There is no error when the program automatically downloads python, and if you want to set the python version by yourself, it is still not solved

woaidianqian avatar Jun 21 '23 13:06 woaidianqian

I guess the newer version of pythonnet doesn't work with old python versions any more?

henon avatar Jun 21 '23 13:06 henon