国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用pip發(fā)布Python程序的方法步驟

2020-01-04 14:23:39
字體:
供稿:網(wǎng)友

寫過 Python 程序的小伙伴們都知道,需要 import 個非 Python 自帶的軟件包時,都要用到 pip 這個程序。平時我們都是用 pip,如果我們寫好了一個程序,想讓大家都能用的到,那么是不是也可以通過 pip 發(fā)布出去呢?

答案當然是可以了,這篇文章我們就來看看如何用 pip 發(fā)布一個 python 程序。

1. 環(huán)境準備

要用 pip 發(fā)布 python 程序,首先當然是要安裝 Python 和 pip 這兩個軟件了,以 Ubuntu 16.04 為例:

$ sudo apt update $ sudo apt install -y python python-pip

CentOS 和 RedHat 因為 RPM 體系需要依賴于 python,更是默認就安裝好了。

另外發(fā)布 Pypi,還需要安裝一個發(fā)布工具, twine ,以及其所依賴的 setuptools、wheel:

$ sudo pip install --upgrade twine setuptools wheel

好,到這環(huán)境就已經(jīng)就緒了。

2. 注冊帳號

pip 上傳代碼包是最終保存在 https://pypi.org 這個網(wǎng)站上的,所以要用 pip 發(fā)布程序,就需要在這個網(wǎng)站上注冊一個帳號。

訪問該網(wǎng)址進行注冊: https://pypi.org/account/register/

pip,發(fā)布,Python程序

注冊后還需要進行郵箱驗證,流程和普通網(wǎng)站沒有任何區(qū)別,所以具體步驟就不在這里詳細介紹了。

3. 代碼結(jié)構(gòu)

要發(fā)布 Python 程序,程序的結(jié)構(gòu)必須符合特定的要求,假設(shè)要發(fā)布的程序名為 example-pkg,基本的目錄結(jié)構(gòu)如下:

/example-pkg /example-pkg  __init__.py setup.py LICENSE README.md

說一下目錄和文件的含義:

  • 首先最外層要建立一個和發(fā)出程序同名的文件夾: /example-pkg
  • 該文件夾下還要再簡歷一個同名文件夾,用來存放程序代碼: /example-pkg/example-pkg
  • Python 的老規(guī)矩,example-pkg/example-pkg 目錄下當然要有一個 __init__.py 文件。
  • /example-pkg 目錄下要有一個叫 setup.py 的文件,如果下載過 Python 代碼包,應(yīng)該都知道這個文件,需要通過這個文件進行 Python 代碼的編譯(可能會有依賴的其他代碼包或者依賴的 C 文件)和安裝。
  • LICENSE 文件:這個文件就是用來保存代碼所使用的開源許可證。
  • README.md:這個是軟件行業(yè)的慣例了,幫助文檔。

對于 setup.py 文件,還有必要好好說說,先貼個例子,下面這個例子中,主要是實現(xiàn)了從 /example-pkg/example-pkg/__init__.py 文件中讀取 version 參數(shù),來配置當前軟件的版本,并指定了代碼包名(name)、作者(author)、郵箱(author_email)、描述信息(long_description、long_description_content_type)、依賴(install_requires),以及哪些文件不會被打包到程序中(exclude_package_data)。

另外需要提醒大家一點, 給程序起名字不要帶下劃線(_) ,python import 代碼包時,是不支持下劃線包名的,出現(xiàn)這種情況就比較尷尬,代碼裝上了,還是用不了。

#!/usr/bin/env pythonimport reimport setuptoolsversion = ""with open('example-pkg/__init__.py', 'r') as fd:  version = re.search(r'^__version__/s*=/s*[/'"]([^/'"]*)[/'"]',            fd.read(), re.MULTILINE).group(1)with open("README.md", "r") as fh:  long_description = fh.read()setuptools.setup(  name="example-pkg",  version=version,  author="example",  author_email="author@example.com",  description="This is the SDK for example.",  long_description=long_description,  long_description_content_type="text/markdown",  url="http://example.com",  install_requires=[    'requests!=2.9.0',    'lxml>=4.2.3',    'monotonic>=1.5',  ],  packages=setuptools.find_packages(exclude=("test")),  classifiers=(    "License :: OSI Approved :: MIT License",    "Intended Audience :: Developers",    "Operating System :: OS Independent",    "Programming Language :: Python",    "Programming Language :: Python :: 2",    "Programming Language :: Python :: 2.6",    "Programming Language :: Python :: 2.7",    "Programming Language :: Python :: 3",    "Programming Language :: Python :: 3.3",    "Programming Language :: Python :: 3.4",    "Programming Language :: Python :: 3.5"  ),  exclude_package_data={'': ["example-pkg/test.py", "example-pkg/config.txt"]},)

4. 上傳和檢查

一切準備就緒,下面就可以執(zhí)行打包命令,產(chǎn)生要上傳的代碼包了:

$ python setup.py sdist bdist_wheel

執(zhí)行結(jié)束后,會產(chǎn)生如下目錄和文件:

/example-pkg/dist/ example-pkg-0.0.1-py3-none-any.whl example-pkg-0.0.1.tar.gz

包有了,就差上傳了,執(zhí)行第一步中安裝的 twine 命令:

$ twine upload dist/*Uploading distributions to https://upload.pypi.org/legacy/Enter your username: <your pypi.org username>Enter your password: <your pypi.org password>Uploading example-pkg-0.0.1-py3-none-any.whl100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 45.0k/45.0k [00:01<00:00, 24.0kB/s]Uploading example-pkg-0.0.1.tar.gz100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 43.8k/43.8k [00:00<00:00, 46.2kB/s]

上傳完畢!不過這里有一點需要注意,上傳新版本后,很可能 pip search 還沒法查到版本的更新,這是正常的,我理解是

pip search 命令依賴于緩存,所以不會立刻生效。

接下來就讓我們下載自己剛剛上傳的 python 試試吧:

$ pip install example-pkg$ python>>> import example-pkg>>> example-pkg.name'example-pkg'

最后再補充一點,上傳可能會失敗,提示無法上傳指定的代碼包,此時很大的可能是 pypi 中已經(jīng)有了相同的代碼包,所以建議在上傳之前,先搜索一下是否有重名的代碼包,選擇一個不沖突的名字,再上傳。

例如下面這個例子,example-pkg 已經(jīng)存在了,如果要再上傳,那當然會失敗,換個名字就解決了。

$ pip search example-pkgexample-pkg (0.0.7)                      - A small example package......

5. 參考文檔

Packaging Python Projects

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 台州市| 泸西县| 汾阳市| 武平县| 环江| 乌海市| 包头市| 周至县| 普宁市| 镇江市| 左云县| 资中县| 同江市| 山西省| 漯河市| 永春县| 察雅县| 盖州市| 远安县| 墨玉县| 营口市| 青田县| 新干县| 贞丰县| 刚察县| 张家川| 宣武区| 常州市| 鄂温| 浑源县| 濉溪县| 吕梁市| 永兴县| 资阳市| 东兰县| 利辛县| 绵竹市| 翁牛特旗| 沁源县| 德州市| 礼泉县|