python -m zipapp source [options]
在上面命令中,source 引數代表要打包的 Python 源程式或目錄,該引數既可以是單個的 Python 檔案,也可以是資料夾。如果 source 引數是資料夾,那麼 zipapp 模組會打包該資料夾中的所有 Python 檔案。def say_hello(name): return name + ",您好!"然後在該目錄下開發一個 app.py 程式來使用 say_hello 模組:
from say_hello import * def main(): print('程式開始執行') print(say_hello('孫悟空'))在命令列工具中進入該目錄(app 目錄的父目錄),然後執行如下命令:
python -m zipapp app -o first.pyz -m "app:main"
上面命令指定將當前目錄下的 app 子目錄下的所有 Python 原始檔打包成一個檔案包,並通過 -o 選項指定所生成的檔案包的檔名為 first.pyz;-m 選項指定使用 app.py 模組中的 main 函數作為程式入口。
python first.pyz
程式開始執行
孫悟空,您好!
python -m zipapp app -m "app:main"
上面命令沒有指定 -o 選項,這意味著該命令將會使用預設的輸出檔名:source 引數值加 .pyz 字尾。執行上面命令,將會在當前目錄下生成一個 app.pyz 檔案。from exec_select import * # 執行query_db()函數 query_db()其中,exec_select.py 檔案需要自己新增,包含程式碼如下:
# 匯入存取MySQL的模組 import mysql.connector def query_db(): # ①、連線資料庫 conn = conn = mysql.connector.connect(user='root', password='32147', host='localhost', port='3306', database='python', use_unicode=True) # ②、獲取游標 c = conn.cursor() # ③、呼叫執行select語句查詢資料 c.execute('select * from user_tb where user_id > %s', (2,)) # 通過游標的description屬性獲取列資訊 for col in (c.description): print(col[0], end='t') print('n--------------------------------') # 直接使用for迴圈來遍歷遊標中的結果集 for row in c: print(row) print(row[1] + '-->' + row[2]) # ④、關閉游標 c.close() # ⑤、關閉連線 conn.close()最後按照如下步驟將 dbapp 子目錄下的應用打包成獨立應用:
python -m pip install -r requirements.txt --target dbapp
上面命令實際上就是使用 pip 模組來安裝模組,其中 python -m pip install 表示要安裝模組。--target 選項指定將模組安裝到指定目錄下,此處指定將依賴模組安裝到 dbapp 子目錄下。-r 選項指定要安裝哪些模組,此處使用 requirements.txt 檔案列出要安裝的模組和包。-r 選項支援兩個值:當應用依賴的模組較多時,建議使用清單檔案來列出所依賴的模組。
如果直接執行上面命令,pip 模組會提示找不到 requirements.txt 檔案,因此需要在當前目錄下新增一個 requirements.txt 檔案,並在該檔案中增加如下一行。mysql-connector-python
如果專案需要依賴多個模組,則可以在 requirements.txt 檔案中定義多行,每行定義一個模組。python -m zipapp dbapp
與上一節所使用的命令相比,該命令沒有使用 -m 邊項來指定程式入口,該程式將會使用檔案包中的 __main__.py 檔案作為程式入口。執行上面命令,將會得到一個大約為 18MB 的檔案包。因為該檔案包自包含了 mysql-connector-python 模組,所以比較大。pip uninstall mysql-connector-python
此時在本機的 Python 目錄下不再包含 mysql-connector-python 模組,但 dbapp.pyz 程式依然可以正常執行,因為它自包含了 mysql-connector-python 模組。