Skip to content

Python for .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.

License

Notifications You must be signed in to change notification settings

keinen-lab/pythonnet

Repository files navigation

pythonnet - Python for .NET

Join the chat at https://gitter.im/pythonnet/pythonnet

appveyor shieldtravis shieldcodecov shield

license shieldpypi package versionconda-forge versionpython supported shieldstackexchange shield

Python for .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.

Calling .NET code from Python

Python for .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 

Embedding Python in .NET

  • 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, eg mod.func(args).
  • Use mod.func(args, Py.kw("keywordargname", keywordargvalue)) or mod.func(args, keywordargname: keywordargvalue) to apply keyword arguments.
  • All python objects should be declared as dynamic type.
  • Mathematical operations involving python and literal/managed types must have the python object first, eg. np.pi * 2 works, 2 * np.pi doesn't.

Example

staticvoidMain(string[]args){using(Py.GIL()){dynamicnp=Py.Import("numpy");Console.WriteLine(np.cos(np.pi*2));dynamicsin=np.sin;Console.WriteLine(sin(5));doublec=np.cos(5)+sin(5);Console.WriteLine(c);dynamica=np.array(newList<float>{1,2,3});Console.WriteLine(a.dtype);dynamicb=np.array(newList<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

Python 3.8.0 support

Some features are disabled in Python 3.8.0 because of this bug in Python. The error is System.EntryPointNotFoundException : Unable to find an entry point named 'Py_CompileString' in DLL 'python38'. This will be fixed in Python 3.8.1.

Resources

Mailing list: https://mail.python.org/mailman/listinfo/pythondotnet Chat: https://gitter.im/pythonnet/pythonnet

About

Python for .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.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C#73.4%
  • Python24.5%
  • C1.2%
  • Other0.9%