0、背景

Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,使用其开发产品快速高效。

python的解释特性是将py编译为独有的二进制编码pyc文件,然后对pyc中的指令进行解释执行,但是pyc的反编译却非常简单,可直接反编译为源码,当需要将产品发布到外部环境的时候,源码的保护尤为重要。

基于以上原因,本文将介绍如何将python源码编译pyc,编译成动态链接库.so文件,以及自定义python模块如何打包发布,以便用pip安装自己的python模块。

1、python源码编译至pyc文件

使用python的py_compile模块实现python源码编译pyc。

这里举一个简单的例子:在demo文件夹下有一个demo.py,需要将demo.py编译.pyc。

demo.py内容如下:


def print_hello():print('hello')

在demo文件夹下新建setup.py,内容如下:


import py_compilepy_compile.compile(r'demo.py',r'demo.pyc')

在shell执行:


cd demopython setup.py

在demo文件夹下,就会生成demo.pyc文件。

2、python源码编译.so文件

Python源码编译至.so文件的思路是先将py转换为c代码,然后编译c为so文件。

所需编译环境:

python安装:cython

pip install cython

linux 安装:python-devel,gcc

yum install python-develyum install gcc

同样举上述例子:在demo文件夹下有一个demo.py,需要将demo.py编译.so。

demo.py内容如下:


def print_hello():print('hello')

在demo文件夹下新建setup.py,内容如下:


from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules = cythonize(["demo.py"]))

在shell执行:


cd demopython setup.py build_ext

在demo文件夹下,就会生成demo.c文件,同时在demo文件夹下生成build文件夹,在build文件夹下包含生成的.so文件。

3、自定义python模块打包发布

将自定义python模块打包发布有两种,一种是将python源码打包发布,一种是将python源码转换至动态链接库.so文件打包发布。下面介绍一下这两种打包方式。

A)、使用python源码打包

同样使用上述例子:在demo文件夹下有一个demo.py,需要将demo.py打包。

在demo文件夹下新建setup.py,内容如下:

from distutils.core import setupsetup(name = ‘demo’,version = '1.0',py_modules = ['demo'],)

在shell执行:

cd demopython setup.py bdist_wheel

在demo文件夹下,生成dist文件夹,dist文件夹中包含了生成的python模块。

B)、使用python源码编译成.so打包

使用上述例子:在demo文件夹下有一个demo.py,需要将demo.py打包。

首先将python源码转换为c代码:

在demo文件夹下新建generateC.py,内容如下:


from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules = cythonize(["demo.py"]))

然后将c代码编译打包,过程如下:

在demo文件夹下新建generateWHL.py,内容如下:


from setuptools import setupfrom setuptools.dist import Distributionfrom distutils.core import Extensionsetup(name = 'demo',version = '1.0',ext_modules = [Extension("demo",['demo.c'])],)

将上述两个文件执行,如下:在demo文件夹下新建setup.py,内容如下:


import oscmd1 = "python generateC.py build_ext"os.system(cmd1)cmd2 = "python generateWHL.py bdist_wheel"os.system(cmd2)

在shell执行:


cd demopython setup.py

在demo文件夹下,生成dist文件夹,dist文件夹中包含了生成的python模块。

C)、安装卸载

可以使用pip直接安装和卸载生成的python模块。

4、其他

本文主要是针对python源码编译打包做了简单介绍,使用了最简单的例子。对于复杂的情况,比如打包时需要额外的数据文件,依赖包等等,需要具体查看setuptools模块的相关内容。

python编译.so文件相关推荐

  1. python编译exe文件太大了_python编译windows下可执行的exe文件

    python编译windows下可执行的exe文件的操作流程: 1.在安装python环境的windows下,安装 pyinstaller,请在dos下执行如下命令: pip install pyin ...

  2. python编译py文件为pyc文件

    python py编译pyc方法和运行导入pyc 1.编译文件 编译py文件为pyc文件: import py_compile py_compile.compile('./test.py') 结果会在 ...

  3. python编译pyc文件

    什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的 ...

  4. python 利用pyinstaller 编译.exe文件过程中编写完的.exe文件执行过程中闪退

    问题描述: python 利用pyinstaller 编译.exe文件过程中编写完的.exe文件执行过程中闪退,并提示no module named 'pyproj.datadir' 解决方法: 闪退 ...

  5. gcc编译c文件 python.h 未找到

    windows 下默认路径找不到python.h gcc -c -I d:/ProLang/python379/include parser.c -o parser.so 加上文件路径就可以了. GC ...

  6. python反编译加密文件_python打包的二进制文件反编译

    简介 Pyhton是一个脚本语言,在运行Python代码时,最终由Python解释器来执行.解释器就是Python的运行环境,但是除了开发人员,大部分人在使用时并不会安装Python.所以官方就提供了 ...

  7. python将py文件编译成二进制文件 加密

    其实很简单, 用 python -m py_compile file.py python -m py_compile /root/src/{file1,file2}.py 编译成pyc文件. 也可以写 ...

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

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

  9. python文件输出exe文件反汇编_python 反编译exe文件为py文件的实例代码

    我们用pyinstaller把朋友文件打包成exe文件,但有时候我们需要还原,我们可以用pyinstxtractor.py 用法: python pyinstxtractor.py xxx.exe 之 ...

最新文章

  1. 基于octree的空间划分及搜索操作
  2. 如何把pdf转换为txt文档,pdf转txt的好方法
  3. qoq是什么意思的缩写_“yjgj他的pyq很zqsg”,90后从未觉得自己老,直到看到00后缩写的那一秒……...
  4. javamail 解码 base64 html格式邮件_python使用QQ邮箱实现自动发送邮件
  5. python中提取几列_Python一键提取PDF中的表格到Excel(实例50)
  6. idea base64encoder没有jar包_老师,免费版的IDEA为啥不能使用Tomcat?
  7. java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能
  8. python内存管理错误的是_Python内存管理机制
  9. 如何进行手机web远程调试——chrome beta
  10. matlab 输出一行字,MATLAB输出结果的格式设置
  11. 诗词大全给力版_思维导图 | 6种高效记忆法,教你速背古诗词!
  12. ICTCLAS 汉语词性标注
  13. VMware虚拟机转换为kvm虚拟机
  14. 工业相机的曝光时间和帧率的关系
  15. Python调用腾讯API实现人脸检测
  16. Matplotlib 配色表
  17. 在附近小程序中展示你的小程序-微信小程序开发-视频教程21
  18. 6pen Art - AI绘画平台
  19. JTopo添加动态连线
  20. SQL Server视频总结(一):SQL Server概述

热门文章

  1. 如何查软件版本Linux,如何查看软件名称和版本号
  2. linux 卸载 bison,linux下的bison报错,
  3. 007.UG_NX工程图功能
  4. 奇迹服务器gs无响应,奇迹仲夏端GS困顿参数设置
  5. Chrom浏览器安装Axure扩展插件
  6. Activiti流程执行历史数据查询
  7. 弟中弟的Leetcode总结——数组类(五)
  8. 虚拟机和主机相互ping不通方法总结
  9. Samtec科普 | 用于手术设备的连接器
  10. 误删电脑文件怎么恢复