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.
Перейти к файлу
Félix Bourbonnais 0cc7069e55 adjustment to make the tests pass
latest clr_loader version breaks the python tests otherwise
2023-05-26 11:56:10 -04:00
.github Allow configuring .NET runtimes via environment variables 2022-06-24 07:11:55 +02:00
demo Fix remaining issues with wordpad demo 2022-06-09 07:14:16 +02:00
pythonnet docs: Fix a few typos 2022-07-18 11:35:34 -04:00
src got rid of a few deprecation warnings that pollute GitHub code review 2022-07-18 11:35:34 -04:00
tests docs: Fix a few typos 2022-07-18 11:35:34 -04:00
tools/geninterop Replace clr module by loading through clr_loader 2021-02-13 13:36:53 +01:00
.editorconfig detect the size of wchar_t (aka Runtime.UCS) at runtime using PyUnicode_GetMax 2020-11-30 09:50:27 -08:00
.gitignore Performance tests with baseline from Pypi (#1667) 2022-01-08 16:07:55 -08:00
.mention-bot Update .mention-bot 2017-03-28 13:11:36 -05:00
AUTHORS.md allow Python not passing fake arguments for out parameters (#1672) 2022-01-13 18:55:42 -08:00
CHANGELOG.md implemented dynamic equality and inequality for PyObject instances 2022-07-05 21:35:59 +02:00
CONTRIBUTING.md Add link to Code of Conduct 2020-05-17 22:19:01 +02:00
Directory.Build.props Ensure that version.txt is always read from repo root 2022-07-18 11:35:34 -04:00
LICENSE monthly NuGet release previews (#1381) 2021-02-12 22:36:08 +01:00
MANIFEST.in Make MANIFEST.in more explicit 2022-07-06 08:52:42 +02:00
README.rst Add necessary `Initialize()` call to the README 2022-05-31 14:47:29 +02:00
clr.py Replace clr module by loading through clr_loader 2021-02-13 13:36:53 +01:00
pyproject.toml adjustment to make the tests pass 2023-05-26 11:56:10 -04:00
pythonnet.sln do not attempt to manually delete derived class instances after TypeManager is terminated and Python is shutting down 2022-04-07 15:55:58 -07:00
requirements.txt Drop vendored find_libpython 2022-06-14 08:56:02 +02:00
setup.py Move to modern setuptools with pyproject.toml (#1793) 2022-05-23 21:54:35 +02:00
version.txt Bump release candidate version 2022-07-16 12:08:59 +02:00

README.rst

pythonnet - Python.NET
===========================

|Join the chat at https://gitter.im/pythonnet/pythonnet| |stackexchange shield|

|gh shield|

|license shield|

|pypi package version| |conda-forge version| |python supported shield|

|nuget preview shield| |nuget release shield|

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 <https://github.com/pythonnet/pythonnet/tree/backports-2.5>`_.

Calling .NET code from Python
-----------------------------

Python.NET allows CLR namespaces to be treated essentially as Python packages.

.. code-block:: python

   import clr
   from System import String
   from System.Collections import *

To load an assembly, use the ``AddReference`` function in the ``clr``
module:

.. code-block:: python

   import clr
   clr.AddReference("System.Windows.Forms")
   from System.Windows.Forms import Form

Embedding Python in .NET
------------------------

-  You must set ``Runtime.PythonDLL`` property or ``PYTHONNET_PYDLL`` environment variable
   starting with version 3.0, otherwise you will receive ``BadPythonDllException``
   (internal, derived from ``MissingMethodException``) upon calling ``Initialize``.
   Typical values are ``python38.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, 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
~~~~~~~

.. code-block:: csharp

   static void Main(string[] args)
   {
       PythonEngine.Initialize();
       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:

.. code:: csharp

   1.0
   -0.958924274663
   -0.6752620892
   float64
   int32
   [  6.  10.  12.]



Resources
---------

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

.NET Foundation
---------------
This project is supported by the `.NET Foundation <https://dotnetfoundation.org>`_.

.. |Join the chat at https://gitter.im/pythonnet/pythonnet| image:: https://badges.gitter.im/pythonnet/pythonnet.svg
   :target: https://gitter.im/pythonnet/pythonnet?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
.. |license shield| image:: https://img.shields.io/badge/license-MIT-blue.svg?maxAge=3600
   :target: ./LICENSE
.. |pypi package version| image:: https://img.shields.io/pypi/v/pythonnet.svg
   :target: https://pypi.python.org/pypi/pythonnet
.. |python supported shield| image:: https://img.shields.io/pypi/pyversions/pythonnet.svg
   :target: https://pypi.python.org/pypi/pythonnet
.. |stackexchange shield| image:: https://img.shields.io/badge/StackOverflow-python.net-blue.svg
   :target: http://stackoverflow.com/questions/tagged/python.net
.. |conda-forge version| image:: https://img.shields.io/conda/vn/conda-forge/pythonnet.svg
   :target: https://anaconda.org/conda-forge/pythonnet
.. |nuget preview shield| image:: https://img.shields.io/nuget/vpre/pythonnet
   :target: https://www.nuget.org/packages/pythonnet/
.. |nuget release shield| image:: https://img.shields.io/nuget/v/pythonnet
   :target: https://www.nuget.org/packages/pythonnet/
.. |gh shield| image:: https://github.com/pythonnet/pythonnet/workflows/GitHub%20Actions/badge.svg
   :target: https://github.com/pythonnet/pythonnet/actions?query=branch%3Amaster