1. 程式人生 > >04-Python-包&模組-包和模組的高階操作

04-Python-包&模組-包和模組的高階操作

學習地址:

撩課-Python大資料+人工智慧1
撩課-Python大資料+人工智慧2
撩課-Python大資料+人工智慧3
撩課-Python大資料+人工智慧4
撩課-Python大資料+人工智慧5
撩課-Python大資料+人工智慧6
撩課-Python-GUI程式設計-PyQt5

1.包和模組的高階操作

0. 文件地址
		https://python-packaging.readthedocs.io/en/latest/minimal.html
1. 賬號操作
		註冊賬號
			https://pypi.python.org/pypi
		郵箱驗證
			https://pypi.org/manage/account/
		備註
			賬號:
				oneshunzi
			密碼:
				你猜

2. 環境準備

		1. setuptools安裝
			https://pypi.python.org
				搜尋setuptools
				下載原始碼檔案
					
			解壓後,開啟命令列工具,切換當前目錄為setup.py所在目錄
				cd xxx目錄
			在命令列中執行命令
				python setup.py install
					python3 setup.py install
		2. pip安裝
			setuptools安裝完畢後,會有一個安裝指令碼
				easy_install
			在命令列中執行
				easy_install pip
					easy_install-3.6 pip
		3. wheel安裝
			在命令列中執行
				pip install wheel
					python3 -m pip install wheel
		4. twine安裝
			功能作用
				一個三方包
				可以幫助我們上傳庫到Pypi平臺
			安裝方式
				pip install twine
					python3 -m pip install twine
		注意
			安裝的Python版本環境問題
3. 釋出前準備
		1. 建立一個專案
			專案結構
				專案名稱
					包名稱
						__init__.py
						模組
					模組
					setup.py
					作用
						專案資訊的配置檔案
						這個裡面最重要的就是執行一個setup函式,通過這個函式來指明資訊
					示例
						from distutils.core import setup
setup(形參1=實參1, 形參2=實參2)
						from setuptools import setup
setup(形參1=實參1, 形參2=實參2)
							建議使用
					引數說明
						名稱
							name
							例:name="sz-lib"
						版本
							version
							例:version="1.0.0"
						描述資訊
							description
							例:description=“this is a very niubi lib”
						需要處理的包列表
							packages
							例:packages=["szlib"]
							注意
								可以使用find_packages()
								會自動幫我們檢索包(即包含__init__.py的資料夾)
						需要處理的單檔案模組列表
							py_modules
							例:py_modules=["single_module"]
						作者
							author
							例:author="Sz"
						作者郵箱
							author_email
							例:author_email="
[email protected]
" 長描述 long_description 會顯示在Pypi的專案介紹中 例:long_description="這裡的字串可以是從readme.rst檔案中讀取進來的" 依賴的其他包 install_requires 例:install_requires=['requests>2.18'] Python版本限制 python_requires 例:python_requires=“>=3” 專案主頁地址 url 例:url="https://github.com/wangshunzi/Python_code" 協議 license 例:license="MIT" ... 具體setup.py指令碼文件 https://docs.python.org/2/distutils/setupscript.html https://packaging.python.org/tutorials/distributing-packages/ README.rst 概念 rst: reStructuredText 重新構建的文字 作用 可以使用特定的字元,來描述文字的格式 Pypi平臺能夠自動識別long_description欄位中所寫的這種格式的字串 但是,如果把字串都寫在setup函式的引數中,會顯得比較混亂,所以,一般把內容寫在一個單獨的README.rst檔案中; 然後再setup.py檔案中,讀取這個檔案內容,並賦值給long_description即可 檔案內容編寫 具體語法文件說明 http://zh-sphinx-doc.readthedocs.io/en/latest/contents.html 建議 使用Pycharm編輯,別傻的不要不要的用記事本 Pycharm中,安裝一個支援rst的外掛,這樣的話就能夠識別rst語法 案例 語法檢測 有時候會發現,寫的rst檔案,無法在Pypi平臺正常顯示 原因 Pypi上對於rst的解析器問題,並不是sphinx 導致部分語法有一些差異 解決方案 先從本地對long_description進行驗證 驗證通過後,再進行上傳 步驟 安裝庫 pip install readme_renderer 執行命令 python3 setup.py check -r -s 補充 安裝完相關庫之後,也可以使用Pycharm進行驗證 注意 使用setuptools打包時,會自動包含這個檔案,不需要在下面的MANIFEST.in檔案中再次宣告 反之,使用distutils打包則不會自動包含,需要在以下檔案宣告 LICENSE.txt 作用 宣告庫的一些使用責任等等 比如,所有權歸屬,別人是否可以對程式碼進行任何操作;是否可以用於其他商業用途等等 檔案內容獲取地址 https://choosealicense.com/ MANIFEST.in 作用 當我們在打包一個專案的時候,並非所有的檔案都會被打包在目標包中 打包工具最終會把所有已經打包的檔案生成一個叫做MANIFEST檔案的列表清單 我們就可以通過MANIFEST.in告訴打包工具,讓其新增一些指定檔案 例 include README.rst include LICENSE.txt 具體官方文件 https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute 包含 include *.txt 遞迴包含 recursive-include examples *.txt *.py 修剪 prune examples/sample/build 這裡是真正的包和模組 可選補充 重點,必須有這個檔案 注意:命名建議 全部小寫 多個單詞以中劃線-作為分割 不要使用_ pip安裝對_支援不是很好 不能和Pypi上已有的包名稱重複 2. 編譯生成釋出包 在命令列工具中執行 1. 進入setup.py同級目錄 cd xxx目錄 2. 執行 python3 setup.py sdist 生成原始碼壓縮包 它包含setup.py,模組原始檔,資料檔案等等 然後可以使用在任何平臺上重新編譯所有內容 --formats = 壓縮格式1, 壓縮格式2 python3 setup.py bdist 生成二進位制發行包 不包括setup.py 是某個特定平臺和Python版本的一個存檔 python3 setup.py bdist_egg 生成egg包 需要安裝setuptools python3 setup.py bdist_wheel 生成wheel包 需要安裝wheel python3 setup.py bdist_wininst 生成windows下的安裝檔案 更多命令 python3 setup.py --help-commands 注意 以上生成的釋出包,已經可以進行本地安裝 安裝方式 帶setup.py原始碼壓縮包 方式1 解壓 進入同級目錄 執行python3 setup.py install 方式2 pip install 壓縮包 方式3 easy_install 壓縮包 二進位制發行包 可以解壓直接拷貝到指定目錄 windows下的安裝檔案 雙擊按步驟安裝 .egg格式 easy_install xxx.egg .whl格式 pip install xxx.whl easy_install xxx.whl 4. 釋出過程 1. 在命令列中,執行命令 twine upload 需要釋出的目標包 注意 此時會提示輸入使用者名稱和密碼 在Pypi註冊過的 需要進行郵箱驗證 2. 成功後 Pypi網站 疑問 是否需要上傳到其他幾個安裝源?比如豆瓣? 不需要;啥叫映象?如同照鏡子的你,你改變了,鏡子裡面的內容會自動改變 專業解釋就是;映象伺服器會每隔一段時間自動和原伺服器同步內容 圖示 補充 測試釋出 場景 在釋出到正式平臺前,可以先發布到測試平臺進行測試 避免汙染正式平臺環境 步驟 1. 到測試平臺註冊賬號 2. 上傳包時 正式平臺命令 twine upload dist/xxx.whl 測試平臺命令 twine upload --repository-url 5. 釋出後使用 手動下載安裝 easy_install xx pip install xx