如何将我的 python 模块及其依赖项(例如 Numpy/Scipy 打包到一个文件中,例如用于 C# 调用的 dll?

How can I package my python module and its dependencies such as Numpy/Scipy into one file like dll for C# calls?

在我的项目中,部分算法是在python中实现的,作为调用的模块,使用了Numpy/Scipy等库。现在我需要将这些模块嵌入到我的 UI(由 C# 和 运行 在 Windows 7 中实现)。我需要将 python 模块打包成 DLL 之类的文件有两个原因(我不想打包为 .exe,因为它不便于嵌入)。第一个原因是方便调用,第二个原因是为了保护我的算法源代码。有人知道吗?

尝试使用 pythonnet 将 CPython 嵌入到 .NET 中:

python4.net

最后,我用nuitka解决了我的问题。它将我的模块编译成 .pyd 文件,我可以通过添加引用 Python.Runtime.dll 使用 pythonnet 导入模块。 我的编译命令是:nuitka --module --nofreeze-stdlib --recurse-all --recurse-not-to=numpy --recurse-not-to=sklearn --recurse-not-to=pywt --recurse-not-to=matplotlib --recurse-not-to=matplotlib.pyplot --recurse-not-to=scipy.io myfile.py 我的 C# 代码是:

PythonEngine.Initialize();
IntPtr pythonLock = PythonEngine.AcquireLock();
PythonEngine.RunSimpleString("import sys\n");
PythonEngine.RunSimpleString("sys.path.append('C:\path\to\pyd')\n");
PyObject pModule = PythonEngine.ImportModule("modulename");
pModule.InvokeMethod("funcitonname", para1, para2);