PyInstaller庫之科赫雪花小包裹

原作者:?https://developer.aliyun.com/article/745120

/1 前言/

嘿,各位小伙伴,晚上好呀,我相信各位小伙伴都是python的愛好者。也許我們不一定是專業(yè)的程序員,但是我們仍然可以通過代碼提高我們的效率,盡量少加班,多陪陪媳婦。再不行,讓代碼替我們干著重復的工作,我們有節(jié)省出來的時間打游戲不好嘛,是吧,哈哈哈。

但是呢,我們開發(fā)的腳本一般都會用到一些第三方包,可能別人也需要用到我們的腳本,如果我們將我們的xx.py文件發(fā)給他,他是不能直接用的,他還需要安裝python解釋器,甚至還要安裝我們用的那些第三方包,是不是有點小麻煩?但是我們都知道,PC是可以直接運行exe文件的,這就為我們提供了一個便捷的方式。所以,從看了這個教程以后,這都將成為過去式,打成exe之后,分享即可用。

PS: 如果打包為exe的話,版本盡量選擇python3.6+32位版本,因為win64位系統(tǒng)向下兼容32位程序,但是如果不考慮32位系統(tǒng)的話無所謂,直接python64位版本直接打包就可以,只是只能在win64位系統(tǒng)上跑。

/2 安裝pyinstaller/

首先安裝pyinstaller,使用安裝命令:pip3 install pyinstaller,如下圖所示。

/3 pyinstaller打包機制/

我們寫的python腳本是不能脫離python解釋器單獨運行的,所以在打包的時候,至少會將python解釋器和腳本一起打包,同樣,為了打包的exe能正常運行,會把我們所有安裝的第三方包一并打包到exe。

即使我們的項目只使用的一個requests包,但是可能我們還安裝了其他n個包,但是他不管,因為包和包只有依賴關系的。比如我們只裝了一個requests包,但是requests包會順帶裝了一些其他依賴的小包,所以為了安全,只能將所有第三方包+python解釋器一起打包。如下圖所示。

? 藍色表示是安裝requests依賴的包,看到了吧!

/4 Pyinstaller打包exe/

這里呢,我就拿剛給同事寫辦公自動化腳本示例一下。源碼示例效果,如下圖所示。

1、我們來將這個.py的文件打包成一個exe,我們直接cmd切換到這個腳本的目錄,執(zhí)行命令:pyinstaller-F setup.py,如下圖所示。

ps: -F參數表示覆蓋打包,這樣在打包時,不管我們打包幾次,都是最新的,這個記住就行,固定命令。

2、執(zhí)行完畢之后,會生成幾個文件夾,如下圖所示。

3、在dist里面呢,就有了一個exe程序,這個就是可執(zhí)行的exe程序,如下圖所示。

4、我們把這個setup.exe拖到和setup.py平級的目錄,我們來運行一下這個,效果圖如下圖所示。

5、這樣,我們就完成了一個打包工作,如果別人需要,即使沒有python環(huán)境,他依然可以運行。

6、接下來我們再來打包一個帶界面的,這里我用pyqt5寫了一個最簡單的框架,看一下打包成exe是否能運行成功,效果圖如下圖所示。

我們可以看到,后面有一個黑洞洞的窗口,這就有點尷尬了,所以,我們的打包命令也要變一下。

7、執(zhí)行 pyinstaller -F -wsetup.py 多加-w以后,就不會顯示黑洞洞的控制臺了,這里就不做演示啦!

8、但是我們打包的exe,我們的圖標呀,實在是有點丑陋,默認的,沒有一點自己的風格,那么,我們應該怎么改一下呢?

執(zhí)行命令:pyinstaller -F -w-i wind.ico setup.py,如下圖所示。

9、默認打包圖片,如下圖所示。

10、加上 -i 參數之后,如下圖所示,會形成一個類似風力發(fā)電機的logo圖案。

ps:程序路徑最好全部都是英文,否則肯能會出現莫名其妙的問題

11、到此,我們能用到的pyton打包成exe命令都總結完了

/5 總結命令/

Pyinstaller -F setup.py 打包exe

Pyinstaller -F -w setup.py 不帶控制臺的打包

Pyinstaller -F -i xx.ico setup.py 打包指定exe圖標打包

平常我們只需要這三個就好了,足夠滿足所有需求了。

/6 結語/

到這之后呢,python打包成exe基本算是結束了,記得一定要把pip升級成最新版的pip在安裝pyinstaller哈。要不然可能會出現莫名奇妙的問題。不信邪的小伙伴們可以自己試試看,多碰碰壁也是可以學到很多的。

其他資料:

PyInstaller是一個第三方庫。它可以實現將.py擴展名的任何Python的源代碼轉換成Windows(exe文件)、Linux,Mac OS X下面的可執(zhí)行文件

下載: 命令行輸入:pip install pyinstaller

安裝之后它會安裝生成一個文件,也是一個命令叫 PyInstaller。通過?PyInstaller命令將一個源文件打包生成可執(zhí)行文件。PyInstaller是命令行的執(zhí)行程序,不是Python下面的執(zhí)行指令,所以要在cmd的命令行下,我們使用 PyInstaller -F <文件名.py>

實例:科赫雪花小包裹

在這個事例中我們需要介紹一種曲線:科赫曲線。為了了解科赫曲線我們需要了解分形幾何,簡單說分形幾何就是一種具有迭代關系的幾何圖形,它廣泛的存在于自然界中

分形幾何中有一種特殊的曲線叫做科赫曲線,也叫雪花曲線??坪涨€是一種用于分形的曲線。



命令行執(zhí)行

科赫曲線繪制源代碼

#KochDrawV1.py

import?turtle

def?koch(size,?n):

????if?n?==?0:

????????turtle.fd(size)

????else:

????????for?angle?in?[0,?60,?-120,?60]:

???????????turtle.left(angle)

???????????koch(size/3,?n-1)

def?main():

????turtle.setup(800,400)

????turtle.penup()

????turtle.goto(-300,?-50)

????turtle.pendown()

????turtle.pensize(2)

????koch(600,3)?????#?0階科赫曲線長度,階數

????turtle.hideturtle()

main()科赫雪花繪制源代碼



#KochDrawV2.py

import?turtle

def?koch(size,?n):

????if?n?==?0:

????????turtle.fd(size)

????else:

????????for?angle?in?[0,?60,?-120,?60]:

???????????turtle.left(angle)

???????????koch(size/3,?n-1)

def?main():

????turtle.setup(600,600)

????turtle.penup()

????turtle.goto(-200,?100)

????turtle.pendown()

????turtle.pensize(2)

????level?=?3??????#?3階科赫雪花,階數

????koch(400,level)?????

????turtle.right(120)

????koch(400,level)

????turtle.right(120)

????koch(400,level)

????turtle.hideturtle()

main()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容