如何使用pyinstaller打包python腳本?

怎麼將寫的python腳本打包成一個exe或者rpm包啊, 最近一直找這方面的文檔,發現都是只寫的一星半點,沒有寫得全面的,有沒有詳細的打包說明,或者用別的工具打包也行。


①在cmd中輸入 pip install pyinstaller 來安裝pyinstaller,等待安裝完畢。

②安裝完畢後,在cmd中輸入 pyinstaller.exe -F 你的.py文件的路徑。例:pyinstaller.exe -F E:python est.py(-F為附加的參數,效果為只輸出單個的exe文件,更多的參數百度都可以找到)

③exe文件生成位置將會顯示在cmd結果的倒數第二行,文本為"Appending archive to EXE 輸出目錄"

④輸出時出現 IndexError: tuple index out of range 錯誤提示

原因是下載來的pyinstaller不支持python3.6,去下載最新版本覆蓋即可。

下載地址:pyinstaller/pyinstaller

進入網頁後點擊綠色的"clone or download"按鈕,選擇download zip進行下載,將壓縮包中的PyInstaller文件夾覆蓋到PyInstaller的安裝目錄(建議覆蓋前做好備份):

C:Users用戶名稱AppDataLocalProgramsPythonPython36Libsite-packagesPyInstaller

覆蓋完成後再次輸出即可生成EXE。

附:-F參數能不用就盡量不用,打包一時爽,打開花5秒。


pyinstaller 庫的使用

PyInstaller是一個十分有用的第三方庫,它能夠在Windows、Linux、 Mac OS X 等操作系統下將 Python 源文件打包,通過對源文件打包, Python 程序可以在沒有安裝 Python 的環境中運行,也可以作為一個 獨立文件方便傳遞和管理

PyInstaller 需要在命令行(控制台)下用 pip 工具安裝,如下:

:&>pip install pyinstaller


:&>pip3 install pyinstaller

preview

PyInstaller 的官方網站網址Welcome to PyInstaller official website。

PyInstaller 庫會自動將 PyInstaller 命令安裝到 Python 解釋器 目錄中,與 pip 或 pip3 命令路徑相同,因此可以直接使用。
使用 PyInstaller 庫十分簡單, 請注意,由於 PyInstaller 不支持源文件命中有英文句號(.)存 在,假設 dpython(文件名).py 文件在 D:codes 目錄中,命令如下:

:&>pyinstaller dpython.py


:&>pyinstaller D:codesdpython.py

執行完畢後,源文件所在目錄將生成 dist 和 build 兩個文件夾。 其中,build 目錄是 pyinstaller 存儲臨時文件的目錄,可以安全刪 除。最終的打包程序在 dist 內部的 dpython 目錄中。目錄中其他文件 是可執行文件 dpython.exe 的動態鏈接庫。

下圖是將模擬兩人比賽的py文件轉換為exe文件

preview

(模擬比賽源程序請見Python 基礎實例--模擬兩人比賽 - 知乎專欄)

按回車鍵即可運行


http://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe/

一個很詳細的記錄

此乃百度搜索「pyinstaller 使用」 第二個搜索結果.....


安裝完pyinstaller打包工具,打包demo.py文件,執行命令 pyinstaller demo.py,會生成build和dist兩個目錄,點擊dist目錄中最底層目錄的.exe可執行文件即可運行程序(一切前提都是在打包成功了,可.exe程序才可運行)。


pyinstaller還有一種打包方法,你使用命令行方式打包後目錄下會生成一個.spec文件,你可以用文本框打開,修改一下,放到另外一個目錄後,直接用pyinstaller &<文件名&>.spec 來生成轉換exe文件, 我這有例子如下:(其實轉換後最方便的我覺得還是py2exe, 如果程序轉換有什麼問題,會在目錄下生成一個同名.log文件,問題都在文件里記錄著。建議盡量不要打包成單文件,啟動起來慢好多)

# -*- mode: python -*-

block_cipher = None

a = Analysis([main.py,global_list.py,mbom_dataset.py,TabPanes.py,tkcalendar.py],
pathex=[D:/develop/workspace/IE_MBom/src],
binaries=None,
datas=None,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name=main,
debug=False,
strip=False,
upx=True,
console=False,
icon=ieico.ico
)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name=main)


我試著裝了下pyinstaller,結果出現了問題:

C:UsersEvilson8023&>pyinstaller --version

Traceback (most recent call last):

File "C:UsersEvilson8023AppDataLocalProgramsPythonPython35Scriptspyinstaller-script.py", line 11, in &

load_entry_point(PyInstaller==3.2.1, console_scripts, pyinstaller)()

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagespkg_resources\__init__.py", line 565, in load_entry_point

return get_distribution(dist).load_entry_point(group, name)

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagespkg_resources\__init__.py", line 2631, in load_entry_point

return ep.load()

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagespkg_resources\__init__.py", line 2291, in load

return self.resolve()

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagespkg_resources\__init__.py", line 2297, in resolve

module = __import__(self.module_name, fromlist=[__name__], level=0)

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagesPyInstaller\__main__.py", line 21, in &

import PyInstaller.building.build_main

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagesPyInstalleruildinguild_main.py", line 32, in &

from ..depend import bindepend

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagesPyInstallerdependindepend.py", line 38, in &

from ..utils.win32.winmanifest import RT_MANIFEST

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagesPyInstallerutilswin32winmanifest.py", line 97, in &

from PyInstaller.utils.win32 import winresource

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packagesPyInstallerutilswin32winresource.py", line 20, in &

import pywintypes

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packageswin32libpywintypes.py", line 124, in &

__import_pywin32_system_module__("pywintypes", globals())

File "c:usersevilson8023appdatalocalprogramspythonpython35libsite-packageswin32libpywintypes.py", line 64, in __import_pywin32_system_module__

import _win32sysloader

ImportError: DLL load failed: 找不到指定的模塊。


把要打包的python文件,想用的圖標icon格式的放一個文件夾,然後 pyinstaller -F --icon="name.ico" name.py,-F表示打包成一個文件,不想顯示窗口的話加個-w


推薦閱讀:

python學習有必要了解底層嗎?
類可以是另一個類的對象嗎?
求問怎樣用python/python turtle畫「心」呢?
Python的return如何理解?

TAG:Python | Python庫 | Python入門 |