常用的Python打包管理工具簡介

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):

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宗侦,隨后出現(xiàn)的幾起案子愚臀,更是在濱河造成了極大的恐慌,老刑警劉巖矾利,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姑裂,死亡現(xiàn)場離奇詭異,居然都是意外死亡男旗,警方通過查閱死者的電腦和手機(jī)舶斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來察皇,“玉大人茴厉,你說我怎么就攤上這事∈踩伲” “怎么了矾缓?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稻爬。 經(jīng)常有香客問我嗜闻,道長,這世上最難降的妖魔是什么因篇? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮笔横,結(jié)果婚禮上竞滓,老公的妹妹穿的比我還像新娘。我一直安慰自己吹缔,他們只是感情好商佑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厢塘,像睡著了一般茶没。 火紅的嫁衣襯著肌膚如雪肌幽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天抓半,我揣著相機(jī)與錄音喂急,去河邊找鬼。 笑死笛求,一個(gè)胖子當(dāng)著我的面吹牛廊移,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播探入,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼狡孔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜂嗽?” 一聲冷哼從身側(cè)響起苗膝,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎植旧,沒想到半個(gè)月后辱揭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隆嗅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年界阁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖喳。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泡躯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丽焊,到底是詐尸還是另有隱情较剃,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布技健,位于F島的核電站写穴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雌贱。R本人自食惡果不足惜啊送,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欣孤。 院中可真熱鬧馋没,春花似錦、人聲如沸降传。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至声旺,卻和暖如春笔链,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腮猖。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工鉴扫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缚够。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓幔妨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谍椅。 傳聞我的和親對象是個(gè)殘疾皇子误堡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • setuptools是Python distutils增強(qiáng)版的集合,它可以幫助我們更簡單的創(chuàng)建和分發(fā)Python包...
    tafanfly閱讀 720評論 0 0
  • 本站文章除注明轉(zhuǎn)載外雏吭,均為本站原創(chuàng)或者翻譯锁施。 本站文章歡迎各種形式的轉(zhuǎn)載,但請18歲以上的轉(zhuǎn)載者注明文章出處杖们,尊重...
    Michael_林閱讀 728評論 1 1
  • 1. distutils distutils是 python 標(biāo)準(zhǔn)庫的一部分悉抵,2000年發(fā)布。使用它能夠進(jìn)行 py...
    楊圣明閱讀 326評論 0 1
  • 一摘完、困惑 作為一個(gè) Python 初學(xué)者姥饰,我在包管理上感到相當(dāng)疑惑(嗯,是困惑)孝治。主要表現(xiàn)在下面幾個(gè)方面: 這幾個(gè)...
    PyChina閱讀 1,183評論 1 6
  • 學(xué)習(xí)Python的時(shí)候列粪,被Python的各種包管理工具搞的眼花繚亂。通常經(jīng)常會(huì)看到以下幾種:distutils 谈飒、...
    aidenliu閱讀 8,115評論 0 0