Cpython编译后再使用Pyinstaller打包

一、Cpython

Python是一门解释型语言,当我们想让其他人运行我们的代码时,如果直接将.py源代码发送给他人,那么源代码将没有任何安全性可言,也就是任何一个人都可以打开源代码一看究竟,任何人都可以随意修改源代码。

而为了防止源代码泄露,可以将Python源代码编译生成.pyd库文件或者.so库文件:Windows平台生成pyd文件,Linux生成so文件。

1.1 Python有以下几种类型的文件

py:Python控制台程序的源代码文件
pyw:Python带用户界面的源代码文件
pyx:Python包源文件
pyc:Python字节码文件(可通过逆向编译来得到源码)
pyo:Python优化后的字节码文件(可通过逆向编译来得到源码)
pyd:在Windows平台上Python的库文件(Python版DLL)
so:在Linux平台上Python的库文件是so文件

1.2 使用Cpython编译项目步骤

example:
hello.py

def say_hello():
    print("Hello!")

1.2.1 安装Cpython

pip3 install Cython

1.2.2 编写转换文件

setup.py

from setuptools import setup
from Cython.Build import cythonize


# python3 setup.py build_ext --inplace


# 所有需要编译的py文件
all_py_file = ['hello.py']

setup(
    name="hello",
    ext_modules=cythonize(all_py_file),
    version="1.0",
    author="Leo",
    author_email="LeoLi.Li@groupm.com"
)
1.2.3 执行转换生成so文件

进入目录
在这里插入图片描述

执行:python3 setup.py build_ext --inplace
在这里插入图片描述
在这里插入图片描述

1.2.4 测试编译好的so文件

将py文件等相关编译文件删除
在这里插入图片描述

测试是否可以正常导入并使用hello.py的函数
在这里插入图片描述

1. 3yd/so文件反编译?

pyd/so文件是由 Cython首先把python源码翻译成了 .c文件(这个过程基本不可逆),再把这个.c文件编译成了pyd/so文件。

二、 Pyinstaller

pyinstaller是一个第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。

Pyinstaller打包的可执行文件并不是跨平台的,而是希望在哪个平台上运行就需要在哪个平台上进行打包。

安装pyinstaller:

python3 -m pip install --no-cache-dir pyinstaller -i https://mirrors.aliyun.com/pypi/simple/;

2.1 使用pyinstaller打包 py文件

项目目录
在这里插入图片描述

main.py

from hello import say_hello


if __name__ == '__main__':
say_hello()


打包

pyinstaller  --name say_hello --onedir --log-level WARN --strip --paths /leo/gme/pyinstaller_demo --distpath /leo/gme/pyinstaller_demo/package /leo/gme/pyinstaller_demo/main.py

执行打包后的可执行文件:
在这里插入图片描述

2.2 使用pyinstaller打包 Cpython编译后的so

Cpython可以将py编译成so文件,将编译好的so文件以原来的工程组织形式(module)存放好,注意module下要有非编译的__init__.py, 工程的main.py也不要编译

pyinstaller的打包过程会从main.py走一遍所有调用的module,并打包进去,但是编译好的pyd不会被识别import,这就是为什么要保留原来module的__init__.py, 对于这些已经编译为so的module,属于隐式import,需要在打包时加入–hidden-import

项目目录
在这里插入图片描述

main.py

from hello import say_hello


if __name__ == '__main__':
    say_hello()


打包

pyinstaller   --hidden-import "hello" --name say_hello --onedir  --log-level WARN   --strip --paths /leo/gme/pyinstaller_demo --distpath /leo/gme/pyinstaller_demo/package   /leo/gme/pyinstaller_demo/main.py

执行打包后的可执行文件:
在这里插入图片描述

_internal 依赖的是so文件:
在这里插入图片描述

三、参考资料

Cpython编译:https://www.cnblogs.com/gcgc/p/16529975.html
Pyinstaller介绍:https://blog.csdn.net/weixin_45953322/article/details/128774685
Pyinstaller打包so文件 https://blog.csdn.net/weixin_39916966/article/details/130781599

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/192531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单片机学习2——流水灯的实现

#include<reg52.h>sbit LED P1^0; unsigned char i;void main() {while(1){LED 0;for(i0;i<100;i);LED 1;for(i0;i<100;i);} } RST是复位按钮&#xff0c;单击一下之后&#xff0c;程序就会跑到最开始的位置运行。 右侧的按钮是RUN按钮&#xff0c;单击下&…

【版本管理 | Git 】Git最佳实践系列(一) —— LFS .gitignore 最佳实践,确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

动态规划学习——等差子序列问题

目录 一&#xff0c;最长等差子序列 1.题目 2.题目接口 3.解题思路及其代码 二&#xff0c;等差序列的划分——子序列 1.题目 2.题目接口 3.解题思路及其代码 一&#xff0c;最长等差子序列 1.题目 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度…

功率整流器的作用是什么?SURS8340T3G车规级功率整流器的介绍

汽车级功率整流器是一种用于汽车电子系统的功率电子器件&#xff0c;用于将交流电转换为直流电以供电子设备使用。汽车级功率整流器需要具有高效率、高可靠性、高稳定性和高温度工作能力等特点。其中&#xff0c;SURS8340T3G 是一种常见的汽车级功率整流器。 SURS8340T3G 是一…

SparkDesk知识库 + ChuanhuChatGPT前端 = 实现轻量化知识库问答

上一篇 讯飞星火知识库文档问答Web API的使用&#xff08;二&#xff09; 把星火知识库搞明白了&#xff1b; 然后又花了时间学习了一下gradio的一些基础内容: 在Gradio实现两个下拉框进行联动案例解读&#xff1a;change/click/input实践&#xff08;三&#xff09; 在Gradio实…

快速了解软件工程学概述(5种软件过程模型)

目录 1 、什么是软件&#xff1f;特点有哪些 &#xff1f; 2 、 软件危机 定义&#xff1a; 软件危机产生的原因 消除软件危机的方法 3 、软件工程 1.软件工程的介绍 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;本质特征 (3)软件工程方法学&#xff08;方…

优思学院|如何在企业中实施降本增效策略,实现财务突破

在当今竞争激烈的商业环境中&#xff0c;企业降低成本并提高效益变得至关重要。本文将深入探讨如何降本增效&#xff0c;以及实施这些策略的方法。 提到降本增效或提升生产效率&#xff0c;第一个被提出来检讨的一定是直接部门。但是如果无视于日渐臃肿的间接部门&#xff0c;…

全程云OA SQL注入漏洞复现

0x01 产品简介 全程云OA为企业提供日常办公管理、公文管理、工作请示、汇报、档案、知识体系、预算控制等26个功能&#xff0c;超过100多个子模块。为企业内部提供高效、畅通的信息渠道&#xff0c;同时也能大力推动公司信息系统发展&#xff0c;提高企业的办公自动化程度和综合…

SAS Planet软件介绍与使用教程

软件情况 SAS Planet是一位俄罗斯爱好者创建的的开源应用&#xff0c;该应用可以浏览与下载主流网络地图&#xff0c;包括Google地图、Google地球、Bing地图、Esri 地图、Yandex地图等。 该软件是基于Pascal开发的应用&#xff0c;目前已在github上开源&#xff0c;并使用了GP…

哈希表、哈希冲突解决办法

文章目录 一、什么是哈希表&#xff1f;二、什么是哈希冲突&#xff1f;怎样解决&#xff1f;三、哈希表的大小为什么是质数&#xff1f;四、链表法五、开放地址法线性探测法平方探测法双哈希(Double Hashing) 六、哈希表满了怎么办&#xff1f;七、完美哈希八、一些使用哈希解…

Java抽象类和接口(2)

&#x1f435;本篇文章继续对接口相关知识进行讲解 一、排序 1.1 给一个对象数组排序&#xff1a; class Student {public String name;public int age;public Student(String name, int age) {this.name name;this.age age;}public String toString() {return "name:…

爆肝整理! Python 网络爬虫 + 数据分析 + 机器学习教程来了

前段时间&#xff0c;有小伙伴多次在后台留言询问 Python 爬虫教程的问题。经过这两个多月以来的收集与整理&#xff0c;汇集了多个高校以及公开课视频教程&#xff0c;包括 python 爬虫的入门、进阶与实践&#xff0c;共 9G 左右。爬虫作为机器学习语料库构建的主要方式&#…

Python中的sys模块详解

1. 简介 sys模块是Python标准库中的一个内置模块&#xff0c;提供了与Python解释器和运行环境相关的功能。它包含了一些与系统操作和交互相关的函数和变量&#xff0c;可以用于获取命令行参数、控制程序的执行、管理模块和包、处理异常等。 2. 常用函数和变量 2.1 命令行参数…

虹科Pico汽车示波器 | 汽车免拆检修 | 2016款东风悦达起亚K5车发动机怠速抖动严重、加速无力

一、故障现象 一辆2016款东风悦达起亚K5车&#xff0c;搭载G4FJ发动机&#xff0c;累计行驶里程约为8.2万km。该车发动机怠速抖动严重、加速无力&#xff0c;同时发动机故障灯异常点亮&#xff0c;为此在其他维修厂更换了所有点火线圈和火花塞&#xff0c;故障依旧&#xff0c;…

自驾游汽车托运是交智商税吗?

自驾游汽车托运是交智商税吗? 亲爱的小伙伴们 你们有没有遇到过这样的困扰&#xff1a; 自驾游时&#xff0c;车辆的运输问题让你头疼不已? 是选择自己驾驶还是托运呢? 今天&#xff0c;我就来给大家种草一下汽车托运的好处&#xff0c; 让你的自驾游之旅更加轻松愉快! 1️.…

idea spring initializr创建项目报错

闲来无事就想搞个项目练练手&#xff0c;没想到直接给我卡在项目创建上了&#xff0c;一个个问题最终迎刃而解。 1.上来就给我报了个maven的错 未解析的插件: ‘org.apache.maven.plugins:maven-resources-plugin:3.3.1’ 不慌&#xff0c;应该是maven的路径有问题&#xff0c…

本地Nginx服务搭建结合内网穿透实现多个Windows Web站点公网访问

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

Flask WTForms 表单插件的使用

在Web应用中&#xff0c;表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能&#xff0c;简化了表单的处理流程。与此同时&#xff0c;Flask的扩展Flask-WTF更进一步地整合了WTForms&#xff0c;为开发者提供了更便捷、灵活的表单处理方式…

Linux(9):正规表示法与文件格式化处理

简单的说&#xff0c;正规表示法就是处理字符串的方法&#xff0c;他是以行为单位来进行字符串的处理行为&#xff0c;正规表示法透过一些特殊符号的辅助&#xff0c;可以让使用者轻易的达到【搜寻/删除/取代】某特定字符串的处理程序。 正规表示法基本上是一种【表示法】&…

【运营思维】美团面试题:如何把梳子卖给寺庙和尚?

Hello 小米的小伙伴们~ 欢迎来到小米的微信公众号&#xff01;今天小米要和大家分享一道美团运营面试题&#xff0c;题目可真是独特——“如何把梳子卖给寺庙和尚&#xff1f;”想必大家一定兴奋不已吧&#xff01; 首先&#xff0c;让我们理清思路&#xff0c;挑战这个看似不…
最新文章