linux系统

1、py文件编译为pyc文件:具有一定的保密性,但有可能被反编译

pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。

pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的

https://blog.csdn.net/zylove2010/article/details/79593655

2、setup编译为whl格式第三方库:生成whl格式第三方库,可直接pip install 安装,但安装后,代码开源,不利于代码保护

https://www.cnblogs.com/wangbin2188/archive/2004/01/13/13967551.html

https://blog.csdn.net/orangefly0214/article/details/81462245?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control

3、pyinstaller打包生成dist文件夹:代码保护极好,但打包内容过多,臃肿

本次又个需求,在ubuntu上面开发的python代码程序需要打包成一个可执行程序然后交付给甲方,因为不能直接给源码给甲方,所以寻找方法将python开发的源码打包成一个可执行程序,注意是打包成在ubuntu上面的可执行程序,不是打包成在window上的可执行程序,如果需要打包成windows上的可执行程序请参照此博客,链接:windows下打包python源码成可执行文件

本次在ubuntu上打包python源码的方法和在window上打包的有点类似,大概流程如下:

1.在ubuntu上安装easy_install

#sudo apt-get install python-setuptools python-dev build-essential

2.下载并安装pyinstaller

在网址下载pyisntaller的包,地址:http://www.pyinstaller.org/,下载对应的tar包

假设下载下来的包是:pyinstaller_2.1.tar.gz

然后使用命令解压包:#tar -cf pyinstaller_2.1.tar.gz

进入解压后的目录:#cd pyinstaller_2.1

最后执行命令安装pyinstaller:#sudo python setup.py install

如果中间没有报错的话,pyinstaller就安装完成了。

PyInstaller 不仅支持 -F、-D 选项,而且也支持如表 1 所示的常用选项。

表 1 PyInstaller 支持的常用选项
-h,--help 查看该模块的帮助信息
-F,-onefile 产生单个的可执行文件
-D,--onedir 产生一个目录(包含多个文件)作为可执行程序
-a,--ascii 不包含 Unicode 字符集支持
-d,--debug 产生 debug 版本的可执行文件
-w,--windowed,--noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,--nowindowed,--console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,--out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,--name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

在表 1 中列出的只是 PyInstaller 模块所支持的常用选项,如果需要了解 PyInstaller 选项的详细信息,则可通过 pyinstaller -h 来查看。

3.打包python项目源码

假如说你的python源码的结构目录如下:

total 16
drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 config
drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 database
-rw-rw-r-- 1 jelly jelly    2 Mar 14 15:13 main.py
-rw-rw-r-- 1 jelly jelly    3 Mar 14 15:13 manager.py
图中可以看到有两个文件夹,两个py源码文件,mian.py是主函数文件

然后,我们使用命令打包源码

#pyinstaller -F main.py

然后就会生成如下目录

total 28
drwxrwxr-x 3 jelly jelly 4096 Mar 14 15:18 build
drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 config
drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:13 database
drwxrwxr-x 2 jelly jelly 4096 Mar 14 15:18 dist
-rw-rw-r-- 1 jelly jelly    2 Mar 14 15:13 main.py
-rw-rw-r-- 1 jelly jelly  813 Mar 14 15:18 main.spec
-rw-rw-r-- 1 jelly jelly    3 Mar 14 15:13 manager.py

图中dist文件夹下面就是生成的可执行文件,可以使用命令./main执行生成的可执行文件

但是此时你会发现有问题,因为这个打包的方法它只会打包当前目录下的所有py文件,而不会打包config和database这两个文件夹,所以此时的可执行文件打包的并不完整,此时该怎么做呢,咱们接着来

4.重新打包

重新打包的的意思是需要修改那个main.spec文件,然后再使用这个文件进行打包,操作流程如下

打开main.spec文件,修改前如下内容

# -*- mode: python ; coding: utf-8 -*-block_cipher = None
a = Analysis(['main.py'],pathex=['/home/jelly/test'],binaries=[],datas=[],hiddenimports=[],hookspath=[],runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,cipher=block_cipher)
exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='main',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,runtime_tmpdir=None,console=True )

修改后的main.spec文件内容如下:

# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],pathex=['/home/jelly/test'],binaries=[],datas=[],hiddenimports=[],hookspath=[],runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)dict_database = Tree('/home/jelly/test/database',prefix='database')
a.datas += dict_database
dict_config = Tree('/home/jelly/test/config',prefix='config')
a.datas += dict_configpyz = PYZ(a.pure, a.zipped_data,cipher=block_cipher)
exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='main',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,runtime_tmpdir=None,console=True )

可以看到,中间添加了添加两个文件夹的绝对路径,是和这个路径相对应的

pathex=['/home/jelly/test'],

这个路径是之前工具自己生成的,所以我们添加的两个目录的绝对路径也和它保持一致,这个修改完成后久可以了

5.编译生成

安装第4步的修改完成后,再执行命令

#pyinstaller mian.spec

即可,这样打包的程序就包含了两个依赖的文件夹了

其实最后感觉和在window上面打包生成window上的可执行文件的流程差不多,工具也都是用的pyinstaller打包。

4、(强烈建议)打包为so文件:

代码保护极好,只能知道输入输出;
 1)第一种只给.so文件到另一平台,但需要和本地编译环境一直,本地是python3.7,那此.so文件也只能在python3.7环境中运行;

2)给中间结果.c文件,让其在自己平台上编译,运行python setup.py build_ext编译,只需要在setup.py中将py文件修改为.c文件即可。

https://zhuanlan.zhihu.com/p/265462717

python文件打包相关推荐

  1. python 打包exe_将python文件打包exe独立运行程序方法详解

    首先需要安装pyinstaller库. pip install pyinstaller exe程序打包步骤 cmd 进入要编译的python文件所在的文件夹, 然后 pyinstaller -F he ...

  2. 【干货】Python文件打包 .exe文件反编译

    一.Python文件 打包 成 .exe 可执行文件 第一步:安装pyinstaller 首先安装pyinstall,使用命令:pip3 install pyinstaller,当然有可能报错,如下图 ...

  3. python文件打包成之pyinstaller使用

    在日常开发工程中,难免会需要将自己的code转化到另一台机器上运行,这时候你可能涉及到需要将python编写的脚本编译成一个系统可执行文件,这时候就需要借助pyinstall来实现.pyinstall ...

  4. python文件打包技术免费教程

    需求:如何把python文件转化为像电脑软件一样可执行的程序? 技术:这就需要运用到python文件打包技术了.将python文件打包成exe文件,可以在电脑直接运行,也方便向小伙伴分享你的代码执行成 ...

  5. 如何将一个python文件打包成一个可执行的小程序

    如何将一个Python文件打包成一个可执行的小程序 一.安装pyinstaller pyinstaller: 一个用来打包python的py文件的库,通过他可以将.py文件打包成可执行的.exe文件 ...

  6. python文件打包成方法

    python文件打包成 .exe 文件(windows下) 因为需要Pyinstaller 模块,所以需要先在 doc 黑窗口 命令提示符 下输入 pip install Pyinstaller 安装 ...

  7. 将Python文件打包成exe文件(超详细)

    首先,我们为什么要把Python文件打包成exe文件? 因为,Python文件需要Python IDE打开 而exe,就是一个程序,双击就开了! 岂不是妙哉? 基础准备 首先,打开终端,我们要下载打包 ...

  8. 如何将python文件打包成exe格式

    文章目录 如何将python文件打包成exe格式 1.安装pyinstaller image-20211217220823007 2.进入python文件的存储位置 3.生成exe文件 4.pyins ...

  9. python文件封装成jar_【Python】Python文件打包为可执行文件

    之前写的用于创建.链接Jenkins slave脚本是使用Python实现的,为了使未安装Python环境的伙伴也可以直接使用,故需要将其可直接执行的exe可执行文件. 一.安装pyinsatller ...

  10. python打包成二进制文件_pyinstall python文件打包成二进制exe文件

    pycharm + python3 + win7 1 pip install pyinstall  (官网) 2 准备 .py 文件 3 具体例子 from PyQt5.QtWidgets impor ...

最新文章

  1. 对抗性攻击的原理简介
  2. 网络爬虫--26.Scrapy中下载器中间件Downloader Middlewares的使用
  3. mongodb创建local库用户_mongodb用户与角色使用
  4. python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆
  5. 在windows下编译d-nets
  6. Druid 配置及内置监控,Web页面查看监控内容 【我改】
  7. cp210x驱动运行不了怎么解决_【问题】解决Android8.0以上运行不了uiautomatorviewer的办法...
  8. UItextInput-Protocol
  9. 基金公司产品管理系统搭建与推广
  10. netcore读取json文件_NetCore 对Json文件的读写操作
  11. python apkg,Python 自动加固APK
  12. c语言 long int最大数,long整型的最大值跟处理器位数有关
  13. 圆柱直齿轮设计程序-vb
  14. 服务器pe安装win7系统安装教程,win7pe装系统步骤详解
  15. 简易留言薄系统-ASP.NET MVC(Model层)
  16. CentOS下Qt安装
  17. 什么是sku转载网上,备忘一个业务知识
  18. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
  19. 计算机思维生活中的应用,计算思维研究论文_计算思维的应用_论文:计算机思维在生活中的应用...
  20. 关于音箱的鉴别与选择

热门文章

  1. lpk提权-----dll注入
  2. 怎么找生物信息论文的数据,PubMed太有用了!
  3. 数据挖掘-K-近邻算法
  4. 关于如何将java桌面程序打包成exe可执行文件
  5. 互联网快讯:华为5G实现全网规模化商用;极米年货节多款产品持续热销;三星显示器公司6月停产LCD
  6. 手机 app GDPR 合规的9个关键步骤
  7. 游戏辅助制作核心--植物大战僵尸逆向之天上下钻石(五)
  8. 企鹅号绑定微信公众号 问题 微信授权失败!输入的微信号和微信公众平台设置的不一致
  9. 0ra-12170 tns 连接超时
  10. 基于劈窗算法的地表温度反演算法