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
pip install安裝包與python install安裝包的區別windows
組織大型應用的代碼的最簡單的方法舊式將其分紅幾個包,這樣作將使代碼更容易理解,維護和修改,也使每一個包的可複用性最大化,就像使用組件同樣方便。svn
對於一個須要被分發的包來講,其根目錄包含一個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.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開關,每一個命令的大部分輸出都將被阻止
此文件在打包的時候告訴setuptools還須要額外打包那些文件
通常狀況下,使用sdist命令構建發行版是,distutils將瀏覽包的目錄,查找須要包含在文檔中的文件,distutils將包含:
若是你還像要包含除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
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.html,https://blog.csdn.net/u014563989/article/details/80940321