簡單使用setup.py來安裝Python項目


最近做個一個項目需要用到setup.py 這個構建工具來進行項目的便捷安裝,把搜集到的一些資料加上個人理解整理成文章,如有錯誤的地方請各位大佬及時指出,小弟馬上修改,下面正式進入setup.py的描述講解.

1.因為我們要用setup.py來將我們的項目打包成一個Python包,所以首先我們需要創建一個包文件夾,該包的命名依照以下包版本的命名格式:

  N.N[.N]+[{a|b|c|rc}N[.N]+][.postN][.devN]

    解釋:

  "N.N": 必須的部分,兩個"N" 分別代表了主板本和副版本號.

  "[.N]": 次要版本號,可以有零或多個.

  "{a|b|c|rc}": 階段代號,可選, a,b,c,rc  分別代表alpha, beta, candidate 和 release candidate.

  "N[.N]": 階段版本號,如果提供, 則至少有一位主版本號, 后面可以加無限多位的副版本號.

  ".postN": 發行后更新版本號, 可選.

  ".devN": 開發期間的發行版本號, 可選.

 注意: 上面涉及到的命名中的英文字母盡量全是小寫(我測試的時候是全用的小寫沒有出現什么問題,這個根據具體情況定吧).

2.包的版本號確定之后,需要弄清楚包里面應該包含那些文件, 一個標准的包里面應該包含CHANGES.rst , LICENSE , MANIFEST.in , README.rst , setup.py , setup.cfg , src(含有__init__.py 文件的文件夾), 可能有的文章還會介紹有別的文件,但是有這些文件基本上不會出現什么問題.

3.介紹完包中的文件之后,我們來看一下每個文件具體的作用.

  MANIFEST.in : 里面就是需要包含在分發包中的文件,也就是需要把要查找的分發的包的路徑寫上,例如:    

    
1 include MANIFEST.in 
2 recursive-include src/*
View Code

  setup.cfg : 文件主要用於提供setup.py 的默認參數, 我用到的是填上了pip 鏡像源的地址,如果有其他的需要,可以參考https://docs.python.org/3/distutils/configfile.html    

    
[easy_install]
Index_url = http://pypi.douban.com/simple
View Code

  src : 該文件夾里面含有__init__.py 文件, 還應該含有需要打包的源代碼, 主要用於setup.py 文件中的packages: find_packages() 這個參數.

  setup.py : 主要寫需要安裝的包的一些配置信息, 這里主要介紹一下里面常用到的一些基本的參數:

    name : 包的名稱, 以后查找的時候需要根據此名稱查詢.

    version : 包的版本號.

    license : 程序的授權許可信息.

    description : 程序的簡單描述.

    long_description : 程序的詳細描述.

    auther : 程序的作者.

    auther_email : 程序作者的郵箱.

    packages : 需要處理的包目錄 (包含__init__.py 文件的文件夾), 一般可以采用find_packages() 這個函數, 它會默認在和setup.py 同一目錄下搜索各個含有__init__.py 的包,也可以排除一些特定的包, find_packages(exclude=[" *.text", ....]).

    install_requires : 需要安裝的依賴包, 這個的值應該是一個list列表.

    download_url : 程序的下載地址.

    package_data : 指定包內需要包含的數據文件.

    data_files : 打包時需要打包的數據文件, 如圖片, 配置文件等.

    setup_requires : 指定運行setup.py 這個文件本身所依賴的包.

    include_package_data : 該參數設置為True 時, 自動添加包中受版本控制的數據文件.( 這個我也沒有太搞懂, 不過一般都會設置成True, 有大神明白的可以教教我,感謝! )

    zip_safe : 該參數決定了包是否作為一個zip壓縮后的egg 文件安裝,還是作為一個以 .egg 結尾的目錄安裝. 因為有些工具不支持zip壓縮文件, 而且壓縮后的包也不方便調試, 所以建議將其設置為False.

    entry_points : 發現動態服務和插件, 在entry_points 中, console_scripts 指明了命令行工具的名稱, 如下面的代碼示例一樣, 等號前面指明了工具包的名稱, 等號后面的內容指明了程序的入口地址, 這里可以有多條記錄, 這樣一個項目就可以制作多個命令行工具了.當我們想要啟動對應的程序時, 只需要輸入等號前面的工具包的名稱即可.  

      
 1 setup(
 2     # .....
 3     entry_points={
 4         "console_scripts": [
 5              "service_name=service.main",
 6              .....................
 7          ]   
 8     }   
 9 
10 )    
View Code

4.以上的我整理的內容就可以完成一般常規項目的setup.py 文件的制作了,如果需要添加具體別的功能參數可以參考以下網站:

  http://blog.konghy.cn/2018/04/29/setup-dot-py/

  https://docs.python.org/3/distutils/setupscript.html

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM