将python打包成.so文件
原文https://zhuanlan.zhihu.com/p/265462717
1 首先为什么要将python打包成so文件
Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,使用其开发产品快速高效。python的解释特性是将py编译为独有的二进制编码pyc文件,然后对pyc中的指令进行解释执行,但是pyc的反编译却非常简单,可直接反编译为源码,当需要将产品发布到外部环境的时候,源码的保护尤为重要.因此需要将python文件打成so文件的目的就是为了保护源码。
2 下面就来实战如何将py文件打成so文件
(1) 准备工作:
首先需要安装如下相关包
python 安装:cython
pip install cython
linux 安装:python-devel,gcc
ubuntu版linux:
apt-get install python-devel
apt-get install gcc
(2) 新建一个待编译文件hello.py以及setup.py,
hello.py内容如下
def greet(str):return "hello " + str
setup.py内容如下
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["hello.py"]))
然后执行如下打包命令
python setup.py build_ext
执行完该命令后的会有什么变化呢?
首先会在同级目录下生成hello.c的文件以及一个build文件夹目录,在build文件夹目录里面存放着编译好的.so文件。
接下来来测试一下这个生成.so文件,首先写一个测试文件demo.py(和hello.py同一级目录)
from hello import greet
print(greet("tom"))
然后用命令python demo.py执行一下,结果是hello tom,一点都不意外,有同学就问,你这就测试完了吗。当然没有啊
其实真正测试之前,我们应该先将hello.py这个文件删除或者改一下名字,不然我们怎么知道
from hello import greet这条命令中的hello模块是hello.py文件还是对应生成的.so文件呢
接下来我将hello.py 删了,将打包编译生成的.so文件从build文件夹中移出来,移到与demo.py同一级目录。
接下来再去测试,当然结果仍然返回的是hello tom。这就说明hello模块是来源于我们的.so文件中。
其实还有一个问题,就是上面测试的是打包一个.so文件,如果有许多个.py文件需要我们打包编译,是不是要重复的编写多个setup.py文件,答案是肯定不需要!!!接下来我就说一下如何同时打包多个.py文件
(3)如何同时打包多个py文件
上面打包1个.py(hello.py)文件的命令如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["hello.py"]))
现在如果我们有hello1.py,hello2.py,hello3.py,同时想将这么多个.py文件打包成.so文件,这时候我们就可以这样做,命令如下
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize(["hello1.py", "hello2.py","hello3.py"]))
其实不管你有多少个.py文件,统一写到cythonize里面就行了。
将python打包成.so文件相关推荐
- 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)
本文主要向大家介绍了Python语言实现翻译小工具(Python打包成exe文件),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.环境 windows10 python3.5 ...
- python打包成.exe文件时出现“系统找不到指定路径”
python打包成.exe文件时出现"系统找不到指定路径" 我在一开始写工程时就想到最后打包的时候可能会出现文件位置会发生移动,所以并没有使用绝对路径,而都是以相对路径写的程序. ...
- python如何将图片打包进exe里_史上最详细的Python打包成exe文件教程
打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白.情人节浪漫的必需品! 1.使用豆瓣镜像源下载: pyinstaller 有需要了解如何使 ...
- Python打包成exe文件_详细操作
Python打包成exe文件 前言 一.安装pyinstaller 1.1 安装pyinstaller,使用安装命令: 1.2 如果遇到需要更新版本请输入: 1.3 检查是否正确安装 1.4 稍等,水 ...
- Tips--解决Python打包成exe文件大启动慢的问题
解决Python打包成exe文件大启动慢的问题 1. 问题描述 2. 产生原因 2. 解决方法 2.1 建立虚拟环境 2.2 安装所需库 2.3 在环境中打包 2.4 附pyinstaller参数表 ...
- python打包成exe文件提示PermissionError: [Errno 13] Permission denied: ‘C:\\Users\\wj\\AppData\\Local\\Progr
用python写了个脚本给业务部门用,考虑业务部分使用环境问题给打包成exe文件.在打包时提示PermissionError: [Errno 13] Permission denied: 'C:\\U ...
- python打包成exe文件大、执行慢_Pyinstaller打包exe太大,运行太慢
1.背景 通过python使用pyqt编写了一个界面程序,并使用pyinstaller将其打包成exe文件 2.问题 打包的exe文件非常大,有280M,而且更无法忍受的是打开非常非常的慢!!! 3. ...
- 将python打包成exe文件(携带附属文件)
前言 用Pyinstaller进行打包exe时,有时候得附带上一些资源,提高程序的实用性和人性化. 在网上也有很多把依赖文件打包进exe的方法,不过都只能打包一些图片或者文本而已. 另一种方法是通过修 ...
- 解决 Python打包成exe 文件过大问题的一些方法
前言 之前有做过Python的pyqt桌面应用,当时每次更新打包的时候整个文件下来都需要300~400M,但是一直没有找到合适的方法解决,而是尽量Python少安抓库包,但效果一般,最近找到了解决方法 ...
- Python打包成.exe文件详细实例
目录标题 安装pyinstaller 打包文件成exe程序 (下面举个栗子) 已知python环境配置后 安装pyinstaller pip install pyinstaller 查看是否安装成功 ...
最新文章
- 华为 鸿蒙只是物联网,“鸿蒙”不只是手机系统,任正非:是为物联网所打造的系统...
- leetcode 25. Reverse Nodes in k-Group | 25. K 个一组翻转链表(Java)
- 为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?
- 支持HTTP2的cURL——基于Alpine的最小化Docker镜像
- YAPI返回值怎么是html页面,Yapi部署
- 循环日程表递归法c语言,分治与递归——循环赛日程表
- MySql的详细安装与配置步骤
- 图片转PDF怎么转换?快学习这三种免费转换方法!
- javaScript有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量。
- openpyxl超详细笔记
- sip测试工具--Sipp的编译
- TexturePacker图集拆分
- idea试用许可证过期的问题
- 【外行也能看懂的RabbitMQ系列(一)】—— RabbitMQ快速入门篇(内含丰富实例)
- 微吼2022企业直播创见大会:探寻直播行业星辰大海
- python获取小时和分钟_Python:以小时,分钟和秒为单位读取文本文件;和度数,弧分和弧秒...
- 基因调控网络及其模型
- 树和二叉树知识要点(期末必考)
- android语音备忘录编辑,android语音备忘录程序的设计与实现.pdf
- 将在2020年实现盈利的12个基于AI和ML的Top应用创意
热门文章
- [转载]Android开发新浪微博客户端 完整攻略 [新手必读]
- delphi7在windows server 2003企业版上不能打开项目的选项(Options)窗口的解决方法...
- 第一部分 第五章 数组 1102-1149
- 巧妙的响应式:深入理解Vue 3的响应式机制
- element中的table相关
- git学习笔记-(11-git存储)
- c++ map是有序还是无序的_C++无序关联容器(一)-使用场合和常用函数
- div在html中的好处,详解DIV+CSS布局的好处和意义
- Docker error : no space left on device docker 空间不足
- java 文件夹不存在则创建_java判断文件不存在就创建的方法