python如何将自己的包上传到PyPi并可通过pip安装的方法步骤

下面是详细讲解“python如何将自己的包上传到PyPi并可通过pip安装的方法步骤”的完整攻略。

前置准备

在上传包之前,请先确保已经安装了pip和setuptools。可以通过在终端中输入以下命令进行检查:

pip --version
pip3 --version
easy_install --version

如果以上命令中有一个或者多个是可用的(显示了版本号),则已经安装了相应的软件。如果没有,则需要先安装这些软件。

Step 1 创建一个账户

首先需要在 https://pypi.org 上面创建一个账户,如果已经注册过账户,则直接跳过这一步。

Step 2 创建打包文件

创建自己的包有很多种方式,这里只提供一个简单的示例。

在当前工程的根目录下,创建一个名为 myPackage 的文件夹,并在其中创建一个名为 __init__.py 的文件。接着,在 myPackage 文件夹中创建一个名为 hello.py 的文件,其中包含以下代码:

def say_hello():
    print("Hello, world!")

保存文件后,回到根目录,创建一个名为 setup.py 的文件,并输入以下代码:

from setuptools import setup, find_packages

setup(
    name='myPackage',
    version='0.1.0',
    url='https://github.com/yourname/myPackage',
    author='Your Name',
    author_email='yourname@example.com',
    description='A simple package for saying hello',
    packages=find_packages(),    
    install_requires=[],    
)

在此示例中,我们使用了 setuptools 模块打包了一个名为 myPackage 的包,并设置了一些基本信息。其中,find_packages 函数会自动查找所有的包。如果有其他的依赖包需要在此处添加。

Step 3 打包并上传

使用以下代码命令进行打包:

python3 setup.py sdist bdist_wheel

其中,sdist 参数用于创建源代码分发包,bdist_wheel 参数用于创建 Python 3 环境下的 wheel 文件。

在打包完成后,使用以下代码命令将包上传到 PyPI:

twine upload dist/*

在这里,我们使用了 twine 工具将打包好的文件上传到 PyPI 上。

Step 4 安装包

包上传到 PyPI 后,其他人就可以通过 pip 来安装该包了。他们只需要使用以下命令即可:

pip install myPackage

在上述命令中,myPackage 是包的名称。其他人可以直接在终端中输入此命令,即可运行该包中的 say_hello 函数。

示例

下面举两个示例,以帮助更好的理解。

示例1:上传一个命令行工具

假设我们现在需要上传一个简单的命令行工具,可以用它来查询天气。我们这个工具的名字叫做 myweather

为了创建这个工具,我们需要准备一个 weather.py 文件,其中包含了查询和解析天气 API 的代码,并实现一个 CLI 接口。具体代码如下:

import requests
import click


URL = "http://api.openweathermap.org/data/2.5/weather?q={},{}&units=imperial&APPID={}"


@click.command()
@click.argument("city")
@click.argument("country_code", default="us")
@click.option("--api-key", required=True, help="OpenWeatherMap API Key")
def main(city, country_code, api_key):
    url = URL.format(city, country_code, api_key)
    response = requests.get(url)
    data = response.json()
    temp = data["main"]["temp"]
    print(f"Current temperature in {city}, {country_code}: {temp} F")


if __name__ == "__main__":
    main()

将上述代码保存在名为 myweather 的文件夹中,然后创建 setup.py 文件,其中包含以下代码:

from setuptools import setup, find_packages

setup(
    name='myweather',
    version='0.1.0',
    url='https://github.com/yourname/myweather',
    author='Your Name',
    author_email='yourname@example.com',
    description='A simple CLI tool for checking weather',
    packages=find_packages(),    
    install_requires=[
        "click",
        "requests"
    ],
    entry_points={
        "console_scripts": [
            "myweather=myweather.weather:main"
        ]
    }
)

使用以下命令将包上传到 PyPI:

twine upload dist/*

上传完成后,其他人就可以使用以下命令安装我们上传的 myweather 包:

pip install myweather

最后,其他人可以使用以下命令进行查询天气:

myweather london --api-key 1234567890abcdef1234567890abcdef

这里的 london 是城市名称,1234567890abcdef1234567890abcdef 是在 OpenWeatherMap 注册账户后拿到的 API Key。

示例2:上传一个常用库

假设我们现在需要上传一个名为 mylibrary 的常用库,可以将一个字符串转换为整数。我们的这个库仅包含一个模块,即 mylibrary.py,包含以下代码:

def string_to_int(s):
    if s[0] in ["-", "+"]:
        sign = -1 if s[0] == "-" else 1
        s = s[1:]
    else:
        sign = 1
    result = 0
    for c in s:
        result *= 10
        result += ord(c) - ord("0")
    return sign * result

接着,将上述代码保存在名为 mylibrary 的文件夹中,并在该文件夹中创建一个名为 __init__.py 的空文件。然后创建 setup.py 文件,其中包含以下代码:

from setuptools import setup, find_packages

setup(
    name='mylibrary',
    version='0.1.0',
    url='https://github.com/yourname/mylibrary',
    author='Your Name',
    author_email='yourname@example.com',
    description='A library for converting strings to integers',
    packages=find_packages(),    
    install_requires=[],
)

使用以下命令将包上传到 PyPI:

twine upload dist/*

上传完成后,其他人就可以使用以下命令安装我们上传的 mylibrary 包:

pip install mylibrary

最后,其他人可以直接在代码中使用以下命令来将字符串转换为整数:

from mylibrary import string_to_int

string_to_int("123")   # 返回 123
string_to_int("-123")  # 返回 -123

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python如何将自己的包上传到PyPi并可通过pip安装的方法步骤 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Django 如何从request中获取前端数据

    当用户访问Django网站并在前端提交了数据,Django就需要从request对象中获取这些数据。 在Django中,request对象是视图函数中的一个参数,通过它我们可以获取所有的前端数据。下面是获取前端数据的步骤: 在视图函数中添加request参数,例如: from django.http import HttpResponse def my_vi…

    python 2023年5月13日
    00
  • 布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)

    布同 Python中文问题解决方法——总结了多位前人经验,初学者必看 为什么会存在中文问题 Python 是一门严谨的语言,它默认使用的是 ASCII 码,而不是像某些语言一样直接支持中文。所以,在 Python 中使用中文会出现各种问题,例如编码错误、输出乱码等。 如何解决中文问题 1. 设置文件编码 多数情况下,出现中文问题与文件的编码有关。如果文件编码…

    python 2023年5月20日
    00
  • Python聚类算法之基本K均值实例详解

    Python聚类算法之基本K均值实例详解 什么是聚类算法 聚类(Clustering)是一种将对象集合分成多个类别(clusters)的方法,使得每个簇内的对象都更加相似,而不同簇的对象则不相似。聚类算法在机器学习、图像处理、数据挖掘等领域有着广泛的应用。 K均值算法简介 K均值(K-means)是一种最常见的聚类算法之一,也是一种迭代算法。数据点被划分到与…

    python 2023年6月5日
    00
  • Python的log日志功能及设置方法

    我们来详细讲解一下“Python的log日志功能及设置方法”的完整攻略。 1. 什么是log日志 log是程序开发过程中常用的调试工具,通过记录程序运行过程中的各种状态信息和错误信息,方便程序开发人员进行调试和错误排查。Python中提供了logging模块,可以方便地实现程序输出log日志的功能。 2. logging模块的使用 2.1 基本用法 logg…

    python 2023年6月5日
    00
  • Python全面分析系统的时域特性和频率域特性

    Python全面分析系统的时域特性和频域特性攻略 1. 什么是时域特性和频率域特性? 时域特性:描述系统输出相对于输入的时间响应特性,涉及信号的时间变化过程和振幅大小等。 频率域特性:描述输入信号在系统中的频率响应特性,即输出与输入信号的振幅比例和相位差随频率变化的规律。 2. 如何分析时域特性? 2.1 生成输入信号 通过NumPy库的numpy.lins…

    python 2023年5月30日
    00
  • Python实现树莓派摄像头持续录像并传送到主机的步骤

    下面是“Python实现树莓派摄像头持续录像并传送到主机的步骤”的完整攻略: 准备工作 确保树莓派摄像头已经正确安装。 在树莓派上安装Python开发环境,并安装picamera包。 bash sudo apt-get update sudo apt-get install python3-picamera 录像并传送到主机的步骤 使用Python的pica…

    python 2023年5月30日
    00
  • Python实现监控程序执行时间并将其写入日志的方法

    下面为您详细讲解如何用Python实现监控程序执行时间并将其写入日志的方法: 1. 实现方式 我们可以通过time和logging两个标准库来实现监控程序执行时间并将其写入日志。 首先,使用time标准库来监控程序执行时间。我们可以在程序开始执行前记录当前时间,程序执行结束后再获取当前时间,两者的差值即为程序执行时间。 接下来,使用logging标准库来记录…

    python 2023年6月2日
    00
  • 解决python中的幂函数、指数函数问题

    解决Python中的幂函数、指数函数问题的完整攻略 在Python中,我们可以使用内置函数pow或运算符**来实现幂函数、指数函数的计算。但在实际应用中,我们可能会遇到一些问题,例如计算结果准确、计算速过慢等。在本文中,我们详细讲解解决Python中的幂函数、指数函数问题的完整攻略,包括如何使用math模块、如何使用numpy库等。 使用math模块 在Py…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部