使用python做自動打包工具的簡單介紹

本文目錄一覽:

vs2017如何打包python項目,生成exe文件

可以使用PyInstaller把python程序打包成exe,安裝使用pip install pyinstaller,使用時,使用pyinstaller打包,參數如下

-F, –onefile 打包一個單個文件,如果你的代碼都寫在一個.py文件的話,可以用這個,如果是多個.py文件就別用

-D, –onedir 打包多個文件,在dist中生成很多依賴文件,適合以框架形式編寫工具代碼,我個人比較推薦這樣,代碼易於維護

-K, –tk 在部署時包含 TCL/TK

-a, –ascii 不包含編碼.在支持Unicode的python版本上默認包含所有的編碼.

-d, –debug 產生debug版本的可執行文件

-w,–windowed,–noconsole 使用Windows子系統執行.當程序啟動的時候不會打開命令行(只對Windows有效)

-c,–nowindowed,–console

使用控制檯子系統執行(默認)(只對Windows有效)

pyinstaller -c xxxx.py

pyinstaller xxxx.py –console

-s,–strip 可執行文件和共享庫將run through strip.注意Cygwin的strip往往使普通的win32 Dll無法使用.

-X, –upx 如果有UPX安裝(執行Configure.py時檢測),會壓縮執行文件(Windows系統中的DLL也會)(參見note)

-o DIR, –out=DIR 指定spec文件的生成目錄,如果沒有指定,而且當前目錄是PyInstaller的根目錄,會自動創建一個用於輸出(spec和生成的可執行文件)的目錄.如果沒有指定,而當前目錄不是PyInstaller的根目錄,則會輸出到當前的目錄下.

-p DIR, –path=DIR 設置導入路徑(和使用PYTHONPATH效果相似).可以用路徑分割符(Windows使用分號,Linux使用冒號)分割,指定多個目錄.也可以使用多個-p參數來設置多個導入路徑,讓pyinstaller自己去找程序需要的資源

–icon=FILE.ICO

將file.ico添加為可執行文件的資源(只對Windows系統有效),改變程序的圖標 pyinstaller -i ico路徑 xxxxx.py

–icon=FILE.EXE,N 將file.exe的第n個圖標添加為可執行文件的資源(只對Windows系統有效)

-v FILE, –version=FILE 將verfile作為可執行文件的版本資源(只對Windows系統有效)

-n NAME, –name=NAME 可選的項目(產生的spec的)名字.如果省略,第一個腳本的主文件名將作為spec的名字

python 什麼工具打包exe 好

1.需要安裝 py2exe

2.示例代碼:

#exetest.py

#創建一個gui界面,只用一個標籤和按鈕,無功能

from Tkinter import *

win = Tk()

label = Label(win,text = ‘hello’)

btn = Button(win,text = ‘click’)

label.pack()

btn.pack()

win.mainloop()

3.配置代碼:

#exeset.py

from distutils.core import setup

import py2exe

setup(console=[“exetest.py”]) #運行的時候會有CMD窗口

#或者setup(windows=[“exetest.py”]) 運行的時候只有GUI

4.執行轉換

首先定位到文件目錄,然後運行CMD

python exeset.py py2exe

執行完畢之後會在該目錄中生成一個文件夾dist,裡面是生成的exe程序和相關依賴

5.使用pyinstaller

感覺pyinstaller比py2exe更好用,下載pyinstaller後解壓就好,然後把一個demo.py複製到目錄下,定位到位置後輸入命令:

python pyinstaller.py –onefile –windowed –icon=path\x.ico demo.py

其中 –onefile 表示只生成一個.exe文件,相關依賴都打包了, –windowed 表示生成的是GUI,否則是帶命令窗口的, –icon 是設置.exe的圖標。這些都是可選項。

Python Flask項目在Gitlab CI中自動打包Docker鏡像

第一步,在Gitlab中新建一個項目

第二步,克隆支本地

第三步,本地調通Python Flask項目

用VSCode打開該項目,先用flask在app.py下寫了一個hello world:

然後在index.html中寫下hello world,放在templates目錄下:

安裝flask依賴

用以下命令進行本地運行

打開瀏覽器進入localhost:5000即可看到Hello World

本地調試成功

第四步,本地調通Docker打包與容器運行

於是嘗試利用docker打包成鏡像,由於該項目依賴flask庫,所以在根目錄添加了requirements.txt文件,裡面標明了依賴庫以及相應的版本

然後編寫好了Dockerfile

運行命令開始打包:

打包成功,運行容器:

在瀏覽器瀏覽localhost沒有響應

查看日誌發現沒有報錯

再嘗試用瀏覽器打開127.0.0.1,也不行

網上搜索發現python flask在伺服器不能直接運行,需要藉助gunicorn

於是編寫了配置文件gunicorn.conf.py:

同時修改了Dockerfile:

以及修改了依賴包requirements.txt:

再打包鏡像、運行容器,發現可以正常運作了:

第五步,Gitlab CI設置腳本自動打包Docker鏡像

由於自建Docker鏡像倉庫和賬號是隱私信息,因此使用Gitlab CI變數代替,再在項目CI/CD設置內賦值

怎麼把 python 打包成 exe 可執行文件

Python是一個腳本語言,被解釋器解釋執行。它的發布方式:

.py文件:對於開源項目或者源碼沒那麼重要的,直接提供源碼,需要使用者自行安裝Python並且安裝依賴的各種庫。(Python官方的各種安裝包就是這樣做的)

.pyc文件:有些公司或個人因為機密或者各種原因,不願意源碼被運行者看到,可以使用pyc文件發布,pyc文件是Python解釋器可以識別的二進位碼,故發布後也是跨平台的,需要使用者安裝相應版本的Python和依賴庫。

可執行文件:對於非碼農用戶或者一些小白用戶,你讓他裝個Python同時還要折騰一堆依賴庫,那簡直是個災難。對於此類用戶,最簡單的方式就是提供一個可執行文件,只需要把用法告訴Ta即可。比較麻煩的是需要針對不同平台需要打包不同的可執行文件(Windows,Linux,Mac,…)。

本文主要就是介紹最後一種方式,.py和.pyc都比較簡單,Python本身就可以搞定。將Python腳本打包成可執行文件有多種方式,本文重點介紹PyInstaller,其它僅作比較和參考。

Freezing Your Code

各種打包工具的對比如下(來自文章Freezing Your Code):

Solution

Windows

Linux

OS X

Python 3

License

One-file mode

Zipfile import

Eggs

pkg_resources support

bbFreeze yes yes yes no MIT no yes yes yes

py2exe yes no no yes MIT yes yes no no

pyInstaller yes yes yes no GPL yes no yes no

cx_Freeze yes yes yes yes PSF no yes yes no

py2app no no yes yes MIT no yes yes yes

PS.其中pyInstaller和cx_Freeze都是不錯的,stackoverflow上也有人建議用cx_Freeze,說是更便捷些。pkg_resources新版的pyInstaller貌似是支持的。

安裝PyInstaller

對於那些網路比較穩定,能夠流暢使用pip源地址的用戶,直接下面的命令就可以搞定:

pip install pyinstaller

通常我們會下載源碼包,然後進入包目錄,執行下面的命令(需要安裝setuptools):

python setup.py install

安裝完後,檢查安裝成功與否:

pyinstaller –version

安裝成功後,就可以使用下面的命令了:

pyinstaller : 打包可執行文件的主要命令,詳細用法下面會介紹。

pyi-archive_viewer : 查看可執行包裡面的文件列表。

pyi-bindepend : 查看可執行文件依賴的動態庫(.so或.dll文件)

pyi-… : 等等。

使用PyInstaller

pyinstaller的語法:

pyinstaller [options] script [script …] | specfile

最簡單的用法,在和myscript.py同目錄下執行命令:

pyinstaller mycript.py

然後會看到新增加了兩個目錄build和dist,dist下面的文件就是可以發布的可執行文件,對於上面的命令你會發現dist目錄下面有一堆文件,各種都動態庫文件和myscrip可執行文件。有時這樣感覺比較麻煩,需要打包dist下面的所有東西才能發布,萬一丟掉一個動態庫就無法運行了,好在pyInstaller支持單文件模式,只需要執行:

pyinstaller -F mycript.py

你會發現dist下面只有一個可執行文件,這個單文件就可以發布了,可以運行在你正在使用的操作系統類似的系統的下面。

當然,pyinstaller還有各種選項,有通用選項,如-d選項用於debug,了解pyInstaller執行的過程;還有一些針對不同平台的選項,具體用法可以訪問PyInstaller官方WIKI。

在執行pyInstaller命令的時候,會在和腳本相同目錄下,生成一個.spec文件,該文件會告訴pyinstaller如何處理你的所有腳本,同時包含了命令選項。一般我們不用去理會這個文件,若需要打包數據文件,或者給打包的二進位增加一些Python的運行時選項時…一些高級打包選項時,需要手動編輯.spec文件。可以使用:

pyi-makespec options script [script …]

創建一個.spec文件,對於手動編輯的.spec文件,我們可以使用下面任意一條命令:

pyinstaller specfile

pyi-build specfile

PyInstaller的原理簡介

PyInstaller其實就是把python解析器和你自己的腳本打包成一個可執行的文件,和編譯成真正的機器碼完全是兩回事,所以千萬不要指望成打包成一個可執行文件會提高運行效率,相反可能會降低運行效率,好處就是在運行者的機器上不用安裝python和你的腳本依賴的庫。在Linux操作系統下,它主要用的binutil工具包裡面的ldd和objdump命令。

PyInstaller輸入你指定的的腳本,首先分析腳本所依賴的其他腳本,然後去查找,複製,把所有相關的腳本收集起來,包括Python解析器,然後把這些文件放在一個目錄下,或者打包進一個可執行文件裡面。

可以直接發布輸出的整個文件夾裡面的文件,或者生成的可執行文件。你只需要告訴用戶,你的應用App是自我包含的,不需要安裝其他包,或某個版本的Python,就可以直接運行了。

需要注意的是,PyInstaller打包的執行文件,只能在和打包機器系統同樣的環境下。也就是說,不具備可移植性,若需要在不同系統上運行,就必須針對該平台進行打包。

怎麼把python打包成exe

PyInstaller 是一個用來將 Python 程序打包成一個獨立可執行軟體包,支持 Windows、Linux 和 Mac OS X。

下載

2. 使用

python製作exe可執行文件的方法—使用pyinstaller

python生成windows下exe格式的可執行程序有三種可選方案: py2exe是大家所熟知的,今天要介紹pyinstaller, 這個工具全平台可用。我曾使用python製作一個工具程序供公司同事使用後,由於公司使用mac linux windows都有很多,就使用過它來將程序做成可執行文件,兼容性好,只是會使得程序在linux平台和mac平台啟動較慢(windows還是比較快的),但基本夠用。

安裝完pyinstaller之後就可以開始了。

1.使用pyinstaller生成可執行文件的方法

1.1 將依賴文件集中到一個文件夾:

pyinstaller -D -w main.py #把main.py替換成你的主入口python文件即可。

-w參數代表main.py是一個窗體程序。

1.2 將所有依賴文件都打包到同一個可執行文件中:

pyinstaller -F -w main.py

2.調查pyinstaller生成程序的載入過程

使用如下命令,可以得到運行時的跟蹤,tracing ,loader 的載入過程。

pyinstaller -Fwd aui.py #把aui.py 換成你需要偵測的文件即可。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/152161.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-12 00:55
下一篇 2024-11-12 00:55

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論