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.
Перейти к файлу
ftreurni f20bcf6498 Fix so that Runtime.PyModuleType is retrieved via Python.dll (#904) (#929) 2019-08-02 12:21:48 +02:00
.github Fix paths in PULL_REQUEST_TEMPLATE.md 2017-01-22 04:08:13 -07:00
ci Added CoreCLR 2.0 build target. Compile issues fixed. (#519) 2017-09-21 14:47:52 +02:00
conda.recipe Bump all relevant versions to 2.4.0-rc2 2019-04-07 23:05:48 +02:00
demo WPF DynamicGrid python and XAML layout files (#280) 2017-03-23 10:45:27 -07:00
src Fix so that Runtime.PyModuleType is retrieved via Python.dll (#904) (#929) 2019-08-02 12:21:48 +02:00
tools Update geninterop.py 2018-08-15 13:05:18 -05:00
.bumpversion.cfg Bump version: 2.3.0.→ 2.4.0.dev0 2017-03-11 08:07:06 -07:00
.editorconfig improve tests.pyproj for intellisense and running tests (#395) 2017-02-24 14:15:40 -07:00
.gitignore Update .gitignore 2019-02-25 17:14:45 +01:00
.mention-bot Update .mention-bot 2017-03-28 13:11:36 -05:00
.travis.yml Simplify travis config and pin mono to 5.20 (#927) 2019-08-01 17:04:07 +02:00
AUTHORS.md Fix so that Runtime.PyModuleType is retrieved via Python.dll (#904) (#929) 2019-08-02 12:21:48 +02:00
CHANGELOG.md Fix so that Runtime.PyModuleType is retrieved via Python.dll (#904) (#929) 2019-08-02 12:21:48 +02:00
CONTRIBUTING.md Clean-up README/CONTRIBUTING 2017-01-14 15:44:34 -07:00
LICENSE Update copyright year 2019-04-07 13:25:52 +02:00
NuGet.config Convert all line endings to Unix format 2018-11-15 14:14:29 +01:00
README.rst Add shield of conda-forge package to README (#877) 2019-06-01 15:31:47 +02:00
appveyor.yml Generate NuGet package during build (#875) 2019-06-03 21:16:51 +02:00
pythonnet.15.sln Added CoreCLR 2.0 build target. Compile issues fixed. (#519) 2017-09-21 14:47:52 +02:00
pythonnet.sln Revert changes to solution file 2018-11-15 16:12:25 +01:00
requirements.txt Add new requirement for memory leak testing 2018-07-20 17:11:18 +01:00
setup.cfg Add timing to detect slow tests on pytest 2017-03-04 19:51:18 -07:00
setup.py Safe wheel import (#905) 2019-07-03 23:36:44 +02:00
tox.ini Remove check-manifest 2017-02-14 04:55:04 -07:00

README.rst

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

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

|appveyor shield| |travis shield| |codecov shield|

|license shield| |pypi package version| |conda-forge version| |python supported shield|
|stackexchange 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.

.. code-block::

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

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

.. code-block::

   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
~~~~~~~

.. code-block:: csharp

   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 = 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::

   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

.. |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
.. |appveyor shield| image:: https://img.shields.io/appveyor/ci/pythonnet/pythonnet/master.svg?label=AppVeyor
   :target: https://ci.appveyor.com/project/pythonnet/pythonnet/branch/master
.. |travis shield| image:: https://img.shields.io/travis/pythonnet/pythonnet/master.svg?label=Travis
   :target: https://travis-ci.org/pythonnet/pythonnet
.. |codecov shield| image:: https://img.shields.io/codecov/c/github/pythonnet/pythonnet/master.svg?label=Codecov
   :target: https://codecov.io/github/pythonnet/pythonnet
.. |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