Requests Setup.py 文件解析 | AI生成和翻译

Home 2025.10

概述

这是一个 setup.py 文件,它是与 setuptools 配合使用的标准 Python 脚本,用于定义和构建 Python 包。具体来说,这个文件是为 Requests 库准备的——这是一个流行的 Python HTTP 客户端。它处理诸如包名称、版本、依赖项和分类器(用于 PyPI 分发)等元数据。当你运行 pip install requests 时,这个脚本(或其构建产物)会在后台执行以安装该包。

该脚本结构上是一个单独的 setup() 函数调用,但它包含了一些防护措施、辅助功能以及从其他文件动态读取的内容。我将逐节进行解析。

1. 导入和 Python 版本检查

#!/usr/bin/env python
import os
import sys
from codecs import open

from setuptools import setup

CURRENT_PYTHON = sys.version_info[:2]
REQUIRED_PYTHON = (3, 9)

if CURRENT_PYTHON < REQUIRED_PYTHON:
    # 错误消息并退出
    sys.exit(1)

2. 发布快捷方式

if sys.argv[-1] == "publish":
    os.system("python setup.py sdist bdist_wheel")
    os.system("twine upload dist/*")
    sys.exit()

3. 依赖项

requires = [
    "charset_normalizer>=2,<4",
    "idna>=2.5,<4",
    "urllib3>=1.21.1,<3",
    "certifi>=2017.4.17",
]
test_requirements = [
    "pytest-httpbin==2.1.0",
    "pytest-cov",
    "pytest-mock",
    "pytest-xdist",
    "PySocks>=1.5.6, !=1.5.7",
    "pytest>=3",
]

4. 动态元数据加载

about = {}
here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, "src", "requests", "__version__.py"), "r", "utf-8") as f:
    exec(f.read(), about)

with open("README.md", "r", "utf-8") as f:
    readme = f.read()

5. 主要的 setup() 调用

这是文件的核心。它配置包以进行构建/安装:

setup(
    name=about["__title__"],  # 例如 "requests"
    version=about["__version__"],  # 例如 "2.32.3"
    description=about["__description__"],  # 简短摘要
    long_description=readme,  # 完整的 README
    long_description_content_type="text/markdown",  # 在 PyPI 上以 Markdown 格式渲染
    author=about["__author__"],  # 例如 "Kenneth Reitz"
    author_email=about["__author_email__"],
    url=about["__url__"],  # 例如 GitHub 仓库
    packages=["requests"],  # 安装 'requests' 包
    package_data={"": ["LICENSE", "NOTICE"]},  # 包含非 Python 文件
    package_dir={"": "src"},  # 源代码位于 'src/'
    include_package_data=True,  # 拉取所有数据文件
    python_requires=">=3.9",  # 与版本检查保持一致
    install_requires=requires,  # 来自前面的定义
    license=about["__license__"],  # 例如 "Apache 2.0"
    zip_safe=False,  # 允许编辑已安装的文件(库的常见做法)
    classifiers=[  # PyPI 分类,便于发现
        "Development Status :: 5 - Production/Stable",
        # ... (完整列表包括 Python 版本、操作系统、主题等)
    ],
    tests_require=test_requirements,  # 用于 `pip install -e '.[tests]'`
    extras_require={  # 可选依赖项
        "security": [],  # 为空——可能供将来使用
        "socks": ["PySocks>=1.5.6, !=1.5.7"],  # SOCKS 代理支持
        "use_chardet_on_py3": ["chardet>=3.0.2,<6"],  # 遗留字符集回退
    },
    project_urls={  # PyPI 页面上的链接
        "Documentation": "https://requests.readthedocs.io",
        "Source": "https://github.com/psf/requests",
    },
)

实际工作原理

这个 setup.py 来自官方的 Requests 仓库,并且多年来变化不大——它经过了实战测试,非常可靠。

参考资料


Back

x-ai/grok-4-fast

Donate