- Notifications
You must be signed in to change notification settings - Fork750
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
pythonnet/pythonnet
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Python.NET is a package that gives Python programmers nearlyseamless integration with the .NET Common Language Runtime (CLR) andprovides a powerful application scripting tool for .NET developers. Itallows Python code to interact with the CLR, and may also be used toembed Python into a .NET application.
Python.NET allows CLR namespaces to be treated essentially as Python packages.
importclrfromSystemimportStringfromSystem.Collectionsimport*
To load an assembly, use theAddReference
function in theclr
module:
importclrclr.AddReference("System.Windows.Forms")fromSystem.Windows.FormsimportForm
By default, Mono will be used on Linux and macOS, .NET Framework on Windows. Fordetails on the loading of different runtimes, please refer to the documentation.
If .NET Core is installed in a default location or thedotnet
CLI tool is onthePATH
, loading it instead of the default (Mono/.NET Framework) runtimejust requires setting either the environment variablePYTHONNET_RUNTIME=coreclr
or callingpythonnet.load
explicitly:
frompythonnetimportloadload("coreclr")importclr
- You must set
Runtime.PythonDLL
property orPYTHONNET_PYDLL
environment variablestarting 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). - Then call
PythonEngine.Initialize()
. If you plan to use Python objects frommultiple threads, also callPythonEngine.BeginAllowThreads()
. - All calls to python should be inside a
using (Py.GIL()) {/* Your code here */}
block. - Import python modules using
dynamic mod = Py.Import("mod")
, thenyou can call functions as normal, egmod.func(args)
. - Use
mod.func(args, Py.kw("keywordargname", keywordargvalue))
ormod.func(args, keywordargname: keywordargvalue)
to apply keywordarguments. - All python objects should be declared as
dynamic
type. - Mathematical operations involving python and literal/managed typesmust have the python object first, eg.
np.pi * 2
works,2 * np.pi
doesn't.
staticvoidMain(string[]args){PythonEngine.Initialize();using(Py.GIL()){dynamicnp=Py.Import("numpy");Console.WriteLine(np.cos(np.pi*2));dynamicsin=np.sin;Console.WriteLine(sin(5));doublec=(double)(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.6752620892float64int32[6.10.12.]
Information on installation, FAQ, troubleshooting, debugging, andprojects 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.
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.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.