我正在用Python/capi进行一些测试,以了解它是如何工作的以及如何正确地使用它。我的目标是创建C++包装器,它允许我从C++代码运行Python脚本。 我不能使用外部bindind库(比如Boost.Python或者赛顿)。一切正常,除了一件事:现在,我正在使用PyImport_Import()加载脚本
PyObject* py_module = PyImport_Import(py_module_name); //imports *.py file
//do something, call functions, save results
PyDecRef(py_module);
然而,在发行版中,它们必须以专有的二进制格式分发,并在启动时加载到内存中。我在寻找一些如何实现这一点的提示-但没有结果。基本上,我需要这样做:
^{pr2}$史密欧能提供可能的解决方案吗?我考虑过这样使用编组功能:
FILE* file = fopen("scripts.bin", "wb");
PyMarshal_WriteObjectToFile(py_module, file, Py_MARSHAL_VERSION);
然而,这似乎行不通。事实上,我不确定哪些对象可以用这种方式进行编组,因为文档中没有任何关于它的说明。在
可选问题:我的二进制文件夹中有所有*.py文件。启动时,在PyImport_Import()之后,它们被简单地编译为/pycache中的字节码(.pyc)。我知道字节码文件(.pyc或*.pyo)可以使用compileall模块创建。是否可以使用此类文件的内容创建包含模块数据的PyObject?在
只发送.pyc文件可以接受吗?试试这样的方法:
看这个讨论。。。https://groups.google.com/forum/#!topic/comp.lang.python/zhIe_Aa2Ih8卡斯滕·海斯说:
如果不能使用包含.pyc文件的加密zip文件?(您需要在c++代码中对pwd进行编码)。在
我认为真正安全的东西真的很难(不可能?)如果你不信任客户。在
相关问题 更多 >
编程相关推荐