Python提供了多種工具和庫蔗彤,用于將Python代碼打包成可執(zhí)行文件或庫孝扛,以便在沒有安裝Python的環(huán)境中運(yùn)行舀锨,或者方便地分發(fā)和管理。
以下是一些常用的Python打包管理工具:
PyInstaller:
PyInstaller是一個(gè)在多個(gè)平臺上(包括Windows沪编、GNU/Linux呼盆、macOS等)將Python程序打包成獨(dú)立可執(zhí)行文件的工具。它特別適用于將Python腳本凍結(jié)為獨(dú)立的應(yīng)用程序蚁廓,以便在沒有安裝Python的環(huán)境中執(zhí)行访圃。PyInstaller的主要優(yōu)點(diǎn)包括支持多平臺、構(gòu)建小尺寸的可執(zhí)行文件相嵌,以及確保兼容性腿时。Pyinstaller打包工具使用說明在另外一篇文章已經(jīng)講解。PyInstaller適合將Python程序打包成獨(dú)立的可執(zhí)行文件饭宾,便于在沒有Python環(huán)境的計(jì)算機(jī)上運(yùn)行批糟。
Docker
則提供了一個(gè)更高級別的抽象,用于構(gòu)建看铆、部署和管理整個(gè)應(yīng)用程序的運(yùn)行環(huán)境跃赚,確保應(yīng)用程序在不同環(huán)境中的一致性和可移植性。使用Docker部署python程序流程
setuptools:
setuptools是Python生態(tài)系統(tǒng)中用于創(chuàng)建和管理軟件包的工具性湿。它提供了一套標(biāo)準(zhǔn)流程,幫助將源代碼满败、依賴項(xiàng)肤频、文檔等打包成符合Python打包規(guī)范的格式,如wheel或tar.gz格式算墨。setuptools還支持生成易于安裝的腳本宵荒,使用戶能夠通過一條簡單的命令在自己的環(huán)境中安裝模塊。
setuptools和setup.py文件主要用于定義項(xiàng)目的元數(shù)據(jù)净嘀、依賴關(guān)系报咳,并通過pip進(jìn)行分發(fā)。盡管PEP 518引入了pyproject.toml文件的使用挖藏,但setuptools和setup.py在打包Python項(xiàng)目時(shí)仍然被廣泛使用暑刃。
這些工具各有特點(diǎn),適用于不同的需求膜眠。例如岩臣,如果你需要將Python代碼打包成可在沒有Python的環(huán)境中運(yùn)行的獨(dú)立應(yīng)用程序溜嗜,PyInstaller是一個(gè)不錯(cuò)的選擇。如果你需要將你的模塊或庫打包并分發(fā)給其他開發(fā)者使用架谎,那么setuptools可能更適合炸宵。
setuptools提供的主要的功能有:
python庫的打包分發(fā)(本章主講)
依賴包安裝與版本管理
python環(huán)境限制
生成腳本
c/c++ 拓展
本章主要講解setuptools
在Python開發(fā)中,我們經(jīng)常需要將自己的代碼打包成可供其他人使用的庫或應(yīng)用程序谷扣。為了方便用戶安裝和使用土全,我們需要?jiǎng)?chuàng)建一個(gè)配置文件 setup.py,用于定義打包的相關(guān)信息和依賴項(xiàng)会涎。本文將詳細(xì)介紹如何編寫 setup.py 文件裹匙,并展示每一步需要做什么。
#安裝最新版的setuptools和wheel
python3 -m pip install --user --upgrade setuptools wheel
#構(gòu)建安裝時(shí)所需的所有內(nèi)容:
python setup.py build
#使用sdist構(gòu)建格式的源碼分發(fā)包
python setup.py sdist
#在windows中我們習(xí)慣了雙擊 exe 進(jìn)行軟件的安裝在塔,Python 模塊的安裝也同樣支持 打包成 exe 這樣的二進(jìn)制軟件包幻件。
python setup.py bdist wininst
#而在 Linux 中,大家也習(xí)慣了使用 rpm 來安裝包蛔溃,對此你可以使用這條命令實(shí)現(xiàn) rpm 包的構(gòu)建
python setup.py bdist rpm
#若你喜歡使用 easy_instal 或者 pip 來安裝離線包绰沥。你可以將其打包成 egg 包
python setup.py bdist egg
#若你的項(xiàng)目,需要安裝多個(gè)平臺下贺待,既有 Windows 也有 Linux徽曲,按照上面的方法,多種格式我們要執(zhí)行多次命令為了方便麸塞,你可以一步到位秃臣,執(zhí)行如下這條命令,即可生成多個(gè)格式的進(jìn)制包
python setup.py bdist
#使用sdist構(gòu)建格式whl的源碼分發(fā)包
python setup.py sdist bdist_wheel
#只不過創(chuàng)建的文件類型是 tar.gz哪工,文件名為 應(yīng)用名-版本號.tar.gz奥此。也是保存在 dist 文件夾下
python setup.py sdist --formats=gztar
#下面的安裝命令會(huì)將當(dāng)前的 Python 應(yīng)用安裝到當(dāng)前Python 環(huán)境的 site-packages 目錄下,這樣其他程序就可以像導(dǎo)入標(biāo)準(zhǔn)庫一樣已入該應(yīng)田的代碼
python setup.py install
#如果應(yīng)用在開發(fā)過程中會(huì)頻繁變更雁比,每次安裝還需要先將原來的版本卸掉稚虎,這樣就會(huì)很麻煩。如果使用 develop 開發(fā)方式安裝的話偎捎,應(yīng)用代碼不會(huì)真的被拷貝到本地 Python 環(huán)境的 site-packages 目錄下蠢终,而是在 site-packages 日錄里創(chuàng)建一個(gè)指向當(dāng)前應(yīng)用位置的鏈接。這樣如果當(dāng)前位置的源碼被改動(dòng)茴她,就會(huì)馬上反映到 site-packages 里寻拂。
python setup.py develop
#或者也可以使用命令
pip install -e .
setup.py是一個(gè) python 文件,它的存在表明您要安裝的模塊/包可能已經(jīng)用 Setuptools 打包和分發(fā)丈牢,這是分發(fā) Python 模塊的標(biāo)準(zhǔn)祭钉。 它的目的是正確安裝軟件。
setuptools是python自帶的用來構(gòu)建包的工具己沛,構(gòu)建出來的wheel(.whl)可供其他人pip install和import朴皆。
簡單的setup.py程序
from setuptools import setup, find_packages
setup(
name='helloworld',
version='1.9',
description='setup tools dome',
author='hauye6018',
author_email='1063065477.@qq.com',
# packages=['image_index_measures'],
packages=find_packages(),
license='MIT',
long_description=open('README.md',encoding='utf-8').read(),
)
引入靜態(tài)文件
如果想引入靜態(tài)文件帕识,如JS、CSS遂铡、圖片等肮疗,怎么做?在項(xiàng)目根目錄下添加一個(gè)"MANIFEST.in”文件夾。假設(shè)我們把,所有靜態(tài)文件都放在"static”子目錄下我們在清單文件”MANIFEST.in“中扒接,列出想要在包內(nèi)引入的目錄路徑
recursive-include myapp/static
recursive-include myapp/xxx*
recursive-include表明包含子日錄伪货。
在"setup.py"中將include_package data參數(shù)設(shè)為True:
#coding:utf8from setuptools import setup
setup(
name='MyApp#項(xiàng)目名version='1.0',#版本號
packages=['myapp’,
#包括在安裝包內(nèi)的Python包include package data=True
#啟用清單文件MANIFEST.in
如果你想排除一部分文件钾怔,可以在“setup.py"中使用exclude_package date參數(shù):
setup(
#```
include_package data=True碱呼,#啟用清單文件
MANIFEST.inexclude package date={'':['.gitignore']})
以下參考文獻(xiàn):