跳至內容

Python/打包為可執行程序

維基教科書,自由的教學讀本

在anaconda創建的一個的環境中,pyinstaller要安裝於此環境。在cmd中輸入如下,即可安裝成功

   activate <EnvironmentName>
   pip install pyinstaller

進入cmd,激活環境,並輸入:

   pyinstaller -F My_Program.py 

可能出現的問題及解決方案

[編輯]

出現UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 解決方案:預先在cmd中輸入 :

  chcp 65001  #使用code - 8

出現Cannot find existing PyQt5 plugin directories,往往後面還會跟有一個路徑。解決方案:

  (1)首先看自己的conda环境中有没有安装qyqt5,若安装有qyqt5,那就根据它的提示在c盘中新建这个路径,把qyqt5(python的Lib/site-package路径)中的内容都拷贝到该路径中。
  (2)如果(1)不行并且你的代码中没有用到pyqt5,就卸载pyqt5。(卸载pyqt5后spyder可能打不开...)
  (3)如果你的代码用到pyqt5,搜索。。

出現"RecursionError: maximum recursion depth exceeded"。解決方案:在.spec文件中添加

       import sys
       sys.setrecursionlimit(5000)

之後直接在cmd中運行該spec:

  pyinstaller xxx.spec

返回exe文件的路徑

[編輯]

在寫python程序中,有可能需要獲取當前運行腳本的路徑。打包成exe的腳本和直接運行地腳本在獲取路徑上稍微有點不同。獲取exe絕對路徑的代碼為:

   import os
   import sys
   if getattr(sys, 'frozen', False):  #如果是exe文件
           root = os.path.dirname(sys.executable)
   elif __file__:
           root = os.path.dirname(__file__)