Python3如何在Windows和Linux上打包
1、嘮嘮叨叨
最近項(xiàng)目中需要Python的打包,看到網(wǎng)上也沒(méi)有很詳細(xì)的資料,于是做了一些示例程序。小小的研究了一下,Python如何在Windows和Linux上打包,并把程序源碼以及各個(gè)記錄上傳到Github上與大家分享。
2、背景
Python版本:3.6.8
Windows版本:Windows 10 家庭中文版 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202)
Linux版本:centos7.4
3、Python打包工具
今天沒(méi)時(shí)間研究cx_Freeze,先研究了一下PyInstaller。
3.1、py2exe
py2exe是一個(gè)將python轉(zhuǎn)換成windows上的可獨(dú)立執(zhí)行的可執(zhí)行程序(*.exe)的工具。不過(guò),該可執(zhí)行程序,只能在相同的Windows系統(tǒng)下運(yùn)行,而且不適合Linux。果斷被我舍棄不在研究了。
3.2、cx_Freeze
cx_Freeze 是一個(gè)類(lèi)似 py2exe 的工具,但 cx_Freeze 可以在 linux 下可以直接執(zhí)行的 ELF 格式的二進(jìn)制可執(zhí)行文件,也可以在windows上執(zhí)行。
cx_Freeze的作用可以讓python程序可以脫離python運(yùn)行環(huán)境,在沒(méi)有安裝python的微型linux系統(tǒng)(例如cdlinux、tinycore等)里,方便地運(yùn)行你的python程序。
程序簡(jiǎn)介:https://pypi.org/project/cx-Freeze/5.0/
3.3、PyInstaller
號(hào)稱(chēng)是目前最全面的打包程序,然后我看了一下程序更新時(shí)間。一看是10天前,嗯,不錯(cuò),就它了。
程序簡(jiǎn)介:https://pypi.org/project/PyInstaller/
看了一下參數(shù)介紹如下:
4、Windows打包
4.1、單個(gè)文件打包
4.1.1、核心源碼
#! -*- coding: utf-8 -*- """ Author: ZhenYuSha Create Time: 2020-1-20 Info: Python打包示例1,單個(gè)文件打包 “pyinstaller -F(單個(gè)可執(zhí)行文件) 程序源 -n 程序名 -w(去掉控制臺(tái)窗口,這在GUI界面時(shí)非常有用) -i 圖標(biāo).ico” “pyinstaller -F test1/Demo_Test1_Python.py” """ def bubble_sort(arr): """ 冒泡排序 :param arr: :return: """ for i in range(1, len(arr)): for j in range(0, len(arr)-i): if arr[j] > arr[j+1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr if __name__ == '__main__': test = [1, 8, 123, 18, 99, 300] print("************************************") print("* 冒泡排序 *") print("************************************") print("源列表:", test) result = bubble_sort(test) print("排序后:", result) print("************************************") input("按任意鍵退出...")
4.1.2、程序運(yùn)行
4.1.3、打包
pyinstaller -F test1/Demo_Test1_Python.py
4.1.4、打包后效果
4.2、多個(gè)文件打包
4.2.1、核心源碼
#! -*- coding: utf-8 -*- """ Author: ZhenYuSha Create Time: 2020-1-20 Info: Python打包示例2,多個(gè)文件打包 “pyinstaller -F(單個(gè)可執(zhí)行文件) 程序源 -n 程序名 -w(去掉控制臺(tái)窗口,這在GUI界面時(shí)非常有用) -i 圖標(biāo).ico” “pyinstaller -F test2/Demo_Test2_Python.py” """ from test2.Demo_bubble_sort import bubble_sort from test2.Demo_heap_sort import heap_sort if __name__ == '__main__': test1 = [1, 8, 123, 18, 99, 300] test2 = test1[:] print("************************************") print("* 兩個(gè)排序 *") print("************************************") print("列表1 id:", id(test1)) print("列表2 id:", id(test2)) print("源列表1:", test1) print("源列表2:", test2) result1 = bubble_sort(test1) result2 = heap_sort(test1) print("冒泡后:", result1) print("堆排后:", result2) print("************************************") input("按任意鍵退出...")
4.2.2、程序運(yùn)行
4.2.3、打包
pyinstaller -F test2/Demo_Test2_Python.py
4.2.4、打包后效果
4.3、多層文件打包
4.3.1、核心源碼
#! -*- coding: utf-8 -*- """ Author: ZhenYuSha Create Time: 2020-1-20 Info: Python打包示例3,多層文件打包 “pyinstaller -F(單個(gè)可執(zhí)行文件) 程序源 -n 程序名 -w(去掉控制臺(tái)窗口,這在GUI界面時(shí)非常有用) -i 圖標(biāo).ico” “pyinstaller -F test3/Demo_Test3_Python.py” """ from test3.sort.Demo_bubble_sort import bubble_sort from test3.sort.Demo_heap_sort import heap_sort from test3.Demo_test import Test if __name__ == '__main__': test1 = [1, 8, 123, 18, 99, 300] test2 = test1[:] print("************************************") print("* 兩個(gè)排序 *") print("************************************") print("列表1 id:", id(test1)) print("列表2 id:", id(test2)) print("源列表1:", test1) print("源列表2:", test2) result1 = bubble_sort(test1) result2 = heap_sort(test1) print("冒泡后:", result1) print("堆排后:", result2) Test.run() print("************************************") input("按任意鍵退出...")
4.3.2、程序運(yùn)行
4.3.3、打包
pyinstaller -F test3/Demo_Test3_Python.py
4.3.4、打包后效果
4.4、多層文件打包(加圖標(biāo)該可執(zhí)行程序名稱(chēng))
4.4.1、核心源碼
#! -*- coding: utf-8 -*- """ Author: ZhenYuSha Create Time: 2020-1-20 Info: Python打包示例4,多層文件打包加圖標(biāo),修改程序名 “pyinstaller -F(單個(gè)可執(zhí)行文件) 程序源 -n 程序名 -w(去掉控制臺(tái)窗口,這在GUI界面時(shí)非常有用) -i 圖標(biāo).ico” “-p 表示自定義需要加載的類(lèi)路徑(一般情況下用不到)” “pyinstaller -F test4/Demo_Test4_Python.py -n Test4 -i test4/test4.ico” """ from test3.sort.Demo_bubble_sort import bubble_sort from test3.sort.Demo_heap_sort import heap_sort from test3.Demo_test import Test if __name__ == '__main__': test1 = [1, 8, 123, 18, 99, 300] test2 = test1[:] print("************************************") print("* 兩個(gè)排序 *") print("************************************") print("列表1 id:", id(test1)) print("列表2 id:", id(test2)) print("源列表1:", test1) print("源列表2:", test2) result1 = bubble_sort(test1) result2 = heap_sort(test1) print("冒泡后:", result1) print("堆排后:", result2) Test.run() print("************************************") input("按任意鍵退出...")
4.4.2、程序運(yùn)行
4.4.3、打包
pyinstaller -F test4/Demo_Test4_Python.py -n Test4 -i test4/test4.ico
4.4.4、打包后效果
5、Linux打包
5.1、多層文件打包
5.1.1、核心源碼
#! -*- coding: utf-8 -*- """ Author: ZhenYuSha Create Time: 2020-1-20 Info: Python打包示例5,多層文件打包修改程序名 linux打包 “pyinstaller -F(單個(gè)可執(zhí)行文件) 程序源 -n 程序名 -w(去掉控制臺(tái)窗口,這在GUI界面時(shí)非常有用) -i 圖標(biāo).ico” “-p 表示自定義需要加載的類(lèi)路徑(一般情況下用不到)” “pyinstaller -F Demo_Test5_Python.py -n Test5” """ from sort.Demo_bubble_sort import bubble_sort from sort.Demo_heap_sort import heap_sort from Demo_test import Test if __name__ == '__main__': test1 = [1, 8, 123, 18, 99, 300] test2 = test1[:] print("************************************") print("* 兩個(gè)排序 *") print("************************************") print("列表1 id:", id(test1)) print("列表2 id:", id(test2)) print("源列表1:", test1) print("源列表2:", test2) result1 = bubble_sort(test1) result2 = heap_sort(test1) print("冒泡后:", result1) print("堆排后:", result2) Test.run() print("************************************") input("按任意鍵退出...")
5.1.2、程序運(yùn)行
5.1.3、打包后效果
5.2、遇到的錯(cuò)誤,以及解決方案
5.2.1、錯(cuò)誤1(找不到pyinstaller)
我是用 pip install 安裝的pyinstaller,于是先f(wàn)ind了一下,找到了此命令,于是就做了個(gè)軟鏈接。
解決方案,直接將安裝目錄下面的pyinstaller包作為軟鏈接到/usr/bin下
ln -s /usr/local/python3.6.8/bin/pyinstaller /usr/bin/pyinstaller3.6
5.2.2、錯(cuò)誤2(rebuild your Python with --enable-shared
)
這種錯(cuò)誤,人家已經(jīng)把解決方案說(shuō)出來(lái)了,就是需要重新編譯嘛,那我們就按照他的來(lái)就OK了。先找到源碼按照的目錄,并按照以下命令操作。
./configure --prefix=/usr/local/python3.6.8(需要安裝的目錄) --enable-shared --with-ssl make make install
5.2.3、錯(cuò)誤3(找不到 libpython3.6m.so.1.0)
解決方案,在安裝目錄找到此文件,并拷貝到/usr/lib64目錄下:
6、Github源碼分享
https://github.com/ShaShiDiZhuanLan/Demo_Install_Python
到此這篇關(guān)于Python3如何在Windows和Linux上打包的文章就介紹到這了,更多相關(guān)Python3 Linux打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python讀取中文路徑出現(xiàn)亂碼的問(wèn)題解決
本文主要介紹了Python讀取中文路徑出現(xiàn)亂碼的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06pandas 缺失值與空值處理的實(shí)現(xiàn)方法
這篇文章主要介紹了pandas 缺失值與空值處理的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10對(duì)Pyhon實(shí)現(xiàn)靜態(tài)變量全局變量的方法詳解
今天小編就為大家分享一篇對(duì)Pyhon實(shí)現(xiàn)靜態(tài)變量全局變量的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python設(shè)置默認(rèn)編碼為utf8的方法
這篇文章主要介紹了Python設(shè)置默認(rèn)編碼為utf8的方法,結(jié)合實(shí)例形式分析了Python針對(duì)文件編碼的設(shè)置方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-07-07