最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python程序包的構(gòu)建和發(fā)布過程示例詳解

 更新時(shí)間:2019年06月09日 11:25:14   作者:GoT陽仔l(wèi)v-2  
Python程序包的構(gòu)建和發(fā)布過程,本文通過示例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

關(guān)于我

編程界的一名小程序猿,目前在一個(gè)創(chuàng)業(yè)團(tuán)隊(duì)任team lead,技術(shù)棧涉及Android、Python、Java和Go,這個(gè)也是我們團(tuán)隊(duì)的主要技術(shù)棧。 聯(lián)系:hylinux1024@gmail.com

當(dāng)我們開發(fā)了一個(gè)開源項(xiàng)目時(shí),就希望把這個(gè)項(xiàng)目打包然后發(fā)布到 pypi.org 上,別人就可以通過 pip install 的命令進(jìn)行安裝。本文的教程來自于 Python 官方文檔 , 如有不正確的地方歡迎評論拍磚。

0x00 創(chuàng)建項(xiàng)目

本文使用到的項(xiàng)目目錄為

➜ packaging-tutorial
.
└── bestpkg
  └── __init__.py

接下來的所有操作都是在 packing_tutorial 這個(gè)目錄下進(jìn)行的。首先把 bestpkg 這個(gè)目錄下的 __init__.py 添加以下內(nèi)容

info='packaging demo'

這個(gè)信息主要用于打包成功后安裝測試用的。

0x01 項(xiàng)目結(jié)構(gòu)

一個(gè)待發(fā)布的項(xiàng)目還需要有以下這些文件: setup.py 、 LICENSE 和 README.md

➜ packaging-tutorial
.
├── LICENSE
├── README.md
├── bestpkg
│  └── __init__.py
└── setup.py

0x02 setup.py

setup.py 文件是給 setuptools 工具的使用腳本,告訴 setuptools 如何構(gòu)建我們的項(xiàng)目。打開編輯器,編輯 setup.py 文件,輸入以下內(nèi)容

import setuptools

# 讀取項(xiàng)目的readme介紹
with open("README.md", "r") as fh:
  long_description = fh.read()

setuptools.setup(
  name="bestpkg",# 項(xiàng)目名稱,保證它的唯一性,不要跟已存在的包名沖突即可
  version="0.0.1",
  author="hylinux1024", # 項(xiàng)目作者
  author_email="hylinux1024@gmail.com",
  description="一個(gè)牛逼的程序", # 項(xiàng)目的一句話描述
  long_description=long_description,
  long_description_content_type="text/markdown",
  url="https://github.com/hylinux1024/niubiproject",# 項(xiàng)目地址
  packages=setuptools.find_packages(),
  classifiers=[
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
  ],
)
  • name 
  • 項(xiàng)目名稱,保證它的唯一性,不要跟已存在的包名沖突即可,否則會(huì)發(fā)布失敗
  • version 
  • 版本號
  • author 
  • 作者
  • author_email 
  • 作者郵箱
  • description 
  • 一句話描述項(xiàng)目
  • long_description 
  • 項(xiàng)目詳細(xì)說明,一般直接讀取README.md的內(nèi)容
  • url 
  • 項(xiàng)目的鏈接地址
  • packages 
  • 列出當(dāng)前項(xiàng)目的包,一般直接使用 find_packages() 即可
  • classifiers 
  • 這里指定 Python 的兼容版本是 Python3 ,也指定了項(xiàng)目使用的開源協(xié)議。

0x03 README.md

給項(xiàng)目添加詳細(xì)的 README

# Example Package

This is a simple example package. You can use
[Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
to write your content.

0x04 LICENSE

要發(fā)布包到 pypi 上,選擇一個(gè)合適的開源協(xié)議是非常重要的。如果不知道怎么選可以到choosealicense.com/這里看看。

0x05 項(xiàng)目打包

項(xiàng)目需要打包后才能發(fā)布,要打包項(xiàng)目需先安裝最新版本的 setuptools 和 wheel

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

然后使用以下命令進(jìn)行打包

➜ python3 setup.py sdist bdist_wheel

當(dāng)看到以下信息,說明已經(jīng)打包成功

...
...
...
adding license file "LICENSE" (matched pattern "LICEN[CS]E*")
creating build/bdist.macosx-10.14-x86_64/wheel/bestpkg-0.0.1.dist-info/WHEEL
creating 'dist/bestpkg-0.0.1-py3-none-any.whl' and adding 'build/bdist.macosx-10.14-x86_64/wheel' to it
adding 'bestpkg/__init__.py'
adding 'bestpkg-0.0.1.dist-info/LICENSE'
adding 'bestpkg-0.0.1.dist-info/METADATA'
adding 'bestpkg-0.0.1.dist-info/WHEEL'
adding 'bestpkg-0.0.1.dist-info/top_level.txt'
adding 'bestpkg-0.0.1.dist-info/RECORD'
removing build/bdist.macosx-10.14-x86_64/wheel

在項(xiàng)目目錄下會(huì)生成一個(gè) dist 和 build 文件夾

➜ packaging-tutorial tree
.
├── LICENSE
├── README.md
├── bestpkg
│  └── __init__.py
├── bestpkg.egg-info
│  ├── PKG-INFO
│  ├── SOURCES.txt
│  ├── dependency_links.txt
│  └── top_level.txt
├── build
│  ├── bdist.macosx-10.14-x86_64
│  ├── bdist.macosx-10.9-x86_64
│  └── lib
│    └── bestpkg
│      └── __init__.py
├── dist
│  ├── bestpkg-0.0.1-py3-none-any.whl
│  └── bestpkg-0.0.1.tar.gz
└── setup.py

8 directories, 11 files

在 dist 文件中有兩個(gè)文件

dist
  ├── bestpkg-0.0.1-py3-none-any.whl
  └── bestpkg-0.0.1.tar.gz

tar.gz 文件是源碼文件壓縮包,而 .whl 就是打包后的文件。最新的 pip 命令會(huì)安裝這個(gè) .whl 文件。

0x06 上傳

現(xiàn)在就可以上傳到 Python 索引庫了。我們使用 Test PyPI ,這個(gè)是測試用的 Pypi ,本例子也是使用 Test Pypi 。

首先要到 test.pypi.org/account/reg… 注冊賬號。本例中我注冊的賬號為: hylinux1024 。

然后使用 twine 工具來上傳我們的包。使用以下命令進(jìn)行安裝:

➜ python3 -m pip install --user --upgrade twine

使用以下命令上傳 dist 目錄下的文件

➜ python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

這個(gè)命令會(huì)提示輸入剛在 test.pypi.org 上注冊賬號密碼,并出現(xiàn)類似以下信息后說明已經(jīng)上傳成功。

Enter your username: hylinux1024
Enter your password:
Uploading distributions to https://test.pypi.org/legacy/
Uploading bestpkg-0.0.1-py3-none-any.whl
100%|██████████████████████████████████████| 4.57k/4.57k [00:00<00:00, 8.01kB/s]
Uploading bestpkg-0.0.1.tar.gz
100%|██████████████████████████████████████| 4.18k/4.18k [00:01<00:00, 3.23kB/s]

然后打開 test.pypi.org/project/bes… 這個(gè)地址就可以看到我們發(fā)布的包。

0x07 安裝

發(fā)布成功之后就可以使用 pip 來安裝來。我們在虛擬環(huán)境中安裝,關(guān)于虛擬環(huán)境可以看我前一篇文章。

這里就使用 pipenv ,這里我直接進(jìn)入到我昨天創(chuàng)建的那個(gè)項(xiàng)目中,也為了更好演示安裝結(jié)果。

➜ pip install --index-url https://test.pypi.org/simple/ --no-deps bestpkg

在這里我使用 --index-url 參數(shù)是為了指定從 test.pypi.org 中安裝,而不是正式包索引庫中查找要安裝的包。還有使用了 --no-deps 參數(shù)是因?yàn)楸纠袥]有使用到其它的依賴庫。

在終端會(huì)看到以下類似信息,說明安裝成功

Looking in indexes: https://test.pypi.org/simple/
Collecting bestpkg
 Downloading https://test-files.pythonhosted.org/packages/5a/fc/c109b3872b6c06e7368c30b6e52501113846f90ca716a434766151093173/bestpkg-0.0.1-py3-none-any.whl
Installing collected packages: bestpkg
Successfully installed bestpkg-0.0.1

進(jìn)入交互界面

(pipenvdemo) ➜ pipenvdemo python
>>> import bestpkg
>>> bestpkg.info
'packaging demo'

info 變量就是在 __init__.py 文件中定義的變量。自此我們的包發(fā)布、安裝使用流程就走完了。

要在正式的 Python 索引庫中發(fā)布,只需要到pypi.org/注冊賬號,并上傳就可以了。

0x08 總結(jié)一下

通過一個(gè)簡單的例子展示 Python 通過 setuptools 工具進(jìn)行打包,然后上傳到 test.pypi.org 的流程。如果要上傳到正式的 pypi.org 上,只需要注冊一個(gè)正式的賬號。一旦發(fā)布成功就可以使用 pip install [your-package] 的命令進(jìn)行安裝。

總結(jié)

以上所述是小編給大家介紹的Python程序包的構(gòu)建和發(fā)布過程示例詳解,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • 深入了解python列表(LIST)

    深入了解python列表(LIST)

    這篇文章主要介紹了python列表(LIST)的相關(guān)知識,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟

    使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟

    下面給大家分享使用?Flask、Celery?和?Python?實(shí)現(xiàn)每月定時(shí)任務(wù)的步驟,本文分步驟結(jié)合腳本給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 利用Python+eval函數(shù)構(gòu)建數(shù)學(xué)表達(dá)式計(jì)算器

    利用Python+eval函數(shù)構(gòu)建數(shù)學(xué)表達(dá)式計(jì)算器

    Python?中的函數(shù)eval()?是一個(gè)非常有用的工具。在本文中,云朵君將和大家一起學(xué)習(xí)?eval()?如何工作,以及如何在?Python?程序中安全有效地使用它,需要的可以參考一下
    2022-09-09
  • python TCP包注入方式

    python TCP包注入方式

    這篇文章主要介紹了python TCP包注入方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python連接mongodb密碼認(rèn)證實(shí)例

    python連接mongodb密碼認(rèn)證實(shí)例

    今天小編就為大家分享一篇python連接mongodb密碼認(rèn)證實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python流程控制詳細(xì)介紹

    python流程控制詳細(xì)介紹

    這篇文章主要介紹了python流程控制,文章主要根據(jù)python流程控制的相關(guān)資料展開全文內(nèi)容,具有一定的參考解釋,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • 在python image 中實(shí)現(xiàn)安裝中文字體

    在python image 中實(shí)現(xiàn)安裝中文字體

    這篇文章主要介紹了在python image 中實(shí)現(xiàn)安裝中文字體,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python中函數(shù)帶括號和不帶括號的區(qū)別及說明

    Python中函數(shù)帶括號和不帶括號的區(qū)別及說明

    這篇文章主要介紹了Python中函數(shù)帶括號和不帶括號的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python中11種NumPy高級操作總結(jié)

    Python中11種NumPy高級操作總結(jié)

    熬夜整了了11種Numpy的高級操作,每一種都有參數(shù)解釋與小例子輔助說明。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-05-05
  • 淺談Python在pycharm中的調(diào)試(debug)

    淺談Python在pycharm中的調(diào)試(debug)

    今天小編就為大家分享一篇淺談Python在pycharm中的調(diào)試(debug),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論

淳安县| 马尔康县| 南江县| 盐津县| 朝阳县| 郯城县| 普兰店市| 昌乐县| 大竹县| 西贡区| 宝坻区| 中阳县| 安泽县| 东丽区| 扎囊县| 河北省| 平利县| 泸定县| 梁平县| 宁津县| 抚顺市| 呼和浩特市| 咸阳市| 达州市| 信丰县| 丰原市| 九龙坡区| 伊川县| 东乌珠穆沁旗| 黄梅县| 丰镇市| 沙坪坝区| 广昌县| 阳曲县| 水富县| 蒙城县| 滦南县| 和政县| 瑞金市| 墨竹工卡县| 南木林县|