直接用pyinstaller打包也可以,但是會把一些不必要的庫也打包進去,尤其是在anocanda環境下的python。所以,為了進一步壓縮體積,我選擇了在虛擬環境下用pyinstaller打包程式。除此之外,還有一些可以壓縮體積打包的方法。(借鑑:
1、用pipenv建立虛擬環境
(1)安裝pipenv
pip install pipenv
(2)如果想建立固定版本的python虛擬環境,可以執行如下:(否則這一步可以忽略)
pipenv --python 版本號
如:pipenv --python 3.6
(3)進入虛擬環境
(第一次進入,它會自動建立虛擬環境,所以不用額外再建立虛擬環境了)
pipenv shell
(注:建立虛擬環境需要在專案檔案下的路徑上建立!!!這裡你可以直接按住shift鍵同時將滑鼠放在專案資料夾上右擊滑鼠以進入命令列視窗,這樣就可以在專案檔案路徑下操作了)
(4)pip install 包(對依賴的第三方庫包進行安裝)(安裝過程是比較容易出現錯誤的階段)
這裡根據你的程式所用到的第三方庫進行安裝。安裝第三方庫的過程中容易出現「read time out」這種安裝失敗的情況。這是因為安裝包預設源自國外**,訪問慢甚至有時會中斷。這裡有兩種方式解決該問題:
①延長timeout時間
pip install 庫名 --timeout 1000
②換安裝源換到國內映象
# 以清華大學映象為例
pip install -i 庫名
常用的國內映象:
(1)阿里雲
(2)豆瓣
(3)清華大學 /
(4)中國科學技術大學
(5)華中科技大學
注:新版的ubuntu要求使用https源
(另外,安裝過程中可能會出現以下錯誤:
這是因為sys是python的內建庫不屬於第三方庫,所以不用安裝。還有許多庫不屬於第三方庫,如果遇到這種錯誤可以直接跳過該庫。
在我安裝multiprocessing庫時,出現了以下錯誤:
這裡是因為multiprocessing模組的安裝語句錯誤,正確應該是:pip3 install multiprocess
如果有自己定義的庫,需要把它放到專案資料夾中,一起打包。
(5)安裝pyinstaller
pip install pyinstaller
(6)打包(打包過程中也會出現很多問題)
pyinstaller 檔名.py
以下列舉我當時遇到的問題:
①如果在安裝包的時候沒有安裝全,就會出現找不到某個模組。
解決:把漏掉的包安裝上即可。
②unable to find "nltk_data" when adding binary and data files
解決:(好像還有,但是我忘記了。。。)
(7)打包完成後,有兩個資料夾dist和build。其中dist中有.exe執行程式。
我當時的程式執行時出現視窗閃退情況。這時候,你可以開啟cmd,進入到程式所在路徑執行程式,此時,視窗上會顯示錯誤。根據該錯誤再進行改正。我當時是出現以下錯誤:
modulenotfounderror: no module named 'pkg_resources.py2_warn
原因是setuptools版本過高,把setuptools降級到44.0.0以下重新打包即可。
我的在打包完成後,執行程式,出現warning: the configuration file does not exist.但是沒有影響程式的執行,所以我就沒有管它。
如果虛擬環境不用了,怎麼刪掉呢?
答:虛擬環境在c:\users\administrator\.virtualenvs中。如果你給多個程式建立了多個虛擬環境,.virtualenvs裡面會有多個虛擬環境資料夾,選擇你要刪除的那個刪掉即可。
如果有錯誤還希望大家多多指正!
pyinstaller 打包python程式
n 檔名 d 建立乙個可執行檔案的單檔案包 f 建立乙個繫結的可執行檔案 w 使用視窗 無控制台 可以通過 pyinstaller h 或者 pyinstaller hrlp 檢視全部引數 在要打包的python檔案下 執行 pyinstaller f i 靜態檔案 靜態檔案資源 python檔名....
用pyinstaller打包乙個exe程式
f選項可以打出乙個exe檔案,預設是 d,意思是打成乙個資料夾。pyinstaller f testdatagen.py w選項可以打桌面程式,去掉命令列黑框 pyinstaller f w testdatagen.py i可以設定圖示路徑,將圖示放在根目錄 pyinstaller f w i ge...
Windows 纖程 協程
寫這篇文章的原因是,很多框架 庫都有協程 纖程的支援,比如python的gevent,php 的swoole等等,但是具體是什麼樣的呢?為什麼協程方式效能會更好?很多初學者聽個詞,聽風就是雨,把協程和io能混成乙個概念。使用纖程的第乙個步驟是將已有的執行緒轉換為乙個纖程。convertthreadt...