如何自动下载PyPI前50个Python包并在venv环境部署含源码及依赖?
实践方案:自动获取PyPI Top50包并完成环境部署与源码下载
一、先拿到PyPI排名前50的包列表
PyPI官方提供了流行包的API接口,直接写个简单脚本就能拿到前50个包名:
import requests # 调用PyPI流行包接口 resp = requests.get("https://pypi.org/popular/json") top50_pkgs = [pkg["name"] for pkg in resp.json()["packages"][:50]] # 把包名存到文件,后续操作更方便 with open("top50_packages.txt", "w") as f: f.write("\n".join(top50_pkgs))
运行这个脚本就能生成包含前50包名的文本文件。
二、虚拟环境创建与包安装
用conda的方式
- 创建新环境(指定Python版本,比如3.10):
conda create -n pypi_top50 python=3.10 -y - 激活环境:
conda activate pypi_top50 - 批量安装包:
pip install -r top50_packages.txt
用venv的方式
- 创建venv环境:
python -m venv pypi_top50_env - 激活环境:
- Windows:
pypi_top50_env\Scripts\activate - Linux/macOS:
source pypi_top50_env/bin/activate
- Windows:
- 同样批量安装:
pip install -r top50_packages.txt
三、下载所有包及依赖的源码
pip自带的download命令就能搞定,加上--no-binary :all:参数会强制下载源码包,而不是二进制wheel:
- 直接基于top50包列表下载(包含所有依赖):
pip download -d ./package_sources -r top50_packages.txt --no-binary :all:
执行后所有源码包会存到package_sources目录里。
如果已经安装完包,想下载当前环境所有已安装包的源码,可以先导出完整包列表:
# 导出环境内所有已安装包(含依赖) pip freeze > all_installed.txt # 下载所有源码 pip download -d ./all_sources -r all_installed.txt --no-binary :all:
四、踩坑提醒
- 版本冲突:Top50包可能存在依赖版本互斥的情况,安装时如果报错,可以试试加
--use-deprecated=legacy-resolver参数让pip用旧的依赖解析逻辑,或者手动调整部分包的版本。 - 网络限速:国内访问PyPI慢的话,加个国内镜像源,比如
-i https://pypi.tuna.tsinghua.edu.cn/simple,安装和下载源码都能用。 - 磁盘空间:50个包加所有依赖的源码大概会占几百MB到几个G,提前留好空间。
- 权限问题:全程用虚拟环境操作,别碰系统级Python,避免权限报错和污染全局环境。
内容的提问来源于stack exchange,提问作者Exploring
相关产品推荐
相关产品推荐

