在内网环境使用pip离线安装python包

在公司的开发过程中,开发机器或生产机器或许并没有连接外网。这时python的pip和conda等安装方式就废掉了。

我们可以从外网提前下载第三方包,拷贝到内网机器中。而第三方包需要区分不同的运行环境,如何下载正确的包呢,本文以pip为例进行介绍。
pip安装的相关介绍详见:在内网环境使用conda离线安装python包

1、下载依赖包

官网下载

最直接的方式:在外网机器上,可以去PyPI网站(https://pypi.org/)下载对应的包。需要格外注意,包之间的依赖关系,以及包的适用平台。

按清单下载

第二种方案:先在开发机器上导出所有依赖包的清单

pip freeze > requirements.txt

然后使用虚拟机或其他方式创建相同的系统环境,下载所有依赖包

pip download -r requirements.txt

此方法要求外网机器和内网机器环境必须相同,也就是保证pip下载的包同样适用于内网机器。清单中的所有包将会下载到当前目录中。

pip下载

第三种方案:若没有相同的系统环境时,在pip下载时可以指定环境参数。

下载python包时,包区分了系统、python版本、CPU(系统位数)等。所以我们可以手动指定这些参数,达到下载内网机器适用包的目的。

下载命令格式如下:

pip download \
    --only-binary <安装包为二进制>
    --platform <系统平台>
    --python-version <python版本>
    --implementation <python解释器>
    --abi <二进制接口>
    <包名>

下面依次介绍:

  • only-binary
    是否只下载二进制文件,即wheel或egg格式文件。取值为“ :all: ”,注意冒号不要丢,所有包只下载二进制文件。“ :none: ”所有包只下载源码。或者“ :<包1,包2,…>: ”,指定这些包只下载二进制。若下载时不满足以上条件会下载失败。
  • platform
    指定适用平台,比如win32、linux_i386、linux_x86_64等。
    具体参数可以在python中执行以下语句获取:
import distutils.util
print(distutils.util.get_platform())
  • python-version
    python版本号去掉点,如2.7 -> 27, 3.8 -> 38等
import sysconfig
print(sysconfig.get_config_var("py_version_nodot"))
  • implementation
    python分发所需的实现版本
    py: 通用python
    cp:CPython
    ip:IronPython
    pp:PyPy
    jy:Jython
    自己的python实现的全称可以通过语句查询:
import sys
print(sys.implementation.name)

最常用的是cp版本。

  • abi
    ABI(Application Binary Interface)应用程序二进制接口。其缩写与python标记相同,比如cp27、cp27mu、cp35m、cp38等。
    mu对应的UNICODE最长4字节,m对应的UNICODE最长2字节。
import sys
if sys.maxunicode == 1114111:
	print("mu")
elif sys.maxunicode == 65535:
	print("m")
else:
	pass

安装包

在内网机器上安装所有包即可。安装时指定包所在的目录

pip install --no-index --find-links=file:<包缓存目录> <包名>

或者

pip install <包文件名>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页