pip不支持按日期安装包,需先通过PyPI JSON API获取各版本发布日期,筛选最接近目标日期的版本号,再用pip install 包名==版本号安装。

pip 本身不支持按「日期」安装包——它没有 --date、--released-on 或类似参数。你想装的不是“某天发布的包”,而是某个历史版本的包,因为 PyPI 上每个版本都有发布日期,但 pip 只认版本号,不认时间戳。
所以真正要解决的问题是:如何根据发布时间反查并安装那个时间点最接近的可用版本?
怎么查某个包在指定日期附近有哪些可用版本
PyPI 官方 API 不直接提供按日期检索版本的功能,但你可以:
- 访问
<a href="https://www.php.cn/link/cc085192f4f7ace734aa2474593aebf2">https://www.php.cn/link/cc085192f4f7ace734aa2474593aebf2</a>(例如<a href="https://www.php.cn/link/f71d227c188e6a58087706af7c837ec3">https://www.php.cn/link/f71d227c188e6a58087706af7c837ec3</a>) - 解析返回 JSON 中的
releases字段,它是一个以版本号为 key 的对象,每个版本下有upload_time或upload_time_iso_8601字段 - 手动或写脚本筛选出发布日期最接近你目标日期的版本号
示例(用 Python 快速查):
import requests
r = requests.get("https://www.php.cn/link/f71d227c188e6a58087706af7c837ec3")
data = r.json()
for version, files in data["releases"].items():
if files: # 非空才说明该版本实际发布了
upload_time = files[0]["upload_time_iso_8601"]
print(f"{version} → {upload_time[:10]}")
注意:upload_time_iso_8601 是字符串格式,如 "2023-11-06T14:22:31.123456Z",取前 10 位就是日期。
安装查到的具体版本号,而不是“某天”
一旦你确定了目标版本号(比如 2.8.2 发布于 2023-10-22),就用标准方式安装:
-
pip install python-dateutil==2.8.2 - 或更稳妥地加
--no-deps避免依赖冲突:pip install --no-deps python-dateutil==2.8.2 - 如果项目用
requirements.txt,写成:python-dateutil==2.8.2
不要写成 pip install "python-dateutil>=2023.10.22" —— 这语法非法,pip 会报错 Invalid requirement。
容易踩的坑
- 自己建了
dateutil.py文件,导致import dateutil报ModuleNotFoundError:Python 优先导入当前目录下的同名文件,删掉或重命名它 - 用
pip install python-dateutil装的是最新版(截至 2026 年 9 月是2.9.0.post0),不是你想要的历史版 - 在虚拟环境外运行
pip,结果装到了系统 Python 里,后续在 venv 里却 import 不到 - 混用
pip和pip3:确认你用的 Python 解释器版本,建议统一用python -m pip install ...,避免命令别名误导
真正卡住人的,往往不是找不到版本号,而是查到后没意识到必须手动指定——pip 不会替你做“日期→版本”的映射。


















