欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pip离线安装python包

程序员文章站 2022-05-27 19:22:19
...

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

我们可以从外网提前下载第三方包,拷贝到内网机器中。而第三方包需要区分不同的运行环境,如何下载正确的包呢,本文以pip为例进行介绍。

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 <包文件名>