發布自己的Python包(Pypi)

發布自己的Python包(Pypi)

我們經常使用 Pypi 來安裝包,但是有時候我們也想要發布自己的 Pypi 包,有可能我們寫了一個特別牛的包,也有可能我們只是想使用自己常用的一些輪子,可能這是我們日常編碼中很常用的一些輪子,我們在不同工程目錄、不同設備上都會頻繁使用的一些接口,可能我們自己對這些自己常用的接口很熟悉,但是卻因為環境的遷移而需要重復地實現,這時我們就可以發布一個自己的 Pypi 包,在環境遷移時使用熟悉的輪子只需要 pip install *** 即可。

就算這些輪子我們可能實現的沒有那么完美,”不足為外人道也“,但卻是我們最熟悉的,接口早已了然于心,因此這樣使用起來會很方便。

發布

注冊Pypi賬號

沒什么好多說的,出奇的簡單,不需要任何多余的東西,郵箱、用戶名、密碼即可。鏈接如下:

https://pypi.org/

開發自己的包

假設我想發布一個包,里面有我們常用的一些使用函數,包名稱為 SongUtils,我們先完成功能的開發,都在 SongUtils 目錄下,得到目錄結構如下:

├── SongUtils
│   ├── AVAUtils.py
│   ├── ImgUtils.py
│   ├── MetricUtils.py
│   ├── README.md
│   └── __init__.py

__init__ 文件是必須的,這是一個package的象征,可以什么都不寫,但必須有。

準備setup.py

setup.py 是構建我們的Python包的關鍵,它的位置與我們的整個工程目錄同級,包含了我們這個包的一些關鍵信息和依賴等,簡單的可以參考下面筆者第一次發布包時的 setup.py 文件內容,其中各項看其名稱即可一目了然,更詳細的各項參數的含義網上其他博客也有介紹,在此不再贅述:

#!/usr/bin/env python
#-*- coding:utf-8 -*-from setuptools import setup, find_packages            #這個包沒有的可以pip一下setup(name = "SongUtils",      #這里是pip項目發布的名稱version = "0.0.1",  #版本號,數值大的會優先被pipkeywords = ["pip", "SongUtils"],			# 關鍵字description = "Junjie's private utils.",	# 描述long_description = "Junjie's private utils.",license = "MIT Licence",		# 許可證url = "https://github.com/Adenialzz/SongUtils",     #項目相關文件地址,一般是github項目地址即可author = "Adenialzz",			# 作者author_email = "********@***.com",packages = find_packages(),include_package_data = True,platforms = "any",install_requires = ["numpy", "pillow"]          #這個項目依賴的第三方庫
)

本地打包

完成 setup.py 文件后,我們的目錄樹如下:

├── SongUtils
│   ├── AVAUtils.py
│   ├── ImgUtils.py
│   ├── MetricUtils.py
│   ├── README.md
│   └── __init__.py
└── setup.py

然后在 setup.py 所在目錄下,我們運行它來將項目本地打包:

python setup.py sdist  

沒有問題的話,在打包之后我們會得到如下目錄樹:

├── SongUtils
│   ├── AVAUtils.py
│   ├── ImgUtils.py
│   ├── MetricUtils.py
│   ├── README.md
│   └── __init__.py
├── SongUtils.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── requires.txt
│   └── top_level.txt
├── dist
│   └── SongUtils-0.0.1.tar.gz
└── setup.py

上傳到Pypi服務器

首先在setup.py這一級的目錄下建立一個系統文件 .pypirc 內容如下:

[distutils]
index-servers = pypi[pypi]
username:你的PyPi用戶名
password:你的PyPi密碼

這里的用戶名密碼,就是我們第一步注冊時的賬號。

然后安裝一個上傳的工具來上傳即可:

pip install twine
twine upload dist/SongUtils-0.0.1.tar.gz

驗證

至此我們整個Python包的發布過程就已經完成了,我們可以(在其他機器)安裝來驗證一下:

pip install SongUtils

然后準備一個測試文件:

# test.py
import SongUtils# Call you functions to evaluate.

在測試文件中調用自己包中的函數,看測試是否正常工作:

python test.py

刪除

如果你想刪除自己的 Pypi 包,只需要登陸到自己的 Pypi 網站的賬戶,并進入到自己想要刪除的項目,然后選擇對應版本,點擊 Optins -> Delete 即可,過程中會要求你輸入刪除的版本號來防止誤刪除,在刪除后也會給你的郵箱發送郵件提醒。

但是,這不是一個好主意,因為前一個軟件包的所有用戶都會看到他們的安裝失敗。

如果要棄用程序包,可以執行的操作是使用指向新程序包的README發布最后一個發行版。有人為python-cli-ui做了那個,它被替換為cli-ui

你也可以:

  • setup.py運行時添加警告
  • 或在導入時
  • 或者用一個取決于新名稱的虛擬包替換包。

說明

這個過程只是一個簡單的 Python 包的發布過程,在過程中其實有許多需要注意的地方,比如 setup.py 文件應當寫的更加規范,整個包內的代碼也應當更加規范,應當有一個比較好的 Description 或者 README.md 文檔等等。這就留在以后有機會再說吧。

擴展閱讀:

python打包發布pypi踩坑記(最新貼心版本,認真對待自己的庫)

Ref:

https://www.cnblogs.com/suoyike1001/p/15216699.html

https://cloud.tencent.com/developer/ask/208868

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532515.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu PPA 使用指南

Ubuntu PPA 使用指南 轉自:https://zhuanlan.zhihu.com/p/55250294 一篇涵蓋了在 Ubuntu 和其他 Linux 發行版中使用 PPA 的幾乎所有問題的深入的文章。 如果你一直在使用 Ubuntu 或基于 Ubuntu 的其他 Linux 發行版,例如 Linux Mint、Linux Lite、Zorin…

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務 轉自:https://linux.cn/article-10205-1.html 如今,我有很多方法來通過 Web 瀏覽器為局域網中的其他系統提供單個文件或整個目錄的訪問。我在我的 Ubuntu 測試機上測試了這些方法,它們如下面…

Linux apt命令

Linux apt命令及其與apt-get的關系 轉自:https://blog.csdn.net/taotongning/article/details/82320472、https://www.runoob.com/linux/linux-comm-apt.html apt(Advanced Packaging Tool)是一個在 Debian 和 Ubuntu 中的 Shell 前端軟件包管…

楊宏宇:騰訊多模態內容理解技術及應用

楊宏宇:騰訊多模態內容理解技術及應用 分享嘉賓:楊宇鴻 騰訊 內容理解高級工程師 編輯整理:吳祺堯 出品平臺:DataFunTalk 導讀: 搜索內容的理解貫穿了整個搜索系統。我們需要從多個粒度理解搜索內容,包括語…

git登錄相關操作梳理

git登錄相關操作梳理 本文主要基于 Linux/Mac ,Windows下未經測試,不過估計差不多,在 git bash 內操作即可。 創建ssh key并關聯github等賬號 因為本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密傳輸的,GitHub需要識別是否是…

關于mmdetection上手的幾點說明

關于mmdetection上手的幾點說明 官方的文檔很有參考價值,并且也有中文版,應當是大家上手 mmdetection 的第一參考,本文是記錄一些筆者在小白階段上手 mmdetection 時的一些心得,這些東西沒有人提,可能是大佬們覺得這些…

docker gpu報錯Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

Docker容器中使用Nvidia GPU報錯 docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]]. 問題出現 我們知道,想要在 docker19 及之后的版本中使用 nvidia gpu 已經不需要單獨安裝 nvidia-docker 了,這…

CUDA環境詳解

CUDA環境詳解 本文主要介紹 CUDA 環境,這一堆東西網上有很多博客介紹過了,我再來一篇:),參考前輩們的文章,看能不能寫的更清楚一點。讀后仍有問題,歡迎留言交流。 CUDA APIs CUDA是由NVIDIA推出的通用并行計算架構&…

共享內存簡介及docker容器的shm設置與修改

共享內存簡介及docker容器的shm設置與修改 共享內存簡介 共享內存指 (shared memory)在多處理器的計算機系統中,可以被不同中央處理器(CPU)訪問的大容量內存。由于多個CPU需要快速訪問存儲器,這樣就要對存儲器進行緩存&#xff…

對Docker鏡像layer的理解

對Docker鏡像layer的理解 轉自:https://blog.csdn.net/u011069294/article/details/105583522 FROM python:3.6.1-alpine RUN pip install flask CMD [“python”,“app.py”] COPY app.py /app.py上面是一個Dockerfile的例子,每一行都會生成一個新的l…

ssh免密登錄配置方法及配置

ssh免密登錄配置方法及配置 直接上步驟,記我們本機為機器A,而機器B、機器C等是我們的服務器,我們要配置的是A到B、C等的 ssh 免密登錄。 1 在機器A上生成秘鑰對 ssh-keygen會得到輸出: Generating public/private rsa key pai…

機器學習系統:設計與實現 計算圖

機器學習系統:設計與實現 計算圖 轉自:https://openmlsys.github.io/chapter_computational_graph/index.html 在上一章節中,我們展示了用戶利用機器學習框架所編寫的程序。這些用戶程序包含了對于訓練數據,模型和訓練過程的定義。然而為了…

常見浮點數格式梳理

常見浮點數格式梳理 IEEE 754 標準 浮點數轉換網站:https://www.h-schmidt.net/FloatConverter/IEEE754.html IEEE二進制浮點數算術標準,為許多CPU與浮點運算器所采用。這個標準定義了表示浮點數的格式(包括負零-0)與反常值&am…

Python拾遺1:collections、itertools和內存io

Python拾遺1:collections、itertools和內存io 轉自:https://www.liaoxuefeng.com/wiki/1016959663602400 本系列旨在補充python中一些很好用但是并非常規課程主線中的知識。 collections collections是Python內建的一個集合模塊,提供了許…

混合精度訓練

混合精度訓練 轉自:https://zhuanlan.zhihu.com/p/441591808 通常我們訓練神經網絡模型的時候默認使用的數據類型為單精度FP32。近年來,為了加快訓練時間、減少網絡訓練時候所占用的內存,并且保存訓練出來的模型精度持平的條件下&#xff0…

拓撲排序C++

拓撲排序C 幾個基本概念的介紹 入度和出度 圖中的度:所謂頂點的度(degree),就是指和該頂點相關聯的邊數。在有向圖中,度又分為入度和出度。 入度 (in-degree) :以某頂點為弧頭,終止于該頂點的邊的數目稱為該頂點的…

C++面試常考題——編譯內存相關

C面試常考題——編譯內存相關 轉自:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/e4ns5g/ C程序編譯過程 編譯過程分為四個過程:編譯(編譯預處理、編譯、優化),匯編,鏈接。 編譯預處…

C++遍歷刪除元素

C遍歷刪除元素 轉自:http://zencoder.info/2019/10/11/erase-element-from-container/ 今天看到一個patch fix從std::map中遍歷刪除元素導致crash問題,突然意識到自己對如何正確地從map等C容器中刪除元素也沒有很牢固清醒的認知。重新梳理了下這塊的正…

關鍵字庫函數

關鍵字庫函數 轉自&#xff1a;https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/ej3mx1/ sizeof和strlen的區別 strlen 是頭文件<cstring> 中的函數&#xff0c;sizeof 是 C 中的運算符。 strlen 測量的是字符串的實際長度&#xff08;其源代碼如下&…

memcpy和memmove的區別以及內存重疊問題

memcpy和memmove的區別以及內存重疊問題 轉自&#xff1a;https://www.codecomeon.com/posts/89/ 區別 memcpy() 和 memmove() 都是C語言中的庫函數&#xff0c;在頭文件 string.h 中&#xff0c;作用是拷貝一定長度的內存的內容&#xff0c;原型分別如下&#xff1a; void…