Python的setuptools详解【1】
一 基本概念
1.什么是setuptools
setuptools是Python distutils增強(qiáng)版的集合,它可以幫助我們更簡(jiǎn)單的創(chuàng)建和分發(fā)Python包,尤其是擁有依賴關(guān)系的。所謂分發(fā),就是將自己做的包,安裝到操作系統(tǒng)內(nèi)。
強(qiáng)調(diào)一點(diǎn),setuptools是在產(chǎn)生包時(shí)候用,到包創(chuàng)作完成后,用戶在使用setuptools創(chuàng)建的包時(shí),并不需要已安裝setuptools,只要一個(gè)啟動(dòng)模塊(__init__.py)即可。
2 setuptools功能亮點(diǎn):
- 利用EasyInstall自動(dòng)查找、下載、安裝、升級(jí)依賴包
- 創(chuàng)建Python Eggs
- 包含包目錄內(nèi)的數(shù)據(jù)文件
- 自動(dòng)包含包目錄內(nèi)的所有的包,而不用在setup.py中列舉
- 自動(dòng)包含包內(nèi)和發(fā)布有關(guān)的所有相關(guān)文件,而不用創(chuàng)建一個(gè)MANIFEST.in文件
- 自動(dòng)生成經(jīng)過包裝的腳本或Windows執(zhí)行文件
- 支持Pyrex,即在可以setup.py中列出.pyx文件,而最終用戶無須安裝Pyrex
- 支持上傳到PyPI
- 可以部署開發(fā)模式,使項(xiàng)目在sys.path中
- 用新命令或setup()參數(shù)擴(kuò)展distutils,為多個(gè)項(xiàng)目發(fā)布/重用擴(kuò)展
- 在項(xiàng)目setup()中簡(jiǎn)單聲明entry points,創(chuàng)建可以自動(dòng)發(fā)現(xiàn)擴(kuò)展的應(yīng)用和框架
? ? 總之,setuptools就是比distutils好用的多,基本滿足大型項(xiàng)目的安裝和發(fā)布
3 什么是python Eggs
python蛋,是用于將自己開發(fā)的安裝包部署到操作系統(tǒng)環(huán)境下。由于python在全系統(tǒng)可見,因此,在python程序下,直接import??xxx就可以應(yīng)用。python蛋就是python代碼,用unzip解壓后,一看便知。
二、安裝setuptools
如果python環(huán)境沒有setuptools,需要安裝,下面推薦兩個(gè)安裝方法如下:
1) 方法1:最簡(jiǎn)單安裝,假定在ubuntu下
- sudo apt-get install python-setuptools
2) 方法2:啟動(dòng)腳本安裝
- wget?http://peak.telecommunity.com/dist/ez_setup.py
- sudo python ez_setup.py
三 實(shí)驗(yàn)1:創(chuàng)建一個(gè)工程,內(nèi)部有一個(gè)程序,并安裝到系統(tǒng)
1.創(chuàng)建一個(gè)簡(jiǎn)單的包
有了setuptools后,試圖創(chuàng)建一個(gè)工程包demo.首先創(chuàng)建一個(gè)臨時(shí)目錄mydesk用以存放demo工程。在mydesk中,創(chuàng)建一個(gè)子目錄(名叫demo),這就是工程的根路徑。
cd /mydesk mkdir demo cd demodemo是工程的根目錄,進(jìn)入demo,創(chuàng)建根目錄的第一個(gè)文件:setup.py文件
from setuptools import setup, find_packages setup(name = "demo",version = "0.1",packages = find_packages(), )在當(dāng)前目錄下,執(zhí)行
python3 setup.py bdist_egg
注意這條命令,形如 “ python3 setup.py? xxx”??的命令很多,其中本地生成一個(gè)python-egg的命令就是xxx=bdist_egg。本地工程的“打包”動(dòng)作完成。
ls
?觀察demo文件夾,發(fā)現(xiàn)setup.py旁邊多了三個(gè)文件目錄:build,demo.egg-info,dist,下面一一介紹其意義。
huatec@LAPTOP-J5TGQHQH:~/mydesk/demo$ tree . ├── build │?? └── bdist.linux-x86_64 ├── demo.egg-info │?? ├── PKG-INFO │?? ├── SOURCES.txt │?? ├── dependency_links.txt │?? └── top_level.txt ├── dist │?? └── demo-0.1-py3.8.egg └── setup.py【1】dist目錄
在dist中生成的是egg包,這是一個(gè)將來部署到python系統(tǒng)的文件包,是主要組成部分。
file dist/demo-0.1-py2.7.egg ./dist/demo-0.1-py3.8.egg: Zip archive data, at least v2.0 to extract看一下生成的.egg文件,是個(gè)zip包,解開看看先
~/mydesk/demo$ unzip -l ./dist/demo-0.1-py3.8.eggArchive: ./dist/demo-0.1-py3.8.eggLength Date Time Name --------- ---------- ----- ----176 2021-11-10 09:36 EGG-INFO/PKG-INFO120 2021-11-10 09:36 EGG-INFO/SOURCES.txt1 2021-11-10 09:36 EGG-INFO/dependency_links.txt1 2021-11-10 09:36 EGG-INFO/top_level.txt1 2021-11-10 09:36 EGG-INFO/zip-safe --------- -------299 5 files huatec@LAPTOP-J5TGQHQH:~/mydesk/demo$我們可以看到,里面是一系列自動(dòng)生成的文件。現(xiàn)在可以介紹一下剛剛setup()中的參數(shù)了
name 包名 version 版本號(hào) packages 所包含的其他包要想發(fā)布到PyPI中,需要增加別的參數(shù),這個(gè)可以參考官方文檔中的例子了。
【2】 demo.egg-info目錄
此文件夾下,包含所有的,對(duì)python-egg的描述文件,是次要組成部分。
【3】build目錄
此目錄是具有C++、C語(yǔ)言的程序,編譯過后的可調(diào)用庫(kù)存在的地方,在python下一般不用。此文件夾是工程的重要組成部分。
上面生成的egg中沒有實(shí)質(zhì)的內(nèi)容,除了可以看看結(jié)構(gòu),沒有實(shí)際意義,下面添加一點(diǎn)內(nèi)容。
2.在簡(jiǎn)單的包內(nèi)追加一個(gè)程序
在demo中執(zhí)行mkdir demo,再創(chuàng)建一個(gè)目錄,在這個(gè)demo目錄中創(chuàng)建一個(gè)__init__.py的文件,表示這個(gè)目錄是一個(gè)包,然后寫入:
#!/usr/bin/env python #-*- coding:utf-8 -*-def test():print("hello world!")if __name__ == '__main__':test()現(xiàn)在的主目錄結(jié)構(gòu)為下:
demo |-- demo | `-- __init__.py `-- setup.py 再次執(zhí)行python setup.py bdist_egg后,再看egg包$ unzip -l ./dist/demo-0.1-py3.8.eggArchive: ./dist/demo-0.1-py3.8.eggLength Date Time Name --------- ---------- ----- ----176 2021-11-10 11:15 EGG-INFO/PKG-INFO137 2021-11-10 11:15 EGG-INFO/SOURCES.txt1 2021-11-10 11:15 EGG-INFO/dependency_links.txt5 2021-11-10 11:15 EGG-INFO/top_level.txt1 2021-11-10 11:15 EGG-INFO/zip-safe124 2021-11-10 11:12 demo/__init__.py379 2021-11-10 11:15 demo/__pycache__/__init__.cpython-38.pyc --------- -------823 7 files這回包內(nèi)多了demo目錄,顯然已經(jīng)有了我們自己的東西了.下一步將其安裝到python系統(tǒng)。
python setup.py install這個(gè)命令會(huì)講我們創(chuàng)建的egg安裝到python的dist-packages目錄下,我這里的位置在
tree /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.egg查看一下它的結(jié)構(gòu):
$ unzip -l /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.eggArchive: /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.eggLength Date Time Name --------- ---------- ----- ----176 2021-11-10 11:23 EGG-INFO/PKG-INFO137 2021-11-10 11:23 EGG-INFO/SOURCES.txt1 2021-11-10 11:23 EGG-INFO/dependency_links.txt5 2021-11-10 11:23 EGG-INFO/top_level.txt1 2021-11-10 11:23 EGG-INFO/zip-safe124 2021-11-10 11:12 demo/__init__.py379 2021-11-10 11:23 demo/__pycache__/__init__.cpython-38.pyc --------- -------823 7 files打開python終端或者ipython都行,直接導(dǎo)入我們的包
>>> import demo >>> demo.test() hello world! >>>好了,執(zhí)行成功!
這里強(qiáng)調(diào):egg文件中已經(jīng)包含所有關(guān)于源程序,以及路徑的信息。與/usr/local/lib/python3.8/dist-packages/下存放路徑和文件完全等價(jià)
?sudo unzip? ?/usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.egg
將看到生成程序文件路徑和說明文件路徑。再次強(qiáng)調(diào):egg就是執(zhí)行程序。?
總結(jié)
以上是生活随笔為你收集整理的Python的setuptools详解【1】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 索爱麦克风免驱动的语音录入测试
- 下一篇: ubuntu下安装java和tomcat