码迷,mamicode.com
首页 > 编程语言 > 详细

利用pyinstaller打包Python项目包含多个文件夹

时间:2019-12-27 13:52:51      阅读:483      评论:0      收藏:0      [点我收藏+]

标签: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)
hello.py

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!