在windows系統和ubantu系統下python打包成可執行程序

應公司要求,領導要對python程序進行打包處理。所以一場煎熬戰無聲打響,這個過程是最煩人,最沒有人願意幹的(明知道是個坑,還得跳!!!!!!!!)。要求是ubantu系統下,但是我的電腦是windows,所以現在windows下小試牛刀。。。。。不說了,開始正題:

1.在windows系統下

準備工作:1.windows10系統

                  2.python3.5.x

前言:

將python腳本打包爲可執行的exe文件是通常的需求,python也提供了許多的第三方庫,比如:bbFreeze,py2ese,pyinstaller,cx_Freeze,py2app等等。它們都各自有優缺點,經過查詢大量的文獻,我最終選擇了pyinstaller,因爲它操作起來相對比較簡單,而且有較好的支持。

這是一個來自Freezing Your Code的統計

1.安裝pyinstaller

方法一:離線安裝

              先安裝依賴庫pywin32,然後下載pyinstaller,安裝方法如下不推薦)。

方法二:在線安裝

             (1)簡單粗暴,什麼也不用管。(注:下圖的安裝顯示是我已經安裝完的顯示。。。。。。)

pip install pyinstaller

 

          (2)檢查是否安裝成功

pyinstaller --version

到此安裝結束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2.將我們想要打包的程序打包成.exe

(1)進入你要打包的python目錄內

(2)將你要打包的程序完整以及程序的依賴文件放到一個新的文件夾內

(3)執行打包命令pyinstaller test.py 即可。

下面來進行一個簡單的演示!!!!!!!!!!!!!!!!!!!!!!

我簡單的寫了一個測試文件pk_test.py.一個簡單的hello,word!

 

步驟一:進入你要打包的python目錄內

步驟二:將你要打包的程序完整以及程序的依賴文件放到一個新的文件夾內

注:比如需要pandas包,就將pandas放到pk_test.py的目錄中。(注意!網上說如果不放的話可能出錯,,但是我沒有放也沒有出錯,,,,,,,,,,玄學!!!!!!!!!!!!!如果報錯請檢查是否是因爲沒有放依賴的原因)

步驟三:執行打包命令pyinstaller test.py 即可。

執行完的結果如上圖所示:會生成許多依賴的文件包,,,不關心它們,,,只需要dist文件夾即可!!!進入dist,會有一個pk_test文件夾(****我們所需要的,請一併拷走****,不然會報錯),進入pk_test文件夾找到pk_test.exe雙擊即可!!

關鍵來了!!!!我雙擊pk_test.exe屏幕一閃而過!!!!然後就沒有然後了!!!!!!!於是,我在命令窗口中運行,,,,,,

頓時我哭了,什麼鬼!!然後接着查,,,,,,,,,,,,,,最後發現!應該和C++程序閃是一個道理!!於是,我又做了一番修正,,,然後編譯打包,,,,(沒有閃退!!!!!!!!)

修改如下:

import os
print('hello word!')
os.system('pause')

到此,簡單的打包已經結束!!!!!!!!!!!!!!!!!!!!!!!

3.測試一下稍複雜的程序

#!/usr/bin/env python
# encoding: utf-8
'''
@author: 真夢行路
@file: pk_test.py
@time: 2018/8/10 10:16
'''
import os
import numpy as np
import matplotlib.pyplot as plt
x=np.random.rand(100)
y=np.sin(x)
plt.figure()
plt.plot(x)
plt.show()
os.system('pause')

完美!!!!!!!!!!!!等等。。。。。。。後面怎麼有煩人的黑窗口。。。(接下來!!!!!)

4.打包命令的小操作。

在cmd窗口鍵入:pyinstaller -h就會出現pyinstaller的所用幫助說明。

pyinstaller -w -F pk_test.py

 

5.帶第三放庫以及讀取文件的測試

第三方庫選擇pandas和tensorflow,以及pandans需要用到的.csv文件。

準備:按照上述方法,將主函數test.py,以及數據文件夾data放到一個文夾中,執行打包命令。(沒有放pandans和tensflow安裝包)

運行:發現報錯,提示沒有找到pandas._lilbs.tslibs.np_datetime。難道是因爲我沒有把pandans放進去?於是,接着測試。

也沒有什麼用,應該不是這個問題,於是又是一番百度。終於找到了一種解決辦法!

解決辦法:1.找到自己電腦中的D:\python3.5\Lib\site-packages\PyInstaller\hooks目錄

2.新建一個文件名爲hook-pandas.py,寫入以下內容並保存。

#!/usr/bin/env python
# encoding: utf-8
'''
@author: 真夢行路
@file: hook-pandas.py
@time: 2018/8/10 13:03
'''
hiddenimports = ['pandas._libs.tslibs.timedeltas',
'pandas._libs.tslibs.nattype',
'pandas._libs.tslibs.np_datetime',
'pandas._libs.skiplist']

測試!!!!!!!!!!!!!!!!!!!!又發現新的報錯。

打包完成!!!!(而且pandas和tensorflow也自動打進去了)。

(注:在打包過程中也可能出現其他的報錯!目前我沒有遇到,如果遇到,大家嘗試解決!)

2.在ubantu系統中

準備工作:1.ubantu16.04

                    2.python3.5.x

                    3.pip

在ubantu系統中,使用python對.py文件打包成可執行程序與在windows下基本上沒有什麼區別,最主要的區別就是Linux命令的使用。下面就簡單的演示一下:(注:我使用的是pip安裝,習慣了)

1.安裝

(1)首先獲取root權限使用sudo -i 命,令,輸入密碼,獲取權限(當然也可以在執行命令前加sudo)

(2)使用pip3 install pyinstaller 進行安裝pyinstaller。(我的是python3所以用pip3)(原版本已經安裝完成!!故此顯示)

(3)檢查是否安裝成功

2.測試

測試跟windows一樣,(ubantu系統沒有閃退問題)就不多寫了。現測試一個python寫的函數庫調用,看能否打包成功。

準備:主文件test.py,調用文件hello.py。

打包:(1)按照官方文檔對多個文件打包要執行多文件命令(結果和windows一樣)

(2)找到dist文件夾下的test文件夾,執行test

根據結果來看,不管是主文件test.py,還是調用文件hello.py都執行成功。

注:我又測試了一下將test.py ,hello.py放到一個文件夾中,只打包test.py發現也能運行;然後將hello.py刪掉,然後再打包,打包失敗。

(注:在打包過程中也可能出現其他的報錯!目前我沒有遇到,如果遇到,大家嘗試解決!)

還有就是,如何打包二進制文件,如何更換圖標,如何在打包過程中如何新建文件夾以及子目錄,等等

具體其他的命令可以通過官方文檔查閱!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章