Pyinstaller的安装及简单使用
(1)安装:
用传统的pip install pyinstaller出错,在https://pypi.org/project/PyInstaller/#files上下载PyInstaller-3.4.tar.gz (3.5 MB),解压,cmd设置当前路径未,解压到的文件夹位置,dos上输入 python setup.py install。

当-d all时候,打开生成的可执行文件,会输出各种信息,比如调用的包有哪些,分别来自哪里(imports 选项)
- all: All three of the following options.
- imports: specify the -v option to the underlying Python interpreter, causing it to print a message each time a module is initialized, showing the place (filename or built-in module) from which it is loaded. See https://docs.python.org/3/using/cmdline.html#id4.
- bootloader: tell the bootloader to issue progress messages while initializing and starting the bundled app. Used to diagnose problems with missing imports.
- noarchive: instead of storing all frozen Python source files as an archive inside the resulting executable, store them as files in the resulting output directory
(2)使用注意事项:
(a)如果在源码中用相对路径调用图片文件或者图标文件,打包时会出现如下图的错误:

解决方法很简单,只需要在源码中,相对路径改为绝对路径,然后在打包时,再将绝对路径传入pyinstaller 命令即可。
举例说明,具体为:
(b)使用图片:
在源码中,使用绝对路径:
img1=PhotoImage(file=r'F:\FIELS\tkinGui\Example_pyinstaller\1.gif')
Button(win,image=img1).pack()
使用pyinstaller时,首先用cd将dos现在路径改为目标打包py文件的位置,然后 pyinstaller -w --add-data="F:\FIELS\tkinGui\Example_pyinstaller\1.gif;image" imgButton.py
即可。注意,这里--add-data="源地址;目标地址“,源地址为搜索文件的地址,这里使用绝对路径,";"为os.pathsep(平台路径分割符,window为;其他为:),目标地址必须填写image,是代码运行时候所在文件夹下的文件名“image”,详见https://pyinstaller.readthedocs.io/en/stable/usage.html。
(c)使用图标:
在源码中,使用绝对路径:
root=Tk()
root.title('BRN1.0')
root.resizable(0,0)
root.iconbitmap(r'F:\FIELS\tkinGui\BatchReName\BatchReName.ico')
pyinstaller 命令: pyinstaller -w -i="F:\FIELS\tkinGui\BatchReName\BatchReName.ico" BatchReName.py
(4)打包后,代码中的ico,及image搜索路径将依赖于.py文件中设定的路径,为了保证打包形成exe文件后,仍能找到用户电脑中的路径,.py文件中的路径最好设置成相对路径,再结合os.path.abspath形成用户电脑上的绝对路径。如:
ImagePath=r'.\image\BatchReName.ico'
def resource_path(relative_path):
"""
return absolute path
"""
if hasattr(sys,'_MEIPASS'):
base_path=sys._MEIPASS
else:
base_path=os.path.abspath('.')
return os.path.join(base_path,relative_path)
ImagePath=resource_path(ImagePath)
将imagepath从相对路径转化为用户电脑上的绝对路径。
(5)打包脚本后运行,提示vcruntime140.dll 未在指定的window上运行,
找了下,说是版本不同,或者upx压缩错误,然后就加了下 --noupx命令,打包完,软件大了一圈,不过再运行就没报错了。UPX一个免费的对各个操作系统可执行文件进行压缩的可执行打包器(https://upx.github.io/),PyInstaller looks for UPX on the execution path or the path specified with the --upx-dir option. If UPX exists, PyInstaller applies it to the final executable, unless the --noupx option was given. UPX has been used with PyInstaller output often, usually with no problems.
具体原因应该是安装的ups是64位的,然后压缩了32位的,导致报错了
参考文章链接:https://blog.csdn.net/jpch89/article/details/81183019
(6)打包时会出现问题Cannot find existing PyQt5 plugin directories,解决方法就是用everything搜索PyQt5,找到 /Library/plugins路径下的PyQt5文件夹,将里面的dll动态库pyqt5qmlplugin.dll复制出来
按照错误提示的路径,一个个的新建文件夹,形成目录C:\qt5b\qt_1524647842210_h_env\Library\plugins,将刚才复制出来的dll动态库拷贝进去即可。亲测有效。
————————————————
原文链接:https://blog.csdn.net/lixiaoyu101/article/details/84620336
(7)PyQt5打包后,自己电脑上运行可以,但拷贝到相同系统的其他电脑上,not find Qt platform plugin “windows”,全网找了半天,最后通过,将platform文件夹下的所有dll文件拷贝到跟exe文件一个目录下,成功运行。感谢博文https://blog.csdn.net/okfu_DL/article/details/84566545给我的灵感,不过跟它的方法不太一样,它是将整个platform文件夹拷贝到跟exe一个目录的,我试了下没成功。platform文件在python文件下,如E:\software\py\Lib\site-packages\PyQt5\Qt\plugins\platforms,注意这个platform应该是负责打包的解释器下的platform文件。
当本机解释器抛出not find platform警示框后,在环境变量中添加QT_QPA_PLATFORM_PLUGIN_PATH变量,值为,比如我的是C:\Users\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\plugins
(8)打包成功后,运行.exe报错: ModuleNotFoundError: No module named ’numpy.core.__dtype_ctypes’:
总结一下: 这些问题主要从GitHub上该项目的issue模块得到了解决方案(我们不是孤独的,大家都遇到了同样的问题)
可以通过两种方式得到解决:
将下述代码放到hook-numpy.core.py文件里(当然你需要把这个路径在命令行或者.spec中告诉pyinstaller)。

Pyinstaller的安装及简单使用的更多相关文章
- (转)python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- MongoDB在Windows下安装、Shell客户端的使用、Bson扩充的数据类型、MongoVUE可视化工具安装和简单使用、Robomongo可视化工具(2)
一.Windows 下载安装 1.去http://www.mongodb.org/downloads下载,mongodb默认安装在C:\Program Files\MongoDB目录下,到F:\Off ...
- python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- memcache的windows下的安装和简单使用
原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcach ...
- 【RabbitMQ】RabbitMQ在Windows的安装和简单的使用
版本说明 使用当前版本:3.5.4 安装与启动 在官网上下载其Server二进制安装包,在Windows上的安装时简单的,与一般软件没什么区别. 安装前会提示你,还需要安装Erlang,并打开下载页面 ...
- Thrift的安装和简单演示样例
本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例.对于具体的解说,后面在进行阐述. Thrift简述 ...
- libmemcached安装及简单例子
libmemcached安装及简单例子 1.下载安装libmemcached $ wget http://launchpad.net/libmemcached/1.0/0.44/+download/ ...
- [hadoop系列]Pig的安装和简单演示样例
inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...
- Redis 安装与简单示例
Redis 安装与简单示例 一.Redis的安装 Redis下载地址如下:https://github.com/dmajkic/redis/downloads 解压后根据自己机器的实际情况选择32位或 ...
随机推荐
- 还在用逆向工程?太Low了,试试通用Mapper吧!
什么是通用Mapper? 通用mapper 可以极大的方便开发人员进行ORM,提供极其方便的单表增删改查. 什么是通用mapper,一句话简单说,它就是个辅助mybatis极简单表开发的组件.它不是为 ...
- 三 基于Java数组手写循环队列
Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...
- 十六 Spring的JDBC模版入门,默认连接池
Spring是EE开发一站式框架,有EE开发的每层的解决方案,Spring对持久层也提供了解决方案:ORM模块和JDBC的模版
- win7/10获取本地wifi密码明文
win7 单击右下角无线网图标,选择已连接的无线网 右击无线网名称,选择属性 点击标题栏的安全,再点击显示字符,即可显示wifi密码明文 win10 控制面板[查看方式选类别]-查看网络状态和任务 点 ...
- Keras入门——(5)长短期记忆网络LSTM(二)
参考: https://blog.csdn.net/zwqjoy/article/details/80493341 https://blog.csdn.net/u012735708/article/d ...
- There is no Action mapped for action name hello.
- C# 篇基础知识1——编译、进制转换、内存单位、变量
编译:C#语言要经过两次编译,程序员编写好源代码后进行第一次编译,将源代码编译为微软中间语言(MSIL),生成可以发布的应用软件:当用户使用软件时,MSIL代码会在首次载入内存后进行第二次编译,中间语 ...
- VS 项目没有“添加引用”选项
出问题的环境:vs2017,unity2017unity创建工程后,vs打开项目后,无法添加引用dll,没有“添加引用”项原因: 需要把目标框架改为.
- extjs开发———用extJS简单写一个饼状图
先上效果图: js编写部分简单如下,先插入一个模块,然后给模块中添加内容. var myChart1 = echarts.init(document.getElementById('myChart1' ...
- 7.1 Varnish VCL
根据以上的配置增加集群,修改default.vcl # This ) # man page for details on VCL syntax and semantics. # # Default b ...