把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文件相关推荐

  1. python文件编译为so_Mac上把python源文件编译成so文件

    把python源文件编译成so文件 前言 实际上属于一种代码混淆/加密的技术,大家知道python的源文件放在那里,大家是都可以看的,不像C语言编译出来可以拿编译后的东西去运行,所以就出现了这种需求. ...

  2. python编程1-win7上运行python

    在win7上运行python,打开cmd,直接***.py即可,前面不用加python,

  3. windows安装python虚拟环境_windows上安装python虚拟环境

    一.windows上安装python虚拟环境 1.安装 pip install virtualenv virtualenv --version 2.新建一个python虚拟环境virtual_env_ ...

  4. python调用linuxapi_Linux上使用python调用WPS二次开发接口

    原文链接Linux上使用python调用WPS二次开发接口 - C++ Programer​www.cryfeifei.cn 环境Ubuntu18.04 WPS For Linux Python3 简 ...

  5. python文件图标变成小电脑_手把手教你给Python程序写图形界面,并且打包成exe文件-exe文件...

    环境配置 官网下载Python3,LZ的配置环境是Python3.6,PyCharm 2017.2.1pip3 install PyQt5 #下载PyQt5 pip install PyQt5-too ...

  6. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  7. python中webdriver_Linux上部署python+selenium+webdriver常见问题解决方案

    折腾了几天的WechatScraper终于部署到Linux服务器上能生产使用了 用篇文章来记录下部署过程中遇到的各种bug和坑. 1. 运行问题 webdriver在有GUI界面的系统上运行是只需要下 ...

  8. notepad python设置_NotePad++上配置Python

    1.安装好python以及notepad++ 2.打开notepad++点击"运行"菜单->"运行"按钮(或者直接按F5) 在弹出的窗口内输入以下命令(命 ...

  9. pip工具可以打包python源代码吗_将python源文件打包成exe文件

    pyinstaller 库的使用 PyInstaller是一个十分有用的第三方库,它能够在Windows.Linux.Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包,Py ...

最新文章

  1. 厉害了,为了干掉 HTTP ,Spring团队又开源 nohttp 项目!
  2. Cisco 路由配置语句汇总
  3. 8天学通MongoDB——第五天 主从复制
  4. 在Python中用turtle函数画同心圆
  5. Druid 配置_StatViewServlet配置
  6. java学习(86):Interage方法compareto,parseint,intvalue
  7. 数据结构-排序基础代码
  8. 计算机外围设备哪两类,《微机原理与接口技术》课后习题答案
  9. asp.net面试的概念知识
  10. python 持续集成_使用jenkins和Gitlab进行Python项目的持续集成
  11. 做老板必须要有正气和底气,所谓正气就是身正不怕影子斜
  12. 性能测试中容易混淆的概念
  13. 【算法学习】【图像增强】【Retinex】White Patch Retinex
  14. java池模式_JAVA模式 对象池 简要代码示例
  15. 一段java代码_写了一段Java代码,希望大家多多指点
  16. sap中re凭证是什么意思_SAP财务模块内有哪些凭证类型
  17. 充电器电压和电池电压关系
  18. 一个月怎么赚到5万块?
  19. Vue引用第三方动画库animate.css
  20. (精讲)UVA - 1339 Ancient Cipher 刘汝佳紫书题单(算法竞赛入门经典)

热门文章

  1. 2020 及以后的八大最显著技术趋势!
  2. 网易回应裁撤生病员工;苹果押宝 5G 手机;IntelliJ IDEA 2019.3 RC 发布 | 极客头条...
  3. 万字长文详解如何用 Python 玩转 OpenGL | CSDN 博文精选
  4. JavaScript 大揭秘:React、性能优化以及多线程
  5. Fortinet推出集成化SD-WAN解决方案
  6. 零基础如何用 15 行 Python 代码搞定网易云热门歌单?
  7. 腾讯掌舵者马化腾,才是移动互联网的大功臣?
  8. 未来五年,iOS 开发如何前行?
  9. 程序员如何内外兼修?
  10. @工程师,怎样才能让面试者一眼相中你?