python打包,上傳包知識點學習

python 打包工具推薦

PyPi

PyPI(Python Package Index)是python官方的第三方庫的倉庫,全部人均可如下載第三方庫或上傳本身開發的庫到PyPI。PyPI推薦使用pip包管理器來下載第三方庫html

pip可正常工做在Windows、Mac OS、Unix/Linux等操做系統上,可是須要至少2.6+和3.2+的CPython或PyPy的支持。python 2.7.9 和3.4之後的版本已經內置累pip程序,因此不須要安裝python

安裝包的工具

    1. 使用pip安裝來自PyPI的包
    2. 將virtrualenv或venv用於python環境的應用級隔離

建立包與分發的公工具

    1. 使用setuptools來定義項目並建立源代碼發行版
    2. 使用wheel而不是egg來建立構建發行版
    3. 使用twine向PyPI上傳包的發行版

pip install安裝包與python install安裝包的區別windows

項目配置

組織大型應用的代碼的最簡單的方法舊式將其分紅幾個包,這樣作將使代碼更容易理解,維護和修改,也使每一個包的可複用性最大化,就像使用組件同樣方便。svn

setup.py

對於一個須要被分發的包來講,其根目錄包含一個setup.py腳本。它定義了distutils模塊中描述的全部元數據,並將其合併爲標準的setup()函數調用的參數。雖然distutils是一個標準庫模塊,但仍是建議你使用setuptools包來代替,它對標準的distutils作了一些改進。(distutils標準庫的加強版,適用於 Python 2.3.5 以上的版本,64 位平臺則適用於 Python 2.4 以上的版本)函數

Distutils使用介紹:http://www.javashuo.com/article/p-dtyeakfw-d.html工具

setup()函數,此函數的參數指定了如何配置本身的項目。
命令行工具,包括打包,測試,發佈等。能夠經過下面的命令查看;python setup.py --help-commands測試

setup.py文件中至少包含內容以下:ui

from setuptools import setup
setup(
    name="mypackage"
)

  name給出了包的全名,該腳本提供了一些命令spa

       standard commands:標準命令,是distutils提供的內置命令操作系統

Extra commands:額外命令,是由setuptools這樣的第三方包或任何其餘定義並註冊一個新命令的包所建立的

setup.cfg

 setup.cfg文件包含setup.py腳本命令的默認選項,若是構建和分法包的過程很複雜,而且須要像setup.py命令中傳入許多可選參數,那麼這個文件很是有用,Setup.py先解析setup.cfg文件

關於setup.py和setup.cfg的關係參考:https://blog.csdn.net/joelovegreen/article/details/46373619

setup.cfg的語法與內置configparser模塊提供的語法相同,相似與windows平臺下的ini文件。

setup.cfg 示例說明:

[global]
quiet=1

[sdist]
formats=zip,tar

[bdist_wheel]
universal=1

  這個配置示例能夠確保源代碼發行版是以兩種格式建立(ZIP和TAR),而且構建wheel發行版將被建立爲通用wheel(與pthon版本無關),此外,因爲全局quiet開關,每一個命令的大部分輸出都將被阻止

MANIFEST.in

此文件在打包的時候告訴setuptools還須要額外打包那些文件

通常狀況下,使用sdist命令構建發行版是,distutils將瀏覽包的目錄,查找須要包含在文檔中的文件,distutils將包含:

    1. py_modules,packages,和scripts選項隱含的全部pthon源文件
    2. ext_modules選項列出的全部C源文件
    3. 匹配glob模式test/test*.py的文件包括:README,README.txt,setup.py和setup.cfg
    4. 若是你的包是由svn或CVS管理,那麼sdist還將瀏覽諸如.svn之類的文件夾

若是你還像要包含除disutils包含文件以外的文件使,好比一些靜態文件,那麼在與setup.py相同的目錄中,你能夠爲MANIFSET文件定義一個名爲MANIFEST.in的模板,在其中你能夠指定sdist要包含哪些文件

這個模板的每一行都定義一條包含或排除規則,例如:

include HISTORY.txt

include README.txt

include CHANGES.txt

include LICENSE

recursive -include *.txt *.py

參考:http://www.imooc.com/article/253042

trove分離器

pypi和distutils爲應用程序的分類提供了一個解決方案,就是使用一套被稱爲trove分類器。全部分類器都造成一個樹狀結構,每一個分類器都是字符串形式,其中用::字符串分隔每一個命名空間,分類器列表在包定義中是做爲setup()函數的classifiers參數。例如以下項目的分類其列表:

from setuptools import setup
setup(
    name="solrq",
    classifiers=[
        'Development Status::4 -Beta',
        'License::OSI Approver :: BSD License',
        'Operating System :: OS Independent',
        'Programing Language :: Python',
        'Programing Language :: Python :: 2',
        'Programing Language :: Python :: 2.6',
    ]
)

  這個參數是可選的,trove還能夠提供一些信息:支持的python版本或系統,項目的開發階段或發佈代碼所使用的許可證

python命名空間和做用域詳解:https://www.jb51.net/article/114951.htm

上傳一個包

在pypi上發佈本身的包:http://www.javashuo.com/article/p-chgbdojm-mw.html

一篇很是好的python打包分發文章,內容幾乎都囊括並且還易懂:https://blog.csdn.net/chenfeidi1/article/details/80873979

經常使用工具

PyInstaller

  PyInstaller是一個壓縮python文件成爲可執行程序的一個軟件。它會掃描你全部的Python文檔,並分析全部代碼從而找出全部你的代碼運行所需的模塊。而後,PyInstaller會將全部這些模塊和你的code放在一個文件夾裏,或者一個可執行文件裏。這樣以來,你的用戶就不用下載各類你的軟件運行環境了,例如各類版本的python,各類不一樣的python包等等。他們只須要執行打包好的可執行文件就可使用你的軟件了

下面是PyInstaller使用的一個簡單示範:

將你的一個python文件:Hello.py打包成可執行文件: 
在終端的命令行簡單的輸入: 
pyinstaller Hello.py 
在當前的文件目錄裏面,將會生成兩個文件夾:build和dist。dist裏面就是全部可執行文件了

 

pyinstaller參數介紹以及總結:http://www.javashuo.com/article/p-qovgheyp-dg.html

總結Pyinstaller的坑及終極解決方法:http://www.javashuo.com/article/p-elfazlde-bh.htmlhttps://blog.csdn.net/u014563989/article/details/80940321

相關文章
相關標籤/搜索