python打包py文件生成exe,以及運行exe產生的問題
1 安裝pyinstaller
pip install pyinstaller
2 用pyinstaller進行打包
(1)選項:
-F:表示生成單一的exe文件
-w:表示執行exe文件時去除背后的dos窗口 ps:建議最初試驗時保留dos,可以查看是否有錯誤發生
-p:有些需要手動添加包的位置(dir1,dir2)多個地址時以分號分開
-i:加入圖標
(2)打包一個py文件 添加圖標(格式為ico的圖片):
pyinstaller -F XXX.py -i XX.ico
(3)打包多個py文件:
pyinstaller -F XXX.py -p XX.py -i XX.ico(以此類推)
運行以后,會生成dist和build兩個文件夾,exe在dist文件夾下。如果程序需要用到附加的文件則添加到dist文件夾中即可。
3 運行打包后的 多進程exe程序出現的問題
運行之后 我發現計算機不怎么響應了,而且很卡,打開任務管理器:
接著在網上一番百度,終于找到解決問題的辦法:
pyinstaller版本小于3.3的windows附加代碼(不過我的版本是3.4的不知道為什么還會出現這個問題,反正添加上后程序運行就正常啦)
新建一個wenke.py文件 添加如下代碼:
import os
import sys
import multiprocessing
# Module multiprocessing is organized differently in Python 3.4+
try:
# Python 3.4+
if sys.platform.startswith('win'):
import multiprocessing.popen_spawn_win32 as forking
else:
import multiprocessing.popen_fork as forking
except ImportError:
import multiprocessing.forking as forking
if sys.platform.startswith('win'):
# First define a modified version of Popen.
class _Popen(forking.Popen):
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
forking.Popen = _Popen
然后在mul_process.py中加入:
import wenke
然后在
if __name__ == '__main__':
下面加入:
multiprocessing.freeze_support()
添加完后,再次進行打包,運行程序 ok! 大功告成
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
