From f8336b6b3c26ea89b9a17a9892a56bf4eece67a1 Mon Sep 17 00:00:00 2001 From: Victor Nova Date: Thu, 14 Oct 2021 20:21:33 -0700 Subject: [PATCH] include README.md into NuGet package as suggested in https://devblogs.microsoft.com/nuget/add-a-readme-to-your-nuget-package/ implements https://github.com/pythonnet/pythonnet/issues/1598 --- src/runtime/Python.Runtime.csproj | 2 + src/runtime/README.md | 75 +++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/runtime/README.md diff --git a/src/runtime/Python.Runtime.csproj b/src/runtime/Python.Runtime.csproj index 5a8c35f49..587408edd 100644 --- a/src/runtime/Python.Runtime.csproj +++ b/src/runtime/Python.Runtime.csproj @@ -14,6 +14,7 @@ python-clear.png https://raw.githubusercontent.com/pythonnet/pythonnet/master/src/console/python-clear.ico https://pythonnet.github.io/ + README.md true Python and CLR (.NET and Mono) cross-platform language interop @@ -37,6 +38,7 @@ + diff --git a/src/runtime/README.md b/src/runtime/README.md new file mode 100644 index 000000000..ab75280ed --- /dev/null +++ b/src/runtime/README.md @@ -0,0 +1,75 @@ +`pythonnet` is a package that gives .NET programmers ability to +integrate Python engine and use Python libraries. + +## Embedding Python in .NET + +- You must set `Runtime.PythonDLL` property or `PYTHONNET_PYDLL` environment variable, + 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 *nix). Full path may be required. +- 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)`. + You can also access Python objects via `PyObject` and dervied types + instead of using `dynamic`. +- Use `mod.func(args, Py.kw("keywordargname", keywordargvalue))` or + `mod.func(args, keywordargname: keywordargvalue)` to apply keyword + arguments. +- 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 + +```csharp +using var _ = 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 { 1, 2, 3 }); +Console.WriteLine(a.dtype); + +dynamic b = np.array(new List { 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.] +``` + + + +## 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).