前言
pytest 的插件完成之后,可以上傳到 github,方便其他小伙伴通過 pip 源碼安裝。如果我們想通過 pip install packages
這種方式安裝的話,需上傳到 pypi 倉庫
pypi倉庫
pip,全稱是:python install packages,它是一個通用的 Python 包管理工具,是easy_install的替代品, 主要是用於安裝 PyPI 上的軟件包。
PyPI,全稱是:Python Package Index,它是Python官方的第三方庫的倉庫,所有人都可以下載第三方庫或上傳自己開發的庫到PyPI。
PyPI推薦使用pip包管理器來下載第三方庫。
我們想把python包上傳到pypi,需在 https://pypi.org/ 注冊一個賬號
整理項目結構
前面這篇https://www.cnblogs.com/yoyoketang/p/13638661.htmlpytest 插件的開發,就是一個半成品了
整個目錄結構如下
pytest-change-report
├── LICENSE
├── README.rst
├── requirements.txt
├── setup.py
├── pytest_change_report.py
├── tests
│ ├──__init__.py
│ ├──conftest.py
│ └──test_change_report.py
- pytest-change-report 是項目的包名
- LICENSE LICENSE文件是授權文件,比如:MIT license, APACHE license
- requirements.txt 依賴包,比如這個插件依賴pytest模塊,可以寫pytest==4.5.0
- README.rst 其實就是項目介紹和使用說明幫助文檔
- setup.py python模塊安裝所需要的文件
- tests 是測試的目錄
- pytest_change_report.py 插件實現功能的核心模塊
代碼寫完測試沒問題后,上傳到github倉庫,並打個v1.0的標簽
打完 tag 標簽,push 到 github 倉庫,這樣在 tag 目錄就能看到 release 的記錄了
打包
cd到項目的根目錄,執行
python setup.py sdist build
執行完成后,在dist目錄,會生成一個.tar.gz的壓縮包,這個壓縮包就可以通過 pip 安裝了
也可以打包一個wheels格式的包,需要安裝wheel包:
pip install wheel
執行以下命令打包
python setup.py bdist_wheel --universal
這樣在dist目錄生成一個 pytest_change_report-1.0-py2.py3-none-any.whl 文件,.whl 后置的文件也可以通過 pip 直接安裝
上傳發布
使用twine上傳,先安裝twine
pip install twine
上傳輸入指令,接着會提示輸入賬號和密碼
twine upload dist/*
>twine upload dist/*
Uploading distributions to https://upload.pypi.org/legacy/
Enter your username: yoyoketang
Enter your password:
Uploading pytest_change_report-1.0-py2.py3-none-any.whl
100%|█████████████████████████████████████████████████████████ ████████████████████| 5.56k/5.56k [00:00<00:00, 6.17kB/s]
Uploading pytest-change-report-1.0.tar.gz
100%|█████████████████████████████████████████████████████████ ████████████████████| 5.15k/5.15k [00:01<00:00, 4.71kB/s]
View at:
https://pypi.org/project/pytest-change-report/1.0/
上傳后訪問地址 https://pypi.org/project/pytest-change-report/1.0/
查看pypi
打開上面的訪問地址可以查看到已經上傳成功
點 Homepage 可以跳轉到 github 倉庫去
這樣小伙伴們就能直接使用 pip 安裝了
pip install pytest-change-report
python 打包發布到 pypi 的就完成了,是不是很激動!