Dev*_*per 21 python dll module compilation
好吧,我有一个Python包.我需要将它编译为dll,然后以易于导入的方式分发它.怎么样?你可能会建议*.pyc
.但我在某处读到任何*.pyc
可以轻易反编译的内容!
更新:
遵循以下:
1)我写了一个python包
2)想要分发它
3)不要分发源
4)*.pyc可以解压缩>>源码可以提取!
5)dll是标准的
Mr.*_*itt 17
现在有一个简单的解决方案:使用 Nuitka 编译器,如Nuitka 用户手册中所述
用例 2 - 扩展模块编译 如果您想编译单个扩展模块,您所要做的就是:
python -m nuitka --module some_module.py然后可以使用生成的文件 some_module.so 代替 some_module.py。
你需要为每个你想要支持的平台进行编译,并编写一些初始化代码来导入so/pyd文件~~适合给定的平台/python版本等~~
[编辑 2021-12]:实际上,在 python 3 中,正确的 so/dll 是根据文件名自动确定的(如果它包含 python 版本和平台 - 目前无法找到此功能的 PEP,但 Nuitka 为它创建了正确的名称)编译模块)。因此,对于python 2.7,库名称将是something.pyd或something.so,而对于python 3,这将更改为something.cp36-win32.pyd或something.cpython-36m-x86_64-linux-gnu.so(对于32位python 3.6在 x86 上)。
结果不是所要求的 DLL,而是 Python 原生编译的二进制格式(它不是像 pyc 文件中的字节码;so/pyd 格式不能轻易反编译 - Nuitka 通过 C++ 翻译编译为机器代码)
编辑[2020-01]:编译的模块易于使用python标准机制进行评估方法 - 例如,它可以作为任何其他模块导入并列出其方法等。为了确保实现不被暴露,还有更多的工作要做完成的不仅仅是编译成二进制模块。
在Cython中编写要隐藏的所有内容,并将其编译为pyd
.这就像你可以编写python代码一样接近.
另外,dll不是标准,不是Python世界.他们也不便携.
你可以在C里面嵌入python.真正的诀窍是在C值和Python值之间进行转换.但是,一旦你完成了这个,制作一个DLL 非常简单.
但是,为什么需要制作一个DLL?你需要在非python程序中使用它吗?
归档时间: |
|
查看次数: |
68303 次 |
最近记录: |