python 打包pyinstaller 问题记录

  • 打包报错:“failed to execute pyi_rth_pkgres”问题

  先卸载pyinstaller然后在从GitHub上下载安装 

  1. pip uninstall pyinstaller
  2.  pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

庄稼人不是专职python开发的道友。尽管与python相识已多年,可惜相识不相知,仅仅是偶尔借助pydev写一些简单的小工具。

多年来。一直困惑于这样一个问题:相同的project。相同的代码,使用pydev能够执行随意一个python脚本,而使用命令行执行却不行?命令行下(或者双击执行)总是提示“ImportError: No module named xxx”?pydev到底做了什么魔术呢?

 

长话短说,以上面project为例,假设是在命令行中直接执行 python c.py , 都会提示"ImportError: No module named xx_package.b".可是pydev中能够直接执行。

比較两者的包查找路径,也就是sys.path。

pythondev:

['F:\\Archive\\workspace-java\\PyExperiment\\xx_package', 'F:\\Archive\\workspace-java\\PyExperiment', 'F:\\Archive\\workspace-java\\PyExperiment\\xx_folder' 。。

。。]

命令行:

['F:\\Archive\\workspace-java\\PyExperiment\\xx_package', 。。。]

 

什么都不用说了,明眼人一看就明确了。pydev在执行时会把当前project的全部文件夹路径都作为包的搜索路径,而命令行默认仅仅是搜索当前路径。也于是乎。xx_package也就不可能会被找到。由于它是在上一级文件夹中。

 

明确了这一点,剩下的就非常easy了,要在命令行中运行c.py, 或者改动sys.path, 将上一级文件夹也包括进去。只是个人不喜欢。

比較简单的方式还是统一脚本的运行路径是project的根文件夹,即每次都在project根文件夹下新建一个脚本,比方叫main.py。

它什么也不做,仅仅是将c.py导入进来。仅此而已。

 

main.py

import xx_package.c

试试,这样就能够正常在命令行中执行了,当然双击脚本也是也一样的

参考:https://www.cnblogs.com/yjbjingcha/p/7040314.html

 

  • python生成exe文件运行闪退解决方法:

问题描述
最近写了个小项目,需要打包成exe文件运行,程序在Pycharm里面能够完美运行,可是,打包成Exe以后程序就会闪退,无法正常工作

解决方法
解决方法其实也比较简单,首先,需要说明的是,我写的程序需要调用外部文件,也就是配置文件,ini格式的,在源代码里面,我的程序调用配置文件用的是相对路径。问题也就出在这里。

这个是我打包之前的文件的结构,可以看到ini文件和其他py文件待在一起:

 

 

 接下来在当前目录文件夹里面打开cmd,输入pyinstaller -F test.py进行打包

打包以后的目录结构是这样的:

 

 

 打开dist文件夹,可以看到我们打包出来的exe文件:

 

 

 

 双击exe文件,发现程序闪退,没有正常工作(闪退,无法截图)

 接下来说解决方法,解决方法也很简单,正如刚才所说,我的程序调用了配置文件,而配置文件的调用路径是相对路径,程序里面写的是调用当前文件夹下的ini文件,那么,在exe所在的文件夹下面,运行exe程序,程序就会由于找不到配置文件,引起闪退的问题,解决方法很简单,将ini文件,放在和exe文件同一个文件夹下,就像下图:

 这样,再运行程序,你就会发现,程序能够正常运行啦!

 总结
综上,对于exe闪退的问题,大家可以适当考虑是否是因为文件路径的问题导致的
————————————————
版权声明:本文为CSDN博主「GodLordGee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/GodLordGee/java/article/details/82463997

posted @ 2020-07-06 13:42  乖乖楠  阅读(510)  评论(0编辑  收藏  举报