python 如何上传包到pypi
作者:何雨龙 发布时间:2023-12-22 13:31:41
有过一定的 Python 经验的开发者都知道,当引入第三方包时,我们常常会使用 pip install 命令来下载并导入包。
那么,如何写一个自己的包,上传到 PyPI 呢,其他开发者也可以通过 pip install 命令下载并导入?
本文提供了最简单的示例。
准备好项目目录
创建一个项目目录,其目录结构如下:
/packaging_tutorial
/example_pkg
__init__.py
其中,packaging_tutorial 是一个文件目录,example_pkg 是一个你希望上传的 Python 包。
注:本人使用的是 virtualenv + virtualenvwrapper 构建的 Python 虚拟环境,因此 python 和 pip 命令(而非 python3 和 pip3)直接对应的是我所指定的虚拟环境(Python 3.6.7)。
创建一些必要文件
再向 packaging_tutorial 中创建一些文件。其目录结构如下:
/packaging_tutorial
/example_pkg
__init__.py
setup.py
LICENSE
README.md
创建 README.md 文件
在 README.md 可以输入一些介绍项目的文档。
# 测试
这只是一个测试。
- 测试 1
- 测试 2
- 测试 3
创建 setup.py 文件
setup.py 是 setuptools 的构建脚本,它提供了包的各种信息。
在 setup.py 中输入以下代码:
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="example-pkg-your-username",
version="0.0.1",
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
各个配置的字段的含义应该是不言而喻的,如果想了解更多,参见官网解释。
创建 LICENSE
LICENSE 是项目所遵循的许可证,以 MIT 为例:
Copyright (c) 2018 The Python Packaging Authority
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
存档发布版本
一般来说,pip 默认应该都安装了 setuptools 和 wheel。如果没有安装,则安装之:
pip install setuptools wheel -i https://pypi.douban.com/simple
如果安装需要更新,则更新之:
pip install --upgrade setuptools wheel -i https://pypi.douban.com/simple
安装好最新版本后,在 setup.py 所在目录下输入:
python setup.py sdist bdist_wheel
这个命令会在生成一个 dist 目录,里面有两个文件:
dist/
example_pkg_your_username-0.0.1-py3-none-any.whl
example_pkg_your_username-0.0.1.tar.gz
tar.gz 是源文件存档,whl 是构建的发布版本。
上传发布版本
安装 twine:
pip install twine -i https://pypi.douban.com/simple
安装好之后,执行 twine 命令(这里,需要注意你已经注册了 PyPI 的账号):
twine upload dist/*
Enter your username: heyulong
Enter your password:
Uploading distributions to https://upload.pypi.org/legacy/
Uploading example_pkg_heyulong-0.0.1-py3-none-any.whl
100%|██████████████████████████████████████| 5.49k/5.49k [00:01<00:00, 4.66kB/s]
Uploading example-pkg-heyulong-0.0.1.tar.gz
100%|██████████████████████████████████████| 4.23k/4.23k [00:01<00:00, 2.21kB/s]
执行完之后,即可在 PyPI 官网上看到自己上传的项目了。
安装你上传的 PyPI 项目,比如我的:
pip install example-pkg-heyulong
这里简单介绍了上传 PyPI 项目的过程。更多细节请关注 PyPI 官网。
来源:https://www.cnblogs.com/noluye/p/11185559.html


猜你喜欢
- 1、定义标记变量;利用变量值的变化退出循环# 第一种嵌套形式a = [[1, 2, 3], [5, 5, 6], [7, 8, 9]]# i
- 在这里我们将介绍的是MySQL内存使用上的线程独享,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,
- 本人第一次使用vue awesome。踩到的坑确实不少。官网上面的用法写的很简单,按照上面做法基本会遇到如下这个问题轮播第二次之后,首屏会自
- 1. torch- torchvision- python版本对应关系2. CUDA Toolkit 和PyTorch的对应关系3. 安装说
- 首先,项目结构如下:想要让导航栏、侧边栏变为公共页面,则要在App.vue页面中加入。假设已经有了Header.vue和Left.vue,这
- 有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell主要用到python os库和so
- 1. php 中的序列化在 PHP 中,序列化是将数据结构或对象转换为可以存储或传输的字符串表示的过程,经过序列化之后的对象或者数据结构,就
- 递归查询对于同一个表父子关系的计算提供了很大的方便,这个示例使用了SQL server 2005中的递归查询,使用的表是CarParts,这
- 首先这个是7米当时问我一个问题,不过可惜我不知道怎么解决,后来知道解决方法很简单,只是添加了一个margin-top:-1em就
- 源码解读Bootstrap按钮按钮组按钮组和下拉菜单组件一样,需要依赖于bootstrap.js。使用“btn-group”的容器,把多个按
- 八卦为先八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:你知道世界上第一份reset.css在哪么?* { m
- 利用Pytest+Request+Allure+Jenkins实现接口自动化;实现一套脚本多套环境执行;利用参数化数据驱动模式,实现接口与测
- 新上的一台服务器出现了一个现象:ASP程序中,调用函数Now(),显示的时间总是形如“2009-07-12 上午 08:12:56”这样的,
- 限制只能输入数字// -----------------------------------------------------------
- 平方根,又叫二次方根,表示为〔√ ̄〕,如:数学语言为:√ ̄16=4。语言描述为:根号下16=4。以下实例为通过用户输入一个数字,并计算这个数
- pandas按照多列排序ascending代码示例:import pandas as pd#读取文件df = pd.read_csv(
- 1、代码from aip import AipFaceimport cv2import timeimport base64from PIL
- JDBC(Java Database Connectivity),即Java数据库连接。通过JDBC编程,可以使Java应用程序和数据库进行
- 之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类、对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如
- 目录一、任务二、实现(1)导库并创建画布(2)画图形(3)创建按钮和文本框(4)功能实现三、完整代码四、升级—绑定键盘事件总结一、任务用多个