python编译so_Mac上把python源文件编译成so文件
把python源文件编译成so文件
前言
实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求。原理相当于将python编译成c,然后再转成.so文件
.so文件为动态连结库,可以在程序运行时动态链接,类似于windows的dll文件。
在网上搜了一下,常用的有2种方法:
通过gcc(make)来操作
使用python来操作
准备工作
在目录下创建__init__.py和hello.py
hello.py 内容为:
def hello():
print "hello"
使用python来操作
安装所需库CPython,命令如下:
pip install cython
创建文件setup.py,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("hello.py")
)
执行setup.py文件
python setup.py build_ext --inplace
在当前目录下就生成了和当前目录同名的一个目录,进入目录即可看见so文件,打开so文件可见一些乱码,达到了加密的目的
使用gcc来编译
编译成c文件,完成后目录下多了hello.c
cython hello.py
编译成hello.o, 完成后目录下多了hello.o
gcc -c -fPIC -I/usr/include/python2.7/ hello.c
编译成so文件
gcc -undefined dynamic_lookup -shared hello.o -o hello.so
部分博客写的命令没有加-undefined dynamic_lookup的参数,会报错,提示
Undefined symbols for architecture x86_64
参考https://github.com/cloudwu/skynet_sample/issues/9 加上那个参数就好了
也有说加-lstdc++参数使用c++标准库就可以的,但是我尝试了不成功,依然报同样的错误
gcc -lstdc++ -v -shared hello.o -o hello.so
验证
在so文件目录下,进入python终端,然后尝试使用一下这个模块就可以了,如下:
>>> from hello import hello
>>> hello()
hello
参考
python编译so_Mac上把python源文件编译成so文件相关推荐
- python文件编译为so_Mac上把python源文件编译成so文件
把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...
- python编程1-win7上运行python
在win7上运行python,打开cmd,直接***.py即可,前面不用加python,
- windows安装python虚拟环境_windows上安装python虚拟环境
一.windows上安装python虚拟环境 1.安装 pip install virtualenv virtualenv --version 2.新建一个python虚拟环境virtual_env_ ...
- python调用linuxapi_Linux上使用python调用WPS二次开发接口
原文链接Linux上使用python调用WPS二次开发接口 - C++ Programerwww.cryfeifei.cn 环境Ubuntu18.04 WPS For Linux Python3 简 ...
- python文件图标变成小电脑_手把手教你给Python程序写图形界面,并且打包成exe文件-exe文件...
环境配置 官网下载Python3,LZ的配置环境是Python3.6,PyCharm 2017.2.1pip3 install PyQt5 #下载PyQt5 pip install PyQt5-too ...
- python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件
1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...
- python中webdriver_Linux上部署python+selenium+webdriver常见问题解决方案
折腾了几天的WechatScraper终于部署到Linux服务器上能生产使用了 用篇文章来记录下部署过程中遇到的各种bug和坑. 1. 运行问题 webdriver在有GUI界面的系统上运行是只需要下 ...
- notepad python设置_NotePad++上配置Python
1.安装好python以及notepad++ 2.打开notepad++点击"运行"菜单->"运行"按钮(或者直接按F5) 在弹出的窗口内输入以下命令(命 ...
- pip工具可以打包python源代码吗_将python源文件打包成exe文件
pyinstaller 库的使用 PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Py ...
最新文章
- 厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
- Cisco 路由配置语句汇总
- 8天学通MongoDB——第五天 主从复制
- 在Python中用turtle函数画同心圆
- Druid 配置_StatViewServlet配置
- java学习(86):Interage方法compareto,parseint,intvalue
- 数据结构-排序基础代码
- 计算机外围设备哪两类,《微机原理与接口技术》课后习题答案
- asp.net面试的概念知识
- python 持续集成_使用jenkins和Gitlab进行Python项目的持续集成
- 做老板必须要有正气和底气,所谓正气就是身正不怕影子斜
- 性能测试中容易混淆的概念
- 【算法学习】【图像增强】【Retinex】White Patch Retinex
- java池模式_JAVA模式 对象池 简要代码示例
- 一段java代码_写了一段Java代码,希望大家多多指点
- sap中re凭证是什么意思_SAP财务模块内有哪些凭证类型
- 充电器电压和电池电压关系
- 一个月怎么赚到5万块?
- Vue引用第三方动画库animate.css
- (精讲)UVA - 1339 Ancient Cipher 刘汝佳紫书题单(算法竞赛入门经典)
热门文章
- 2020 及以后的八大最显著技术趋势!
- 网易回应裁撤生病员工;苹果押宝 5G 手机;IntelliJ IDEA 2019.3 RC 发布 | 极客头条...
- 万字长文详解如何用 Python 玩转 OpenGL | CSDN 博文精选
- JavaScript 大揭秘:React、性能优化以及多线程
- Fortinet推出集成化SD-WAN解决方案
- 零基础如何用 15 行 Python 代码搞定网易云热门歌单?
- 腾讯掌舵者马化腾,才是移动互联网的大功臣?
- 未来五年,iOS 开发如何前行?
- 程序员如何内外兼修?
- @工程师,怎样才能让面试者一眼相中你?