04-Python-包&模組-包和模組的高階操作
阿新 • • 發佈:2018-12-19
學習地址:
撩課-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