Python.NET is a package that gives Python programmers nearly seamless integration with the .NET Common Language Runtime (CLR) and provides a powerful application scripting tool for .NET developers. It allows Python code to interact with the CLR, and may also be used to embed Python into a .NET application.
Note
The master branch of this repository tracks the ongoing development of version 3.0. Backports of patches to 2.5 are tracked in the backports-2.5 branch.
Python.NET allows CLR namespaces to be treated essentially as Python packages.
import clr
from System import String
from System.Collections import *To load an assembly, use the AddReference function in the clr
module:
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form- You must set Runtime.PythonDLLproperty orPYTHONNET_PYDLLenvironment variable starting with version 3.0, otherwise you will receiveBadPythonDllException(internal, derived fromMissingMethodException) upon callingInitialize. Typical values arepython38.dll(Windows),libpython3.8.dylib(Mac),libpython3.8.so(most other Unix-like operating systems).
- All calls to python should be inside a
using (Py.GIL()) {/* Your code here */}block.
- Import python modules using dynamic mod = Py.Import("mod"), then you can call functions as normal, egmod.func(args).
- Use mod.func(args, Py.kw("keywordargname", keywordargvalue))ormod.func(args, keywordargname: keywordargvalue)to apply keyword arguments.
- All python objects should be declared as dynamictype.
- Mathematical operations involving python and literal/managed types
must have the python object first, eg. np.pi * 2works,2 * np.pidoesn't.
static void Main(string[] args)
{
    using (Py.GIL())
    {
        dynamic np = Py.Import("numpy");
        Console.WriteLine(np.cos(np.pi * 2));
        dynamic sin = np.sin;
        Console.WriteLine(sin(5));
        double c = (double)(np.cos(5) + sin(5));
        Console.WriteLine(c);
        dynamic a = np.array(new List<float> { 1, 2, 3 });
        Console.WriteLine(a.dtype);
        dynamic b = np.array(new List<float> { 6, 5, 4 }, dtype: np.int32);
        Console.WriteLine(b.dtype);
        Console.WriteLine(a * b);
        Console.ReadKey();
    }
}Output:
1.0
-0.958924274663
-0.6752620892
float64
int32
[  6.  10.  12.]Information on installation, FAQ, troubleshooting, debugging, and projects using pythonnet can be found in the Wiki:
https://github.com/pythonnet/pythonnet/wiki
- Mailing list
- https://mail.python.org/mailman/listinfo/pythondotnet
- Chat
- https://gitter.im/pythonnet/pythonnet
This project is supported by the .NET Foundation.