python學(xué)習(xí)教程之使用py2exe打包
前言
本文主要給大家介紹了關(guān)于python使用py2exe打包的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
遇坑
之前經(jīng)過折騰,pyinstaller打包文件可以在別的windows7上運(yùn)行。但是,mfk, 客戶說是xp系統(tǒng)。崩潰
使用pyinstaller各種折騰,打包出來的依然是不是有效的win32程序,各種報(bào)錯(cuò)。
后來嘗試使用 py2exe 打包
使用
1、安裝 不廢話,下載exe版,傻瓜式安裝
2、使用
編寫類似一個(gè) setup.py 文件,寫各種配置(下邊有)
調(diào)用命令
python setup.py py2exe
或者在setup.py下添加如下語句,點(diǎn)擊文件自動(dòng)運(yùn)行
sys.argv.append('py2exe')
官方示例: http://www.py2exe.org/index.cgi/Tutorial
具體參數(shù)含義見:http://www.py2exe.org/index.cgi/ListOfOptions
問題
1、不是有效的win32程序
換32位的python,其他模塊都重裝,包括pyqt5
2、py2exe UnicodeDecodeError: 'gbk' codec can't decode
py2exe 的runtime.py 里 打開文件制定為utf-8
with open(target.script, "U",encoding="UTF-8") as script_file:
3、編譯PyQt5 異常
把一句 Exception, e 該為 Exception as e 就好了
4、could not find or load the Qt platform plugin "windows"
把 C:\Python34\Lib\site-packages\PyQt5\plugins 下的 platforms 拷貝到 打包目錄下的platforms搞定
5、找不到 msvc**100.dll 問題
把system32 目錄下的 msvc**.dll 的三個(gè)dll文件拷貝到打包目錄下
分享一下完成的打包腳本
from distutils.core import setup
import py2exe
import sys
import os
import glob
import shutil
import msvcrt
#this allows to run it with a simple double click.
sys.argv.append('py2exe')
PYTHON_HOME = os.getenv('PYTHON_HOME')
TARGET_DIR = '../build2'
# 刪除原來生成的路徑
if os.path.exists(TARGET_DIR):
print("是否刪除文件夾(y/n)\t" + os.path.abspath(TARGET_DIR))
d = msvcrt.getch()
if d == b'y':
shutil.rmtree(TARGET_DIR)
print(os.path.abspath(TARGET_DIR)+' 被刪除')
def find_data_files(dlist,source,target,patterns):
# 是否有特殊符號(hào)
if glob.has_magic(source) or glob.has_magic(target):
raise ValueError("Magic not allowed in src, target")
ret = dlist
for pattern in patterns:
# 給pattern 上添加目錄
pattern = os.path.join(source,pattern)
# 通過pattern尋找滿足條件的文件
for filename in glob.glob(pattern):
# 判斷文件是否存在
if os.path.isfile(filename):
# 獲取相對(duì)source 的相對(duì)路徑
relP = os.path.relpath(filename,source)
# 設(shè)置為目標(biāo)路徑
targetpath = os.path.join(target,relP)
# 獲取目標(biāo)文件的文件夾
path = os.path.dirname(targetpath)
ret.setdefault(path,[]).append(filename)
print('-------------------')
print('資源拷貝')
data_files = {}
# 拷貝xp需要的msvc**100.dll
find_data_files(data_files,'C:/Windows/System32/','',['msvc*100.dll'])
# 拷貝pyqt5里依賴的dll
find_data_files(data_files, PYTHON_HOME+'/Lib/site-packages/PyQt5/plugins/platforms','platforms',['*.dll'])
# 把當(dāng)前目錄下ui文件夾內(nèi)容拷貝到目標(biāo)文件夾的ui文件夾下
find_data_files(data_files,'ui','ui',['*.*'])
# 拷貝配置文件
find_data_files(data_files,'config/','config/',['*.*'])
# 轉(zhuǎn)成鍵值對(duì)集合
data_files = data_files.items()
print(data_files)
print('--------------------------')
OPTIONS = {
'py2exe': {
"includes": ["sip"],# 導(dǎo)入依賴 sip
# "dll_excludes": ["MSVCP90.dll","MSVCR100.dll"],
# 是否壓縮 1 壓縮。 0 不壓縮
"compressed": 1,
# 優(yōu)化級(jí)別。 0 不優(yōu)化 pyc 1 優(yōu)化 pyd 2 pyo
"optimize": 2,
# 依賴的包
"packages": ["xml.etree", "xml"],
# 是否把dll打包到壓縮包里
# 1 所有的都打包 2 除了python解釋器,其他的都打包 3 所有的不打包
"bundle_files": 1,
# 生成的文件夾
'dist_dir':TARGET_DIR
},
}
setup(
name = '登錄器',
version = '1.0',
# 需要生成exe文件的 py。因?yàn)榭赡軙?huì)有多個(gè)入口
windows = [
{
'script':'Login.py',
# 圖標(biāo)前的索引依賴ico里的圖標(biāo)數(shù)
"icon_resources":[(0, "ui/icon.ico")]
}
],
data_files = data_files,
options = OPTIONS,
# 默認(rèn)生成一個(gè) library.zip 用來存放打包數(shù)據(jù)。如果設(shè)置為None,則打包數(shù)據(jù)存放在exe文件里
zipfile = None,
)
print("打包結(jié)束,按任意鍵退出..")
msvcrt.getch()
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 用PyInstaller把Python代碼打包成單個(gè)獨(dú)立的exe可執(zhí)行文件
- 使用PyInstaller將python轉(zhuǎn)成可執(zhí)行文件exe筆記
- 通過Py2exe將自己的python程序打包成.exe/.app的方法
- python學(xué)習(xí)筆記--將python源文件打包成exe文件(pyinstaller)
- 使用python編寫簡單的小程序編譯成exe跑在win10上
- 解析Python中的eval()、exec()及其相關(guān)函數(shù)
- python的exec、eval使用分析
- 詳解python中executemany和序列的使用方法
- Python之py2exe打包工具詳解
- 詳解Python3.6的py文件打包生成exe
相關(guān)文章
解決Python3用PIL的ImageFont輸出中文亂碼的問題
今天小編大家分享一篇解決Python3用PIL的ImageFont輸出中文亂碼的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python編程入門之Hello World的三種實(shí)現(xiàn)方式
這篇文章主要介紹了Python編程入門之Hello World的三種實(shí)現(xiàn)方式,實(shí)例分析了print輸出函數(shù)的使用及控制臺(tái)輸出的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
開啟Django博客的RSS功能的實(shí)現(xiàn)方法
這篇文章主要介紹了開啟Django博客的RSS功能的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Python + selenium + crontab實(shí)現(xiàn)每日定時(shí)自動(dòng)打卡功能
這篇文章主要介紹了Python + selenium + crontab實(shí)現(xiàn)每日定時(shí)自動(dòng)打卡功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03

