自做pip包流程詳解

自做pip包流程詳解

1. 配置環境
主要是須要安裝Python版本在3.4以上,安裝pip工具,並確保pip,setuptools和wheel是最新的,通常知足條件。也能夠用如下指令更新如下:html

python -m pip install --upgrade pip setuptools wheelpython

詳情見官網連接git

2.製做pip包
1)建立工程文件目錄及文件
在目錄內分別新建LICENCE、README.md(markdown文件)、requirements.txt、setup.py(連接大神的配置模板)文件,注意文件尾綴。其中setup.py能夠本身編寫,能夠根據超連接下載本身改寫,也能夠複製,指令:(git clone https://github.com/kennethreitz/setup.py) 複製後在網上修改。github

所建目錄及文件詳見下圖:
自做pip包流程詳解
setup.py中參數配置
樣例代碼:
from future import print_function
from setuptools import setup, find_packages
import sys數組

setup(
name="utilsss",
version="0.1.3",
author="vip", #br/>author_email="huhongping123@163.com",
keywords = ["pip", "utilsss"],
description="vip Python lib Framework.",
license="MIT",
url="https://github.com/huhongping/vip_utils",
packages=find_packages(),
include_package_data=True,安全

install_requires=[

],
zip_safe=True,

)
重要參數解釋:
1.name
name = 「utilsss」,這個name參數後邊的就是你的項目代碼所在目錄,也是你pip要上傳的項目名稱,其餘人用pip install xxx來安裝時,後邊的xxx就是你的這個magetool服務器

2.version
version = 「0.1.0」,你工具的版本號,後期你工具更新了,要用pip來更新包的時候,會更新比當前版本號高的新版本。markdown

下邊是pip 更新包的命令網絡

pip install --upgrade <包的名字>
pip install -U <包的名字>ide

3.packages
packages = find_packages(),這個參數是導入目錄下的全部init.py包

4.install_requires
install_requires = [],這是一個數組,裏邊包含的是咱的pip項目引用到的第三方庫,若是你的項目有用到第三方庫,要在這裏添上第三方庫的包名,若是用的第三方版本不是最新版本,還要有版本號。

更多參數詳解以下:官網介紹

參數 說明 備註
name 包名稱
version 包版本
author 程序的做者
author_email 程序的做者的郵箱地址
maintainer 維護者
maintainer_email 維護者的郵箱地址
url 程序的官網地址
license 程序的受權信息
description 程序的簡單描述
long_description 程序的詳細描述
platforms 程序適用的軟件平臺列表
classifiers 程序的所屬分類列表
keywords 程序的關鍵字列表
packages 須要處理的包目錄(一般爲包含 init.py 的文件夾)
py_modules 須要打包的 Python 單文件列表
download_url 程序的下載地址
cmdclass 添加自定義命令
package_data 指定包內須要包含的數據文件
include_package_data 自動包含包內全部受版本控制(cvs/svn/git)的數據文件
exclude_package_data 當 include_package_data 爲 True 時該選項用於排除部分文件
data_files 打包時須要打包的數據文件,如圖片,配置文件等
ext_modules 指定擴展模塊
scripts 指定可執行腳本,安裝時腳本會被安裝到系統 PATH 路徑下
package_dir 指定哪些目錄下的文件被映射到哪一個源碼包
requires 指定依賴的其餘包
provides 指定能夠爲哪些模塊提供依賴
install_requires 安裝時須要安裝的依賴包
entry_points 動態發現服務和插件,下面詳細講
setup_requires 指定運行 setup.py 文件自己所依賴的包
dependency_links 指定依賴包的下載地址
extras_require 當前包的高級/額外特性須要依賴的分發包
zip_safe 不壓縮包,而是以目錄的形式安裝

2)編寫核心代碼
在工程目錄下新建一個utilsss的package,默認自帶一個init.py文件,即調用該包就自動執行該文件。而後在包裏面新建一個本身想要擁有的函數。
接下來咱們就能夠編寫本身的代碼了,要注意源代碼文件夾(倉庫裏的my_package文件夾)的名字與setup.py裏配置的包名(Name)要一致。
另外在從新上傳以前咱們要修改version.py裏的版本號,以避免覆蓋了之前的上傳(相信會有人是須要以前版本的庫的)。
本目錄包含文件:
core.py
init.py
version.py(非必須)

3.打包項目
在代碼編寫完成,自已測試後沒有問題了,就能夠打包了。
命令窗口輸入:
$ python setup.py sdist # 生成相似 utilsss-0.1.3.tar.gz,支持 pip

通過以上步驟已經能夠生成一個pip可安裝的工程包,安裝很是簡單。
直接在命令窗口輸入:

pip install .\dist\utilsss-0.1.3.tar.gz

4.上傳到PyPi服務器

1)建立 PyPI帳號
很是簡單,直接經過官網註冊 https://pypi.python.org/pypi?..., 可是須要驗證郵件並確認激活。
以前我在pypi註冊時弄了雙因素驗證(解釋),有須要的同窗,能夠弄個,增強帳號安全。
2)建立用戶驗證文件 ~/.pypirc
在本身的用戶目錄下新建一個空白文件命名爲.pypirc,內容以下:

[distutils]
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

3)用戶名和密碼就是上一步驟所建立的,直接明文輸入。若是你以爲明文密碼不安全也能夠留空,在後面的上傳過程當中會提示你手動輸入。

註冊你的包
你須要到PyPI註冊並驗證你的包,以後才能開始真正上傳,註冊的方式有如下幾種。

使用命令python setup.py register,最簡單但官網不推薦,由於使用的是HTTP未加密,有可能會被***人嗅探到你的密碼。
經過PyPI網站提交表單完成註冊驗證。
安裝 pip install twine 而後在經過命令 twine register dist/mypkg.whl 完成註冊。
4)上傳並完成發佈
正常狀況下,直接使用第一條命令便可,也可使用tuine這個第三方較爲安全的提交方式。

使用命令:python setup.py sdist upload,仍是和上面同樣,簡單但有安全隱患,目前已淘汰。
使用 twine: twine upload dist/*

可能遇到的錯誤

Upload failed (403): Invalid or non-existent authentication information.
錯誤的用戶驗證信息,你須要建立一個用戶驗證文件 ~/.pypirc。請參閱上文。

Upload failed (403): You are not allowed to edit 'xxx' package information
你須要先註冊你的包才能夠開始上傳,運行註冊命令:python setup.py register

Server response (401): Incomplete registration; check your email
你的PyPI帳戶還沒完成郵箱驗證,你須要去註冊郵箱找到一封驗證郵件完成驗證後再重試失敗的步驟。

Server response (400): Invalid classifier "Topic :: Software Development :: Utilities"
你的setup.py文件中的classifier信息有誤,請按官網的正確分類書寫classifier.

error: No dist file created in earlier command
你還沒打包就開始了上傳命令,建議打包和上傳的操做放在一塊兒作,好比:

python setup sdist upload
error: Upload failed (499): Client Disconnected
這應該是網絡問題,多重試幾回。

Upload failed (400): File already exists
文件已經存在了,你每一次上次都應該更新版本號。

官網參考文檔
https://packaging.python.org/...

(後續會繼續補充完善使更加容易明白操做)

相關文章
相關標籤/搜索