如果你是一名内网 python 开发者,当你发现项目的某个模块缺少了,你会怎么做?
如果内网没有 pip 镜像站点,那么只能:
- 打开 pypi.org ,然后下载模块
- 一个个找到模块的其他依赖模块
- 传入内网,再安装… …
很不幸,如果一个模块有十几个依赖,那就是一次痛苦的经历了
其实,可以用 python 自带的包管理器 pip 的 download 命令~
帮我们下一步到位,下载需要的模块及其依赖,节省不少时间
切换到可以上网的机器
这里我使用的环境是
- 操作系统:windows 10 64 bit – 缩写:win64
- python 版本:3.9 – 缩写:39
- 解释器 版本 : cpython – 缩写:cp
例如,我们需要下载 csvkit 模块及其依赖,到我桌面的 csvkit 文件夹中
mkdir C:UsersusernameDesktopcsvkit # 一定要先创建好目录,用于存放模块和它的依赖模块 pip download <模块/包名> -d <模块/包的存放路径> pip download csvkit -d C:UsersusernameDesktopcsvkit
默认情况下pip download 会根据当前操作系统、python 版本、python 解释器版本
将目标模块、以及依赖的模块,都下载到 -d 参数指定的路径下
如果,你仅仅需要下载 csvkit 模块,而不需要该模块的其他依赖
pip download csvkit --no-deps -d C:UsersusernameDesktopcsvkit
如果内外网的机器的【操作系统、python 版本、python 解释器版本】都一致
只需要使用上述的命令足以
如果【操作系统、python 版本、python 解释器版本】大多和外网机器不同,要怎么办呢?
有时我们还可能需要特定文件类型的安装包【*.whl(编译过的二进制)、*.tar.gz 或者 *.zip(源码安装包)】
因此,需要了解 pip download 的其他参数1,来应对内外网环境不一致的情形
关于 python 的二进制包和源码包的区别2:l
- 二进制包(Binary Packages),通常是 *.whl文件格式,需要通过 pip install *.whl 安装。可以把 python 的二进制包,比作可执行包或 Windows 的 msi 安装程序;
- 源码包(Source Packages)通常是*.tar.gz、bz2 、*.zip格式的文件,通常需要解压后,通过 python setup.py 进行编译安装(也可以直接 pip install *.tar.gz)
pip download csvkit --only-binary=:all: # 模块文件类型过滤器 --platform win32 # 操作系统的版本 --python-version 36 # python 3.6 --implementation cp # 还可以是 pypy 等不同解释器,默认是 cpython -d C:UserscoreJKDesktopcsvkit
提示当使用 --platform(操作系统)、–python-version(python 版本)、–implementation或–abi(解释器版本),作为限制条件时,必须设置–no-deps(不下载所依赖的模块),或者设置–only-binary=:all:(),并且不能设置–no-binary(或者必须设置为–no-binary=:none: )
项目不需要经常的更新模块,可以在内网部署好 pypiserver(便于在内网大家一起使用 pip 安装模块)
借助 pip download 命令,从外网下载好模块和依赖
再一并传入内网的 pypiserver
如果项目频繁更新模块,可以考虑配置自建内网的 pip 镜像站点
根据实际情况,我只用到了第一种,是前三个中最简单的
第四种需要大容量的存贮,暂不考虑
- pypiserver
- pip2pi
- devpi
- bandersnatch
Binary 和 Source 包的异同 ↩︎
pip_download 命令手册 ↩︎



