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

  最近用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 ssfrom core.log import Log as log只需要写入自定义的模块即可
hiddenimports=[‘core‘,‘core.main‘,‘conf.settings‘,‘core.log‘,‘core.barcode_handler‘]

原文地址:https://www.cnblogs.com/hulk-1029/p/12106630.html

时间: 2024-07-30 18:49:56

利用pyinstaller打包Python项目包含多个文件夹的相关文章

使用PyInstaller打包Python程序

使用PyInstaller打包Python程序 PyInstaller介绍: PyInstaller是一个能将Python程序转换成单个可执行文件的程序, 操作系统支持Windows, Linux, Mac OS X, Solaris和AIX.并且很多包都支持开箱即用,不依赖环境. 环境为windows7操作系统,python2.7.8 virtual environment 官网:https://github.com/pyinstaller/pyinstaller 详细步骤: 1. win7下

pyinstaller打包python源程序访问hive

1.需求 使用hvie server一段时间后,业务部门需要自己不定时的查询业务数据,之前这一块都是他们提需求我们来做,后来发现这样重复一样的工作放在我们这边做是在没有效率,遂提出给他们工具或者web UI自助查询,当然hive有自己的hwi可以通过网页UI进行自助查询,但是这对不懂sql的业务人员有点不太友好,目前有没时间去修改hwi的UI,所以还是给他们提供查询工具吧.我这边主要使用python thrift访问集群的hive,所以自然要将python源码打包成.exe,业务人员在windo

windows下Python打开包含中文路径名文件

windows使用gbx(gb2312,gbk,gb18030我也不知道是哪个)对文件名及文件路径进行编码保存.打开文件的函数中使用诸如open(filename.encode('gbk'))可以很好的解决. #coding:utf8 if __name__ == '__main__': srcfile = r"D:/测试路径/测试文件.txt" f = open(srcfile.decode('utf8').encode('gbk')) for text in f.readlines

C#项目,在controller文件夹右击鼠标没有“添加控制器”的问题

1.发现拷贝的项目,在controller文件夹右击鼠标不能没有“添加控制器”这一项,在控制器里面右键控制器名称也没有“添加视图”,这样就控制器和视图都要手写,开发效率低 . 2.原因是mvc包的问题,解决方法为:先卸载mvc包,再安装一次,再重启vs. 具体步骤: 1)在自己的web项目的“引用”上操作,如下图的“引用”,右击,点击”管理NuGet程序包“. 2)在弹出的如下界面,找到该项,点击“卸载”. 3)卸载完之后就安装这个. 4)一般的情况下,以上的步骤就可以完成了,重启一下项目后,问

Android ADT,SDK 更新后一个问题:新建项目layout和src文件夹为空

Android SDK和ADT更新到23.0.0后,结果问题出现了,在创建一个默认的blank activity后,发现layout和src文件夹为空,没有默认的框架文件,原来以为是安装出问题,删除重装,还是没有办法解决.今天发现两个文件又有更新包了,不知道是不是Android SDK的23.0.0版本和ADT的23.0.0版本本身导致的问题,不过更新到23.0.1后解决问题了. 解决方案: 步骤一:启动SDK Manager,按照提示把Android SDK tools更新至最新版本23.0.

eclipse如何把多个项目用不同的文件夹分隔开

我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入,非常的麻烦,但如果不删的话,就显得非常杂乱,找的也费劲,所以我们就可以把不同的项目用不同的文件夹分开. 首先看到我的eclipse里,有这些项目,两个maven项目就有八个工程,看得很杂乱. 首先我们点击上面的倒三角 里面有一个Top Level Elements选项 点击后,出现这三个选项,系统

Python封装一个函数接受文件夹的名称作为输入参数,打印该文件夹中的的全部路程信息(遍历路径)

Python时间简单的遍历文件夹路径,代码如下:import os def bianli(path):info = os.listdir(path)for v in info:p = os.path.join(path, v)print(p)if os.path.isdir(p):bianli(p)bianli('D:/重命名') 实现效果如下: 原文地址:http://blog.51cto.com/13241097/2115031

Python批量按顺序命名文件夹

1 """ Python批量按顺序命名文件夹 """ 2 import os 3 4 path1 = 'E:/侯俊龙数据/1' # 所需修改文件夹所在路径 5 dirs = os.listdir(path1) 6 7 i = 1 8 for dir in dirs: 9 print(dir) 10 os.rename(os.path.join(path1, dir), os.path.join(path1, str(dir[:3])+str(&q

利用pyinstaller将python脚本打包发布

之前写了一个小工具,将excel配置表转换为json.xml.lua等配置文件.最近在学习egret,正好需要转换配置文件,刚好就用上了.然而当我想把工具拷到工作目录时,就发愁了.之前我为了方便扩展,把程序拆分得太细: [email protected]:~/Documents/code/github/py_exceltools$ ls -lh 总用量 80K drwxrwxr-x 2 xzc xzc 4.0K 7月 27 23:03 bin drwxrwxr-x 2 xzc xzc 4.0K