- Notifications
You must be signed in to change notification settings - Fork748
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.
Note
The master branch of this repository tracks the ongoing development of version 3.0.Backports of patches to 2.5 are tracked in thebackports-2.5 branch.
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
- 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.