Python 分發(fā)工具初探之 setuptools 進階

      網(wǎng)友投稿 1178 2022-05-30

      在上篇文章中我們知道了 setuptools 是什么,以及它基本的功能和用法。在這篇文章中,我們會介紹如何講setuptools應(yīng)用于稍大的項目中,通過 setuptools 控制包中的文件。

      0x03 使用 find_packages()

      在之前的例子中,我們使用的都是 setup() 的默認(rèn)參數(shù),使用默認(rèn)參數(shù)只能打包一些簡單的、不復(fù)雜的工程,如果我們的工程中的文件越來越多,就不能使用它的默認(rèn)參數(shù)了。

      現(xiàn)在我們來建這樣一個工程:

      . ├── setup.py └── src ├── demo.egg-info │?? ├── PKG-INFO │?? ├── SOURCES.txt │?? ├── dependency_links.txt │?? └── top_level.txt └── test ├── __init__.py ├── a.txt └── data ├── data1.dat └── data2.dat 4 directories, 9 files

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      如果像之前那樣使用 setup() 的默認(rèn)參數(shù)來進行打包,我們會看到的 egg 如下:

      Archive: demo1-0.1-py2.7.egg Length Date Time Name -------- ---- ---- ---- 1 03-25-16 20:27 EGG-INFO/dependency_links.txt 177 03-25-16 20:27 EGG-INFO/PKG-INFO 141 03-25-16 20:27 EGG-INFO/SOURCES.txt 5 03-25-16 20:27 EGG-INFO/top_level.txt 1 03-25-16 20:27 EGG-INFO/zip-safe 102 03-22-16 23:48 test/__init__.py 354 03-25-16 20:27 test/__init__.pyc -------- ------- 781 7 files

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      依然是只有 __init__.py ,如果我們要想把上邊目錄中的 .txt 文件和 /data 下的 .dat 文件也包含到我們的egg包中,我們需要修改 setup.py :

      #-*- coding:utf-8 -*- from setuptools import setup, find_packages setup( name = "demo", version = "0.1", # 包含所有src目錄下的包 packages = find_packages('src'), package_dir = {'':'src'}, package_data = { # 包含所有.txt文件 '':['*.txt'], # 包含data目錄下所有的.dat文件 'test':['data/*.dat'], } )

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      這時我們再看一下 egg 包中的內(nèi)容:

      Archive: demo-0.1-py2.7.egg Length Date Time Name -------- ---- ---- ---- 1 03-25-16 20:47 EGG-INFO/dependency_links.txt 176 03-25-16 20:47 EGG-INFO/PKG-INFO 220 03-25-16 20:47 EGG-INFO/SOURCES.txt 5 03-25-16 20:47 EGG-INFO/top_level.txt 1 03-25-16 20:47 EGG-INFO/zip-safe 102 03-22-16 23:48 test/__init__.py 354 03-25-16 20:47 test/__init__.pyc 0 03-25-16 17:24 test/a.txt 0 03-25-16 17:24 test/data/data1.dat 0 03-25-16 17:24 test/data/data2.dat -------- ------- 859 10 files

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      Python 分發(fā)工具初探之 setuptools 進階

      11

      12

      13

      14

      15

      我們也可以排除掉某些文件:

      find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])

      1

      0x04 使用 entry_points

      entry_points 是一個字典,從entry point組名映射道一個表示entry point的字符串或字符串列表。Entry points是用來支持動態(tài)發(fā)現(xiàn)服務(wù)和插件的,也用來支持自動生成腳本。

      比如說:

      setup( entry_points = { 'console_scripts': [ 'foo = demo:test', 'bar = demo:test', ], 'gui_scripts': [ 'baz = demo:test', ] } ) 我們再安裝這個 egg,會發(fā)現(xiàn)在安裝過程中會出現(xiàn): ```bash Installing foo script to /usr/local/bin Installing bar script to /usr/local/bin

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      查看 /usr/local/bin/foo 內(nèi)容:

      #!/usr/bin/python
      # EASY-INSTALL-ENTRY-SCRIPT: 'demo==0.1','console_scripts','foo' __requires__ = 'demo==0.1' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit( load_entry_point('demo==0.1', 'console_scripts', 'foo')() )

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      這個內(nèi)容其實顯示的意思是,foo將執(zhí)行 console_scripts 中定義的foo所代表的函數(shù)。執(zhí)行foo,發(fā)現(xiàn)打出了 hello world!,和預(yù)期結(jié)果一樣。

      0x05 總結(jié)

      這篇文章介紹了一些 setuptools 比較進階的使用方法,對于更詳細(xì)的其他用法,詳見官方文檔

      Python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:基于vite2+electron13+elementPlus跨端仿mac osx桌面管理
      下一篇:接口測試怎么進行,如何做好接口測試
      相關(guān)文章
      亚洲人成网站在线观看播放动漫| 在线观看国产一区亚洲bd| 亚洲乱码一二三四区乱码| 国产成人综合久久精品亚洲| 亚洲日本国产精华液| 亚洲区小说区图片区QVOD| 在线精品亚洲一区二区三区| 亚洲国产婷婷综合在线精品| 亚洲国产精品久久久久秋霞小| 亚洲av无码一区二区三区天堂古代| 亚洲AV无码国产精品色午友在线 | 中文字幕中韩乱码亚洲大片| 亚洲av片一区二区三区| 国产成人亚洲毛片| 亚洲精品高清一二区久久| 亚洲国产一区二区三区在线观看| 亚洲精品成a人在线观看☆| 蜜芽亚洲av无码一区二区三区| 国产精品亚洲色图| 亚洲人成影院在线无码观看| 黑人大战亚洲人精品一区| 国产亚洲婷婷香蕉久久精品 | 久久精品国产亚洲综合色| 亚洲国产AV无码专区亚洲AV | 亚洲综合精品香蕉久久网97| 亚洲视频精品在线观看| 亚洲最大黄色网址| 亚洲国产精品综合久久20| 亚洲欧洲无码一区二区三区| 亚洲中文字幕无码中文字| 色欲色欲天天天www亚洲伊| 国产亚洲男人的天堂在线观看| 亚洲精品一级无码中文字幕| 中文字幕亚洲一区| 五月天网站亚洲小说| 亚洲欧洲精品久久| 亚洲欧洲免费无码| 激情婷婷成人亚洲综合| 国产亚洲午夜高清国产拍精品 | 亚洲AV电影院在线观看| 亚洲国产成人久久综合碰碰动漫3d|