您好,登錄后才能下訂單哦!
1. 配置環境
主要是需要安裝Python版本在3.4以上,安裝pip工具,并確保pip,setuptools和wheel是最新的,一般滿足條件。也可以用以下指令更新以下:
python -m pip install --upgrade pip setuptools wheel
詳情見官網鏈接
2.制作pip包
1)創建工程文件目錄及文件
在目錄內分別新建LICENCE、README.md(markdown文件)、requirements.txt、setup.py(鏈接大神的配置模板)文件,注意文件尾綴。其中setup.py可以自己編寫,可以根據超鏈接下載自己改寫,也可以復制,指令:(git clone https://github.com/kennethreitz/setup.py) 復制后在網上修改。
所建目錄及文件詳見下圖:
setup.py中參數配置
樣例代碼:
from future import print_function
from setuptools import setup, find_packages
import sys
setup(
name="utilsss",
version="0.1.3",
author="vip", #author_email="huhongping123@163.com",
br/>author_email="huhongping123@163.com",
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來更新包的時候,會更新比當前版本號高的新版本。
下邊是pip 更新包的命令
pip install --upgrade <包的名字>
pip install -U <包的名字>
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/...
(后續會繼續補充完善使更加容易明白操作)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。