如何使用Python创建独立于语言的库?

blu*_*e13 12 python api

如果我在Python中创建一个包,那么另一个Python用户可以导入该包并与之接口.

如何创建一个包,以便其他用户调用该库的语言无关紧要?

我可以指定输入和输出文件格式,以便另一种语言可以通过仅提供输入文件和读取输出文件来与我的Python代码进行交互.但是,创建输入和输出文件在计算上非常昂贵.有更简单的解决方案吗?

Iai*_*can 7

如果你想让另一种语言能够直接使用你的库(不使用任何类型的远程服务或IPC的东西,这是一个完全不同的鱼),你需要为它编写语言绑定,这意味着他们调用了一个层用目标语言调用你的软件包.有许多工具包可用于创建它,但如果您希望能够从更高级别的脚本语言(如Python)调用C或C++库,通常会执行此类操作.例如,在C中存在SWIG项目,以帮助从Python,PHP,Ruby等中调用C.

这个页面将为您提供一堆介绍链接,说实话,这是一个很大而且很难的主题.我自己只用C到Python做过. https://wiki.python.org/moin/IntegratingPythonWithOtherLanguages


Mat*_*att 2

@bluprince13 没有这样的方法可以从每种语言调用库,至少在没有包装器代码的情况下不能直接调用。Windows 上的 COM 接口很接近,可以被大多数程序(例如 Excel、MATLAB、JAVA)导入,但编写起来非常痛苦。

当您说读/写是一项昂贵的操作时,您一定不能使用 Pandasread_csvto_csv函数 - 它们的实现速度非常快(C++)。二进制 HDF5 文件速度更快,尽管对于大多数用户来说它们更难使用http://pandas.pydata.org/pandas-docs/version/0.20/io.html read_hdfto_hdf,它受到多种语言的支持https:// en.wikipedia.org/wiki/Hierarchical_Data_Format。使用输入和输出文件将使您的程序更加可移植。

使用嵌入式 Python(已编译),您可以简单地使用您以它们的形式创建的任何 Python 函数.pyembedpython.exe在本文末尾的我的 DropBox 链接中,以及 zip 中的所有文件),这可能是您最好、最简单的,以及最快的路线 - 源代码/使用参考:嵌入式 Python 无法使用 NumPy 指向 Python35.zip - 如何修复?这是迄今为止使代码在任何系统上兼容的最简单方法,并且在 Python 脚本之间进行更改也很容易(当您调用不同的库时,整个包必须在子文件夹中可用)。在 Anaconda Python 安装中,文件将位于相应的已安装包文件夹中,通常是C:\Anaconda3\Lib\site-packages\ [packageName] \;典型的 Python 安装位于C:\Python\Lib\site-packages\ [packageName] \)。cd\否则,从安装 Python 的命令提示符中,dir /s site-packages将找到该位置。然后将每个包的整个安装目录放在“extension_modules”目录下。所以它看起来像extension_modules\numpy\extension_modules\pandas\和您正在导入的所有库(以及包所依赖的库)。

以下是如何使用 EXE 调用相应语言的一些示例: JAVA: Process process = new ProcessBuilder("C:\\PathToExe\\embedpython.exe","pyscript","pyfunction","input_param1","input_param2").start();MATLAB: system('"C:\PathToExe\embedpython.exe" pyscript pyfunction input_param1 input_param2'); VBA:Call Shell("C:\PathToExe\embedpython.exe" "pyscript" "pyfunction" "param1" "param2", vbNormalFocus)C++:如何带参数调用外部程序?.NET C#:如何将参数传递给 exe?正如您所看到的,这个列表一直在不断地增长……几乎任何语言都可以调用 EXE 文件。当然,您想要最大的性能,但为了获得所有语言的兼容性,您必须以某种方式做出妥协。但使用上述建议,只要.py功能得到优化,您的性能仍然会很好。

为了让每个人的生活更轻松,这里提供了编译版本 x64 Python 3.5 Windows NumPy SciPy 和 Pandas Intel MKL:https://www.dropbox.com/sh/2smbgen2i9ilf2e/AADI8A3pCAFU-EqNLTbOiUwJa ?dl=0

如果您是 Windows 用户,请下载上述内容并将您的.py脚本放入您想要分发的位置,以及 \extension_modules\ [package_name] 中的依赖库,您的代码将轻松运行。您没有指定是否要在 Linux 下使用,因此这是我针对您的“使用任何语言”问题的 Windows 解决方案,需要最少的其他编程语言知识。