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 <包文件名>
推荐阅读