win10下,將python腳本轉換成可執行exe文件

一 前言

python腳本的執行對於不懂計算機的人來說非常痛苦,因此他們想要一個windows下能執行的exe程序,來滿足在沒搭建python環境的主機上執行對應的這段python程序。一個愉快的週末,本來可以愉快的打機看劇的,卻被老姐叫來幹活,要求將python轉成exe,因爲她boss電腦上沒有滿足的python環境,然後我就開始週末的忙碌了,因爲網絡上的文檔太散太雜,沒有一篇滿足我的整個需求。最終用了兩天才完成整個流程,可能我比較菜的原因 :( ,爲了給親愛的老姐學習,因此我特寫此篇文檔,將主要講解如何從無到有地完成python轉exe。

二 環境

  • 系統: win10虛擬機
  • python版本:3.5.2
  • pyinstaller版本:3.4

三 環境搭建

因爲exe只能在windows執行,而我本機爲macos系統,因此只能利用虛擬機,然後下載鏡像文件iso來實現win10系統。這裏用的虛擬機軟件爲virtualBox,鏡像文件爲官網下載的win10(64bit)。

一切準備完畢後,開始搭建python環境,這裏很重要,在我搭建環境的時候,整個搭建過程的大部分坑都是因爲python環境引起的,不要問我爲啥會這樣,因爲我只是一個擰螺絲的,除了畢業設計用到python之後兩年基本與之絕緣。因此在這裏我建議大家一步到位,直接使用anaconda來搭建,直接去官網下載3.7版本的即可,(如果下載太慢,可以考慮各大大學的鏡像)因爲anaconda內部可以滿足各個版本切換。安裝完成後將anaconda目錄和anaconda目錄下的Scripts加入環境變量的Path下即可。

win10 我的電腦->屬性->高級系統設置->環境變量->Path,如下圖所示,加上最後兩行,路徑爲你本機anaconda目錄

切換python版本,因爲下載的anaconda自帶版本是3.7,可能有些小夥伴需要較低版本的python,稍微介紹切換python版本命令,本文參考Anaconda多版本Python管理以及TensorFlow版本的選擇安裝,在開始菜單中打cmd進入命令提示符。

#查看anaconda下的python版本
conda info --envs
#如果默認源下載過慢,建議使用國內源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  
conda config --set show_channel_urls yes 
#下載python版本,這裏我下載3.5.2,python352爲自定義名字
conda create --name python352 python=3.5.2
#再次查看anaconda下的python版本,可以發現多處python352這個snapshot
conda info --envs
#使用3.5.2版本
activate python352
#版本已切換
python -V

下面進行pyinstaller安裝

pip install pyinstaller

 到此整個環境已經搭建完成。如果搭建完成發現原來的腳本無法執行,缺少類庫,比如numpy。使用pip命令重裝類庫即可。

pip install numpy

四 測試

按理來說,現在已經完成了整個環境的搭建可以開始玩耍了,已經可以完成一些簡單腳本的轉換了,比如以下這個helloworld腳本。

print("Hello World")
input()

保存在隨便一個不含中文路徑的目錄下(養成好習慣,防止因爲路徑中文亂碼問題被自己坑),然後在cmd下用pyinstaller命令打包成exe即可。pyinstaller命令及參數解釋

#cd到剛剛寫的helloworld.py目錄
cd path
#使用installer命令安裝,這裏指定生成一個可執行exe文件即可
pyinstaller -F helloworld.py
#如果生成成功,會在當前目錄的dist下生成一個可執行exe文件
cd dist
#運行exe測試
helloword.exe
#成功即完成

五 常見問題以及解決方案

5.1生成exe異常

13207 INFO: Processing pre-safe import module hook   setuptools.extern.six.moves
Traceback (most recent call last):
  File "<string>", line 2, in <module>
ImportError: No module named 'setuptools._vendor'

解決方案:升級setuptools即可

pip install -U setuptools

5.2成功生成exe但是執行異常

ImportError: No module named 'numpy.core._dtype_ctypes'
[6084] Failed to execute script sh50_0118_final

解決方案:首先先進入本地庫的倉庫,如果是通過anaconda安裝的,python路徑\Lib\site-packages\PyInstaller\hooks,python路徑可以通過cmd命令where python來查詢。

找到對應的hook-numpy.py,編輯

#如果文件中存在hiddenimports則在後面加上對應的類
#否則文件在最後新建數組hiddenimports,然後加上對應的類
hiddenimports=[
    #all your previous hidden imports
    'numpy.core._dtype_ctypes'
]

然後重新打包py文件至exe,再次執行如果依舊報類似問題,依次處理直到成功。這裏要加上--clean命令,清理之前生成的文件。

pyinstaller -F --clean *.py

在這裏要感謝打包時遇到pandas庫報錯處理(轉)的幫助,解決了這個卡了近乎一天的問題。

六 總結

花了整個週末的時間來完成了這個工作,從弄虛擬機再到搭環境,坑很多,還有很多問題沒有羅列出來(因爲這是事後整理的,具體問題懶得重現了- -),只是取了幾個具有代表性的、很難百度or谷歌出來的疑難雜症來說,希望對後來者有所啓發。這樣雖然已經完成工作,但是打包出來的exe非常大,緊緊一個helloworld就生成了6MB的exe文件,如果我還有空,並且我姐還有需求,可能會繼續完善,減小exe的體積。完結撒花?

 

 

 

 

 

 

 

 

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