You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyPI包开发疑问:如何正确配置Pillow依赖?

解决PyPI本地开发包依赖Pillow自动安装问题

你遇到的这个问题是Python包开发中很常见的配置细节问题,我来一步步帮你排查和解决:

1. 确认setup.pyinstall_requires配置正确性

首先检查你的setup.py是否采用标准的setuptools写法,确保install_requires里明确指定了Pillow(注意官方包名是Pillow,不是旧版的PIL)。一个规范的示例如下:

from setuptools import setup, find_packages

setup(
    name="your-custom-package",
    version="0.1.0",
    packages=find_packages(exclude=["tests*"]),  # 确保正确识别你的包目录
    install_requires=[
        "Pillow>=9.0.0",  # 可指定最低兼容版本,也可仅写"Pillow"
    ],
    # 其他配置如author、description等按需添加
)

2. 必须添加pyproject.toml文件(关键步骤!)

从pip 21.0版本开始,Python包构建需要明确指定构建后端,缺少这个文件会导致pip无法正确解析setup.py中的依赖声明。在项目根目录创建pyproject.toml,内容如下:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

这个文件会告诉pip使用新版本的setuptools作为构建工具,确保依赖被正确识别并自动安装。

3. 理清install_requiresrequirements.txt的分工

你提到在requirements.txt中也配置了Pillow,但两者的作用是不同的:

  • install_requires包的运行时依赖,是包分发时必须声明的核心依赖,pip安装包时会自动解析并安装这些依赖。
  • requirements.txt通常用于开发环境或部署场景,比如包含测试依赖、代码格式化工具等,pip install -e .默认不会自动读取这个文件,除非你显式指定:pip install -e . -r requirements.txt

所以核心的依赖声明必须放在setup.pyinstall_requires中。

4. 清理缓存后重新测试

旧的构建缓存可能导致依赖不更新,执行以下步骤重置测试:

  1. 卸载已安装的Pillow:pip3 uninstall -y Pillow
  2. 删除项目根目录下的your_package_name.egg-info目录(如果存在)
  3. 重新执行本地安装:pip3 install -e .

此时pip会重新解析你的包配置,自动安装Pillow依赖。


内容的提问来源于stack exchange,提问作者홍한석

火山引擎 最新活动