利用pyinstaller打包加密Python项目

摘要:
最近,我用Python为媳妇写了两个小项目,以解决她每天重复的手动操作。然后我们有了pyinstaller的经验。第一步是安装pyinstaller模块,这非常简单。您可以直接使用管道安装程序。打开终端,输入hello所在的目录。找到py,并执行pyinstaller Hello py代码目录结构如下:1.将终端作为规范文件打开,进入bin目录,执行pyinstaller-Drun.py。之后,构建、dist目录并运行。将自动生成规范文件。

  最近用Python给媳妇写了两个小项目,给解决了她的每天重复的一些人工操作。媳妇很开心,但是问题来了,她是个Python小白,对她来说,需要安装配置Python环境和一大堆第三方模块是个麻烦事儿。而且后续把这些工作交接给别人的话,一是又需要重新安装Python环境,二是我辛苦给她写的源码就这样暴露了。

  为了解决这个问题,于是就开始百度。果然Python还是有好多中加密源码的方法,并且可能打包成exe的可执行文件。这样不仅保护了源码的安全,还免去了安装Python环境的繁琐。

最开始试了是py2exe这个模块,花了两个小时,还是没倒腾成功,百度查了说py2exe不是很好用,我也果断放弃了,尝试别的方法。然后就有了pyinstaller的经历。百度上有不少文档,但还是得自己去真正操作一遍才行。那我们就开始吧。

  首先是安装pyinstaller模块,这个很简单,直接pip install pyinstaller就行了。我们就重点讲讲怎么用吧。先从最简单的开始。。。。

  写个简单的脚本holle.py,为什么要在脚本的最后加上了time.splee(5)?因为生成的exe文件执行太特么快了,我都没看见打印了什么就自动关闭docs窗口了。

利用pyinstaller打包加密Python项目第1张利用pyinstaller打包加密Python项目第2张
# -*- coding: utf-8 -*-
#2019/12/25 14:24

import time
print('#######################################################################################')
print('#######################################################################################')
with open('123.txt','r') as f:
    ret = f.read()
    print(ret)

print('#######################################################################################')
print('#######################################################################################')
print('#######################################################################################')
time.sleep(5)
hello.py

这里简单介绍一下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 来查看。

打开终端,进入到hello.py的所在目录,执行 pyinstaller -F hello.py。执行完会自动生成build、dist目录和hello.spec文件。

利用pyinstaller打包加密Python项目第3张

咱要的exe文件在dist目录下,其他的就没有用了。直接把dist目录下的 hello.exe文件拷贝到其他地方,比如桌面,哈哈。然后在桌面创建一个123.txt文件,随便写点什么。主要测试一下exe能否正常执行,有没有打印预期的内容。试了一下,不错。是预期的效果。那接下来就可以开始我们的正题了。打包多个目录下的多个py文件。

代码目录结构如下:

利用pyinstaller打包加密Python项目第4张

1、先生成spec文件

 打开Terminal,进入到bin目录下,执行pyinstaller -D run.py,还是一样执行完会自动生成build、dist目录和run.spec文件。让我们来看看spec文件长啥样。

利用pyinstaller打包加密Python项目第5张

 

 

 2、配置spec文件

因为项目里写了好多自定义的模块,以及应用的图片和模板文件。所以需要配置一下spec文件,才能正确的生成exe文件。

主要配置以下4个地方即可:

利用pyinstaller打包加密Python项目第6张

利用pyinstaller打包加密Python项目第7张利用pyinstaller打包加密Python项目第8张
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

SETUP_DIR = 'E:\python_test\python\lixiaoxin_barcode2'

a = Analysis(['run.py',
            'E:\python_test\python\lixiaoxin_barcode2\core\main.py',
            'E:\python_test\python\lixiaoxin_barcode2\conf\settings.py',
            'E:\python_test\python\lixiaoxin_barcode2\core\barcode_handler.py',
            'E:\python_test\python\lixiaoxin_barcode2\core\log.py'],
             pathex=[SETUP_DIR],
             binaries=[],
             datas=[(SETUP_DIR + '\db\input','db\input'),(SETUP_DIR + '\doc','doc')],
             hiddenimports=['core','core.main','conf.settings','core.log','core.barcode_handler'],
             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,
          [],
          exclude_binaries=True,
          name='run',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='run')
run.spec

(1) py文件打包配置

  针对多目录多文件的python项目,打包时候需要将所有相关的py文件输入到Analysis类里。Analysis类中的pathex定义了打包的主目录,对于在此目录下的py文件可以只写文件名不写路径。如上的spec脚本,将所有项目中的py文件路径以列表形式写入Analysis,这里为了说明混合使用了绝对路径和相对路径。

(2) 资源文件打包配置

  资源文件包括打包的python项目使用的相关文件,如图标文件,文本文件等。对于此类资源文件的打包需要设置Analysis的datas

比如:datas=[(SETUP_DIR + '\db\input','db\input'),(SETUP_DIR + '\doc','doc')],只需要添加依赖的输入目录以及放图片、模板的目录即可。
注意:SETUP_DIR + '\db\input'为源码中的绝对路径,Windows路径需要用\来转义,后面的db\input为打包后生成的目录,写相对路径即可。这样我们就不需要再手动把依赖的文件拷贝到run目录了

(3)Hidden import配置

  pyinstaller在进行打包时,会解析打包的python文件,自动寻找py源文件的依赖模块。但是pyinstaller解析模块时可能会遗漏某些模块(not visible to the analysis phase),造成打包后执行程序时出现类似No Module named xxx。这时我们就需要在Analysis下hiddenimports中加入遗漏的模块。
如:

from core.barcode_handler import *
from conf import settings as ss
from core.log import Log as log
只需要写入自定义的模块即可
hiddenimports=['core','core.main','conf.settings','core.log','core.barcode_handler']

3、配置好spec文件后,重新生成exe文件。

可以把之前生成的build和dist目录删除掉,只留刚配置好的run.spec文件就行。

最后打开Terminal,进入到bin目录下,执行pyinstaller -D run.spec,一样会生成build和dist目录,我们只要dist目录就行了。

利用pyinstaller打包加密Python项目第9张

 可以把dist目录拷贝到桌面测试一下。为了方便操作,可以创建一个run.exe和输入、出入目录的快捷方式放到根目录下,dist目录可以任意命名。

利用pyinstaller打包加密Python项目第10张

 执行一下看看效果:

利用pyinstaller打包加密Python项目第11张

 利用pyinstaller打包加密Python项目第12张

 不错,程序运行正常。

 最后总结起来就三步:

1、先执行pyinstaller xxx.py生成xxx.spec文件

2、配置xxx.spec文件

3、执行pyinstaller -D xxx.spec

最后:如果生成了exe文件,但是双击xx.exe执行没有效果,又看不到报错信息的话,可以在Terminal或者cmd里执行

利用pyinstaller打包加密Python项目第13张

 参考博客:https://blog.csdn.net/weixin_42052836/article/details/82315118

 

免责声明:文章转载自《利用pyinstaller打包加密Python项目》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mac上的聚焦搜索无法查找到应用C#解压、压缩RAR文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FileSystemWatcher用法详解

FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建、删除、改动、重命名等活动。可以动态地定义需要监控的文件类型及文件属性改动的类型。 1.常用的几个基本属性: (1) Path :设置要监视的目录的路径。 (2) IncludeSubdirectories :设置是否级联监视指定路径中的子目录。 (3) Filter :设置筛...

Ubuntu 18.04升级matplotlib 3.5

背景 需要使用到matplotlib 3.5的新特性决定升级搜索pip源发现python 3.6最高支持matplotlib 3.2而matplotlib 3.5仅适配python 3.7+ 安装 一定不要尝试卸载18.04自带python 3.6否则系统会崩溃 sudo apt install python3.8 依赖 安装3.8包管理工具 sudo...

wordpress学习二:源码目录结构和启动流程

wordpress安装后的文件目录如下: 其中的主要目录和文件用途介绍如下: wp-admin:用于进行博客后台设置的功能目录 wp-content: wordpress的 主题,插件和本地化的存储目录 wp-include: wordpress一些类和公共函数文件的存放目录。 根目录下的index.php是大部分wordpress功能的入口模块。 大概...

原创:python的requests.post()向后端传递数据,数组结构需将python数据结果转换成JSON

 针对采集来的数据,用requests.post()向后端传递 如果是python数据结构如数组,需要转换成为JSON对象,否则后端容易解析不成后端集合的对象结构 re 一:python做为前端请求requests.post() ''' 后台接收是数组 ''' dataInfoList = [...

curl perl python get请求带请求头

curl get请求带请求头: curl -H "Authorization: Token 9ec341da308a60047b72f9766b5b98d0d819562c" -H 'Accept: application/json; indent=4' http://http://192.168.137.1:8000/api2/accounts/...

python爬虫学习---爬取微软必应翻译(中英互译)

  前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:OSinooO        本人属于python新手,刚学习的 python爬虫基础迫不及待地想试一试,看了论坛里大佬们写的在线翻译爬虫程序,想着自己把它写出来,以下是我爬微软翻译的过程,作为笔记记录下来: 1.获取信...