最工作做中涉及到许多对外交互的工作,需要对外展示Python代码,考虑到会存在信息泄露的问题,部门内部决定对代码进行加密,最终决定将Python代码转化为.dll文件,但是查阅资料发现Python不能转为.dll文件,但可以通过Python工具转为.pyd(windows平台) or .so(linux平台),所以最终我们将代码准成了pyd格式,也就是Python中的.dll文件。
pip install easycython
Visual C++ build tools工具安装(参考此)
import Cython.Build
import distutils.core
def py2c(file):
cpy = Cython.Build.cythonize(file) # 返回distutils.extension.Extension对象列表
distutils.core.setup(
name='pyd的编译', # 包名称
version="1.0", # 包版本号
ext_modules=cpy, # 扩展模块
author="feng", # 作者
author_email='[email protected]' # 作者邮箱
)
if __name__ == '__main__':
file = "timetable_schedule_simulation_opt.py" # 需要转的py文件的名字(有时候可以写文件的绝对路径)
py2c(file)
该代码运行需要在命令行中执行
python test.py build_ext --inplace
LINK : fatal error LNK1158: cannot run 'rc.exe'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit code 1158
如果出现在问题,保证安装好Microsoft Visual C++ 14.0的情况下,可以在电脑中找到rc.exe和rcdll.dll这两个文件,复制到下面路径中
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
而rc.exe/rcdll.dll的位置可以参考这两个位置
C:\Program Files (x86)\Windows Kits\8.1\bin\x86
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86
至此,pyd文件就已经生成
import timetable_schedule_simulation_opt
timetable_schedule_simulation_opt.run()
完成整个流程的打通!