python之PypI打包whl文件


一.簡單介紹

python中我們經常會用到第三方的包作為工具,比如爬蟲解析工具,網絡請求工具等。之所以要把它封裝成包,意識為了技術與業務分離,二是為了能多
項目多平台共用。python里面用到的第三方工具包基本都是從Pypi.org里面下載的。下面具體介紹如何打一個自己的包上傳到Pypi中作為工具使用。

二.Pypi打包whl文件

首先,我們需要確認我們需要打包的package中已經包含了README.mdLICENSE[非必須]setup/py文件。三者分別是說明文檔,許可證以及
python setuptools所用來安裝該package的構建腳本。

2.1 setup.py

setup.py中包含了package對應的信息(例如該package的名稱、版本、作者)以及該package應當包含的程序文件和數據。

下面是一個setup.py的示例文件:

import os
from setuptools import setup, find_packages


path = os.path.abspath(os.path.dirname(__file__))

try:
  with open(os.path.join(path, 'README.md')) as f:
    long_description = f.read()
except Exception as e:
  long_description = "customize okta cli"

setup(
    name = "okta-cmd",
    version = "0.1.0",
    keywords = ("pip", "okta", "cli", "cmd", "steven"),
    description = "okta cli",
    long_description = long_description,
    long_description_content_type='text/markdown',
    python_requires=">=3.5.0",
    license = "MIT Licence",

    url = "https://github.com/stevenQiang/okta-cmd",
    author = "steven",
    author_email = "qianggao7@gmail.com",

    packages = find_packages(),
    include_package_data = True,
    install_requires = ["requests", "click"],
    platforms = "any",

    scripts = [],
    entry_points = {
        'console_scripts': [
            'okta-cmd=oktacmd:main_cli'
        ]
    }
)
  • name: 該package的名字,該名字可以由字母、數字、-組成,注意這個名字不能與其它已經上傳到pypi.org的項目相同
  • version: 這個就是包的發布版本,可以直接寫在這,也可以從其它地方引用
  • author: author可以用來指定該package的作者信息
  • author_email: 這個也是指定該package的作者信息
  • description: 對當前package的較短的總結
  • long_description: 是對當前package的詳細說明。這一詳細說明將被展示在Python Package Index上當前項目的主頁
  • long_description_content_type: 指定了long_description內容的格式。在當前情況下為markdown
  • url: 是當前package的主頁鏈接。大多數情況下這是一個GitHub, GitLab, Bitbucket或者其他代碼存儲服務的鏈接
  • packages: 是一系列應當包含在發布軟件包文件(distribution package)中的可被import的python包文件。我們可以手動在此處羅列所有文件。
    或者如本例中一樣使用find_packages()函數自動包含所有的python包文件以及子包文件。
  • python_requires: python依懶版本
  • classifiers: 指定了當前package的其他元信息(metadata)。例如當前package兼容的python版本和操作系統,當前package提供的功能的類型,
    當前package的許可證等等。我們應當總是至少包括當前package所支持的python版本,操作系統和許可證。注意此處定義的classifiers關鍵字
    所包含的信息應當符合PyPI的規定。
  • install_requires: 指定了當前package所依賴的其他python類庫。這些指定的python類庫將會在本package被安裝的時候一並被安裝。
  • platforms: 程序適用的軟件平台列表
  • keywords: 程序的關鍵字列表
  • include_package_data: 是否自動包含包內所有受版本控制(cvs/svn/git)的數據文件,默認True
  • entry_points: 用來支持自動生成cli命令

使用上面的配置信息之后,會生成一個okta-cmd的命令,可以直接使用,就是在entry_points里面配置的。

目錄結構:

├── LICENSE
├── README.md
├── oktacmd
│   ├── __init__.py
│   ├── cli.py
│   ├── common.py
│   ├── main.py
│   └── okta.py
├── setup.py
└── setup.sh

生成包:
1.安裝最新版的setuptools和wheel

python3 -m pip install --user --upgrade setuptools wheel

2.使用sdist構建源碼分發包

python setup.py sdist bdist_wheel

注意: 這里是固定的命令(確保setup.py存在於當前路徑下)

當這個命令運行結束后,確保在生成的dist/文件夾下存在相應的.whl文件和.tar.gz文件。其中.tar.gz文件是我們的python package的源文件文檔,
而.whl是一個軟件分發包(build distribution)。新版本的pip將會首先嘗試安裝軟件分發包,但在失敗情況下會接着嘗試采用源文件包安裝。

三.上傳項目至PyPI

  1. 首先注冊一個PyPI的賬號,鏈接https://pypi.org/
  2. 安裝最新版本twine
python3 -m pip install --user --upgrade twine

3.上傳項目
使用twine上傳項目的時候需要輸入相應的PyPI的賬號和密碼。

python3 -m twine upload dist/*


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM