问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【深度学习基础】一篇弄懂PyPI和pip(呕心沥血版)

创作时间:
作者:
@小白创作中心

【深度学习基础】一篇弄懂PyPI和pip(呕心沥血版)

引用
CSDN
1.
https://blog.csdn.net/m0_67656158/article/details/146023890

1. 前言

对于刚刚使用Python 的同学肯定会使用到pip去下载各种包和库来方便自己使用,但是大家有没有想过一个问题:

  • pip为什么可以下载各种包来直接给你使用?
  • pip是从哪里获得这些包(本质是包装好的代码)?

答案是:PyPI仓库。pip是从PyPi这个大型软件存储仓库中获取到你所指定的包,同时下载到你所指定的位置的一个工具。

简单来说:PyPI(Python Package Index)是一个包管理平台。它是 Python 官方的软件包仓库,开发者可以在 PyPI 上发布、维护和分发 Python 库,用户也可以通过pip install 轻松安装这些库。本文将详细介绍 PyPI&PIP的使用方法、如何发布自己的Python 包,以及一些常见问题的解答。

2. PyPI&PIP是什么

PyPI(Python Package Index) 是Python 官方的软件包存储库,类似于 Maven Central(Java)和 npm Registry(Node.js) 等其他编程语言的包管理平台。PyPI 的作用包括:

  • 存储&分发 Python 库:开发者将自己的 Python 项目上传到 PyPI,供全球用户下载和使用。
  • 下载Python 库:用户可以使用 pip install 从PyPI中下载自己需要的软件包。
  • 软件版本管理:支持管理多个版本的软件包,方便开发者维护和更新。

pip 是 Python 的包管理器。这意味着它是一个工具,允许你从PyPI中安装和管理不属于标准库的其他库和依赖。如果你已经了解了其他语言,那么可能会对包管理器的概念比较熟悉。JavaScript 使用 npm 管理软件包,Ruby 使用 gem,以及 .NET 使用 NuGet。Python 中,则是 pip 作为标准包管理器

pip工具使得我们可以使用PyPI软件包仓库

3. 如何使用PyPI仓库

使用PyPI仓库包括:

  • 从仓库中下载软件包。
  • 从仓库中搜索软件包。
  • 从仓库中查看软件包。

3.1 利用pip工具下载软件包

3.1.1 默认安装

作用:从 Python 包索引(PyPI)下载并安装包的最新版本。

语法:

pip install <包名>

示例:

pip install requests
3.1.2 指定版本安装

作用:指定包的版本号,安装特定版本。

语法:

pip install <包名>==<版本号>
pip install <包名>>=<最低版本号>
pip install <包名><=最高版本号>

示例:

pip install pandas==1.5.3   # 安装 pandas 1.5.3
pip install flask>=2.0.0   # 安装 2.0.0 或更高版本的 flask
3.1.3 从requirements.txt 中批量安装

作用:根据 requirements.txt 文件批量安装所有依赖包。

语法:

pip install -r <文件路径>

示例:

pip install -r requirements.txt  # 安装当前目录下的 requirements.txt 中的依赖
3.1.4 从本地文件安装

作用:安装本地已下载的包文件(如 .whl 或 .tar.gz)。

语法:

pip install <本地文件路径>

示例:

pip install ./numpy-1.23.5-cp39-cp39-win_amd64.whl  # 安装本地 .whl 文件
pip install /path/to/mypackage.tar.gz               # 安装本地源码包

.whl 或 .tar.gz的区别:

特性
.whl
.tar.gz
格式
二进制分发格式
源码分发格式
安装速度
快速(无需编译)
较慢(可能需要编译)
跨平台
针对特定平台和 Python 版本
适用于所有平台和 Python 版本
内容
预编译的 Python 代码和元数据
源代码和配置文件
推荐使用
官方推荐,优先使用
在没有 .whl 文件时使用
3.1.5 从 Git 仓库安装

作用:直接从 Git 仓库(如 GitHub、GitLab)克隆代码并安装。

语法:

pip install git+<仓库URL>@<分支/标签/提交号>

示例:

pip install git+https://github.com/user/repo.git      # 安装主分支
pip install git+https://github.com/user/repo.git@v1.0 # 安装指定标签
pip install git+https://github.com/user/repo.git@commit_hash # 安装指定提交
3.1.6 安装到指定目录

作用:将包安装到自定义目录(非默认的 Python 环境)。

语法:

pip install --target=<目录路径> <包名>

示例:

pip install --target=./mylibs requests  # 安装到当前目录的 mylibs 文件夹

写到这里突然想起来一个知识点(安装是否检查依赖冲突问题):

  1. pip安装仅仅检查直接依赖是否冲突,不检查间接依赖是否冲突
  2. conda安装检查直接和间接依赖是否冲突

3.2 利用pip工具搜索软件包

搜索软件包就是找PyPI软件仓库中有没有你想要的库。可以直接在 PyPI 官网 搜索软件包,例如搜索

flask

可以找到 Flask Web 框架。或者使用

pip search

命令(此命令已在新版 pip 中被移除)

3.2.1 通过 PyPI 官网搜索(推荐)

访问 PyPI 官网 直接在搜索栏中输入关键词,可以找到所有相关的 Python 包。优点:最权威、最全面的搜索方式,支持按名称、描述、关键字等过滤。

3.2.2 使用命令行工具(第三方工具 pip-search)

安装 pip-search 工具:

pip install pip-search

搜索包:

pip-search requests

输出示例:

Name              Version Description
----------------  ------- --------------------------
requests          2.31.0  Python HTTP for Humans.
requests-oauthlib 1.3.1   OAuthlib support for requests.
...

3.3 利用pip工具查看软件包

在安装某个包前,可以使用

pip show

查看详细信息:

pip show requests

输出示例:

Name: requests
Version: 2.28.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io/
Author: Kenneth Reitz
License: Apache 2.0

4. 如何上传自己的包到PyPI

如果你开发了一个 Python 库,并希望发布到 PyPI 供他人使用,可以按照以下步骤操作。

4.1 注册 PyPI 账户

  1. 访问 PyPI 官网 并注册一个账户。
  2. 进入 API 令牌管理 页面,创建一个新的 API 令牌(用于安全上传)。

4.2 编写

setup.py

在 Python 项目的根目录下创建

setup.py

,示例如下:

from setuptools import setup, find_packages
# 读取 README 文件内容作为项目长描述(可选)
with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()
setup(
    # 基础元数据
    name="my_project",  # 项目名称(PyPI 上唯一的标识符)
    version="0.1.0",    # 版本号(遵循语义化版本规范)
    author="Your Name",
    author_email="your.email@example.com",
    description="A short description of your project",  # 简短描述
    long_description=open("README.md", encoding="utf-8").read(),
    long_description_content_type="text/markdown",  # 长描述格式
    url="https://github.com/yourusername/my_project",  # 项目主页
    
    # 包配置
    packages=find_packages(where="src"),  # 自动发现包(推荐将代码放在 src 目录)
    package_dir={"": "src"},  # 指定包根目录为 src
    
    # 依赖管理
    install_requires=[
        "requests>=2.25.1",  # 项目运行所需的核心依赖
        "numpy>=1.21.0",
    ],
    extras_require={
        "dev": ["pytest>=6.0", "black>=21.0"],  # 开发环境依赖(pip install .[dev])
        "docs": ["sphinx>=4.0"],  # 文档生成依赖
    },
    
    # 包含非代码文件(如数据、配置文件)
    include_package_data=True,  # 需配合 MANIFEST.in 文件使用
    # package_data={"my_package": ["data/*.json"]},  # 指定包内数据文件
    
    # 命令行工具配置
    entry_points={
        "console_scripts": [
            "mycli=my_package.cli:main",  # 创建命令行命令 mycli
        ],
    },
    
    # 分类信息(用于 PyPI 分类)
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    
    # Python 版本要求
    python_requires=">=3.8",
)

4.3 构建Python 包

安装

setuptools

wheel

(如果尚未安装):

pip install setuptools wheel

使用

setup.py

生成分发包:

python setup.py sdist  # 生成源码包
python setup.py bdist_wheel  # 生成二进制包

或者使用现代打包工具

build

(推荐):

pip install build
python -m build

成功后,会在

dist/

目录下生成

.tar.gz

.whl

文件,例如:

my_project/
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── core.py
├── tests/
├── pyproject.toml  # 核心配置文件
├── README.md
└── LICENSE

4.4 使用 TestPyPI 进行测试

在正式发布之前,可以先将包上传到 TestPyPI(PyPI 的测试环境),以避免错误的发布影响正式版本。

  1. 上传到 TestPyPI:
twine upload --repository testpypi my_project/*
  1. 然后从 TestPyPI 安装:
pip install --index-url https://test.pypi.org/simple/ mypackage

TestPyPI 的索引地址: https://test.pypi.org/simple/

mypackage:要安装的包名

  1. 如果测试通过,再上传到正式的 PyPI。

4.5 上传到 PyPI

安装

twine

pip install twine

使用

twine

上传:

twine upload my_project/*

然后,其他用户就可以通过

pip install mypackage

安装你的包了! 🎉

5. set.up.py 和 requirement.txt 的区别

我们知道我们每次下载一个项目后都需要下载项目所需要的依赖。这个依赖的下载一般都会写在 set.up.py 和 requirement.txt 中。因此我们会运行两个指令来一键安装依赖。

首先运行:

pip install -r requirements.txt

然后运行:

python setup.py install

那么两者有什么区别呢?见下图:

6. 总结

  • PyPI 是 Python 官方的软件包存储库:提供数十万个 Python 包,支持开发者发布和分发软件。
  • **使用

pip

进行包管理工具**:包括安装、升级和卸载 Python 库。

  • python -m build:生成Python包。
  • **开发者可以使用

twine

上传自己的 Python 包**:并通过

setup.py

pyproject.toml

进行打包。

  • 可以使用 TestPyPI 进行测试:避免影响正式版本。
  • 提高安全意识:防范恶意软件,使用 API 令牌进行安全认证。

打包的流程:

  1. 写项目代码。
  2. 在项目根目录执行:python -m build 建立Python包
  3. 使用 TestPyPI 进行测试。
  4. 使用**

twine

上传自己的 Python 包**

PyPI 是 Python 生态系统的核心之一,掌握 PyPI 的使用方法,可以更高效地管理 Python 依赖,并发布自己的 Python 库! 🚀

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号