所需文件及目錄規(guī)范
注意setup.py文件和MANIFEST.in文件需要放在和你需要打包的目錄同一級(jí)下,例如我這里需要打包的就是webconsole文件夾(這里webconsole文件夾指的是業(yè)務(wù)代碼文件夾也就是我下圖圈出來的文件夾,而不是最外層那個(gè)webconsole項(xiàng)目目錄文件夾,因?yàn)槲疫@里起了相同的文件夾名稱,怕各位混淆所以解釋一下)。靜態(tài)文件最好也放在同一級(jí)目錄下,當(dāng)然放在webconsole這種業(yè)務(wù)文件夾內(nèi)部也是可以的,這個(gè)具體看需求情況。
上面那張圖大家就先大概明確一下具體是干什么的, 我后面調(diào)整了目錄結(jié)構(gòu), 將static文件夾和templates文件夾都放到了業(yè)務(wù)代碼webconsole文件夾下, 這里解釋下為什么, 如果像我上圖一樣的話,最后打包完, pip install 自己的包, 那么static| templates| webconsole 這三個(gè)文件夾就會(huì)分散在各處,而不是都在一個(gè)webconsole包下.
我后面的內(nèi)容都會(huì)以下圖的目錄結(jié)構(gòu)來講解
示例演示
這里是指定我需要把這兩個(gè)文件夾下的文件打包進(jìn)去, 其中websocket/static/** 指的是業(yè)務(wù)文件夾websocket下的static文件夾下所有的文件包括子文件夾遞歸所有文件,
websocket/templates/* 指的是業(yè)務(wù)文件夾websocket下的, 不遞歸子文件夾
其中MANIFEST.in文件的語法如下圖所示,具體內(nèi)容參考官方文檔
下面的的setup文件沒什么好說的,網(wǎng)上有很多解釋,稍微貼一點(diǎn)用到的
setup() 函數(shù)中的部分參數(shù)含義如下:
name:包的名稱。
version:包的版本號(hào)。
description:包的簡要描述。
packages:包含的模塊或包的列表。
install_requires:該包所依賴的其他包。
classifiers:該包適用的 Python 版本、支持的操作系統(tǒng)、遵循的協(xié)議等信息。
打包命令需要在項(xiàng)目文件夾下,以我的項(xiàng)目為例也就是項(xiàng)目文件webconsole目錄下,執(zhí)行命令
python setup.py sdist bdist_wheel
完成后會(huì)在項(xiàng)目文件夾下生成一個(gè)dist文件夾,里面包含了兩個(gè)文件,如圖所示
如果改動(dòng)了上面打包的兩個(gè)文件,setup.py文件和MANIFEST.in,那么一定一定一定要先刪除下圖的這個(gè)文件夾,不然打包還是用的上一次的配置,這點(diǎn)很坑?。?!—
打包靜態(tài)文件補(bǔ)充說明
這里再解釋一下把靜態(tài)資源打包進(jìn)去的問題. 首先明確一下,我需要打包的是我的業(yè)務(wù)代碼文件夾webconsole下的所有東西, 以及最外層的項(xiàng)目文件夾webconsole下的templates和static目錄下的所有東西
這里有兩個(gè)點(diǎn)需要注意下, 第一個(gè)是你想打包靜態(tài)文件首先要能掃描到你的文件夾, 這里setup.py中的packages我寫的是find_packages(), 而把webconsole注釋掉了, 是因?yàn)槲蚁胍獟呙桧?xiàng)目文件夾webconsole下的所有文件夾及內(nèi)容, 這樣保險(xiǎn)一點(diǎn).
如果只想要webconsole業(yè)務(wù)文件下的文件,其余的不需要, 那就寫webconsole就行了
然后我需要將靜態(tài)文件打包進(jìn)去,有兩種方式:
第一種是在setup.py的package_data中指定
注意這里的 static/** 指的是static文件夾下所有遞歸的文件都會(huì)被放進(jìn)去, 而templates/* 這個(gè)只有一個(gè) * 星號(hào)指的是就只放templates下的文件,不遞歸其內(nèi)部的文件夾 當(dāng)然這里的 static 文件夾和 templates文件夾都是指的前面一步 setup.py文件中 packages 這一屬性所掃描到的包下的內(nèi)容文件
第二種方式就是在MANIFEST.in文件中指定, 此時(shí)setup.py中的package_data屬性就可以注釋掉了,只需要在MANIFEST.in文件中寫include規(guī)則,如下圖,(不推薦,雖然可以把靜態(tài)文件打包到包里,但是pip install的時(shí)候,包里面的一部分靜態(tài)文件install進(jìn)去了,一部分沒有install進(jìn)去,不知道為啥,有興趣的可以自行研究)
引用自己打的包
在其他項(xiàng)目中如果想引用自己打的包,那么直接pip install tar包文件路徑,就可以把自己的包引入進(jìn)項(xiàng)目里了。文章來源:http://www.zghlxwxcb.cn/news/detail-858914.html
pip install /path/to/your/package/dist/mypackage-0.1.0.tar.gz
如果pip install報(bào)錯(cuò)No module named ‘setuptools.command.build’,那么可能是setup版本過高或過低,我這邊是過高了,所以卸載了原來的版本(67.6.0)重新裝了個(gè)低版本(65.6.3)。文章來源地址http://www.zghlxwxcb.cn/news/detail-858914.html
到了這里,關(guān)于setup.py方式打包自己的python代碼并可以用pip install安裝的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!