标签:xxx 有用 创建 混合 小白 自己 def 人工 使用
最近用Python给媳妇写了两个小项目,给解决了她的每天重复的一些人工操作。媳妇很开心,但是问题来了,她是个Python小白,对她来说,需要安装配置Python环境和一大堆第三方模块是个麻烦事儿。而且后续把这些工作交接给别人的话,一是又需要重新安装Python环境,二是我辛苦给她写的源码就这样暴露了。
为了解决这个问题,于是就开始百度。果然Python还是有好多中加密源码的方法,并且可能打包成exe的可执行文件。这样不仅保护了源码的安全,还免去了安装Python环境的繁琐。
最开始试了是py2exe这个模块,花了两个小时,还是没倒腾成功,百度查了说py2exe不是很好用,我也果断放弃了,尝试别的方法。然后就有了pyinstaller的经历。百度上有不少文档,但还是得自己去真正操作一遍才行。那我们就开始吧。
首先是安装pyinstaller模块,这个很简单,直接pip install pyinstaller就行了。我们就重点讲讲怎么用吧。先从最简单的开始。。。。
写个简单的脚本holle.py,为什么要在脚本的最后加上了time.splee(5)?因为生成的exe文件执行太特么快了,我都没看见打印了什么就自动关闭docs窗口了。
# -*- 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)
这里简单介绍一下pyinstaller的两个参数使用:
参数:-D生成一个文件目录包含可执行文件和相关动态链接库和资源文件等;-F仅生成一个可执行exe文件。
-D, --onedir Create a one-folder bundle containing an executable (default)
-F, --onefile Create a one-file bundled executable。
打开终端,进入到hello.py的所在目录,执行 pyinstaller -F hello.py。执行完会自动生成build、dist目录和hello.spec文件。
咱要的exe文件在dist目录下,其他的就没有用了。直接把dist目录下的 hello.exe文件拷贝到其他地方,比如桌面,哈哈。然后在桌面创建一个123.txt文件,随便写点什么。主要测试一下exe能否正常执行,有没有打印预期的内容。试了一下,不错。是预期的效果。那接下来就可以开始我们的正题了。打包多个目录下的多个py文件。
代码目录结构如下:
1、先生成spec文件
打开Terminal,进入到bin目录下,执行pyinstaller -D run.py,还是一样执行完会自动生成build、dist目录和run.spec文件。让我们来看看spec文件长啥样。
2、配置spec文件
因为项目里写了好多自定义的模块,以及图片模板文件。所以需要配置一下spec文件,才能正确的生成exe文件。
主要配置以下4个地方即可:
(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‘]
利用pyinstaller打包Python项目包含多个文件夹
标签:xxx 有用 创建 混合 小白 自己 def 人工 使用
原文地址:https://www.cnblogs.com/hulk-1029/p/12106630.html