Pyinstaller 打包exe

  1. pyinstaller 打包多大
    我是利用Anaconda 把相应的文件放到Script pyinstaller -F -w xxx.py
    打包后的文件超级大,因为anaconda 把许多关联的库都打包进去了,所以我们必须
    找一个只有我们需要的包的环境,去掉不能用的库,故虚拟一个环境,然后安装上
    需要的库(当然要将不必要的库尽量减少)。
    1)安装pipenv pip install pipenv
    1. pipenv --python 3.7 指定python版本创建环境
      3)pipenv sheel 激活虚拟环境
      4)安装需要的库 pipenv install package
    2. 库安装的速度可能会比较慢 将下载的镜像设置为国内 Pipfile文件中[source]下面
      url属性,比如修改成:url = "https://pypi.tuna.tsinghua.edu.cn/simple"
    3. 然后打包就可以
    4. 启动exe chromedriver启动黑框的问题
      修改selenium包中的service.py(selenium->webdriver->common-

      service.py)源码
      打开这个文件,然后定位到75行(你源码中可能在76行或其他行):
      将stdin=PIPN,中添加creationflags=134217728

参考链接:https://www.jianshu.com/p/00af447f0005
https://blog.csdn.net/frostime/article/details/90523062
https://blog.csdn.net/La_vie_est_belle/article/details/81252588

  1. UI 无响应问题
    由于pyqt底层是C,主程序一直在刷新UI界面,所以在主程序中启动比较耗时的程序,界面就会出现假死的现象。处理的方法就是将耗时的程序另外启动一个线程就行操作。https://blog.csdn.net/hu694028833/article/details/80977302 这篇文章将的最好了。
    class Example(QThread): ##多线程
    signal = pyqtSignal() # 括号里填写信号传递的参数
    def init(self):
    super().init()
    def run(self):
    # 进行任务操作
    self.signal.emit() # 发射信号

UI类中

def buttonClick(self)
self.thread = Example()
self.thread.signal.connect(self.callback) ##这个就是在主要程序运行完成后,就 收到相应的信号后,执行的操作;这个是先定义的,不能放在start后,先把架子搭好
self.thread.start() # 启动线程,一定要用start ,不可以用run,这两个函数不能传递参数,所以需要在Example中通过self传递参数。
def callbakc(self):
pass

2019.8.2
事实证明,利用虚拟环境进行打包,尤其是在anaconda下简直是找罪受,而且pipenv安装的虚拟环境很不稳定经常报错,哎,最好的办法就是直接下载python 然后cd到script目录下利用pip进行包的安装,然后进行打包。
开始打包不确定是否会有问题,使用pyinstaller xxx.py进行打包,这样可以在控制窗口看见报错信息,然后再使用-F -w进行打包,血一样的教训。

你可能感兴趣的:(Pyinstaller 打包exe)