离线安装Python软件包的方法

时间: 2023-07-11 admin 互联网

离线安装Python软件包的方法

离线安装Python软件包的方法

由于公司的办公电脑只能在内网环境使用,所以熟悉的使用pip install some-package命令安装Python软件包的方法不能使用,需要实现离线安装Python软件包。下面介绍2种离线安装Python软件包的方法。

方法1:离线安装单个Python软件包

在可以连接外网的电脑上使用pip download some-package命令下载离线Python软件包,这时会有2种情况:

1. 所要安装的包不需要依赖其他包

由于所要安装的包不需要依赖其他包,只有一个文件会被下载下来。离线安装时使用pip install 下载的文件路径即可,以urllib3包为例:

pip download urllib3 -i 

使用此命令下载后得到一个urllib3-1.26.12-py2.py3-none-any.whl文件,离线安装时使用命令

pip install urllib3-1.26.12-py2.py3-none-any.whl

有些包下载的文件格式可能为tar.gz,这表示下载的文件是源码形式的,也可以直接进行安装,pip会自动对源码进行构建,然后安装。不过这时推荐在下载包时使用pip wheel some-package命令,该命令下载的文件格式为whl,这表示下载的文件是预构建形式的,相比于源码形式的文件,它可以提供速度更快的安装。

2. 所要安装的包需要依赖其他包

由于所要安装的包需要依赖其他包,会有多个文件会被下载下来。离线安装时直接使用pip install 下载的文件路径会导致pip找不到依赖而报错,这时需要添加--find-links=路径选项来指定寻找依赖的路径,以requests包为例:

pip download requests -d packages -i 

-d packages选项表示将多个文件保存在packages文件夹下。使用此命令下载后可以在packages文件夹中找到5个文件,分别是requests-2.28.1-py3-none-any.whl、certifi-2022.6.15-py3-none-any.whl、charset_normalizer-2.1.1-py3-none-any.whl、idna-3.3-py3-none-any.whl和urllib3-1.26.12-py2.py3-none-any.whl,离线安装时使用命令

pip install --no-index --find-links=packages requests

--no-index选项表示不要检查PyPI。此处有一个坑,如果你下载下来的文件格式是tar.gz,那么运行此命令时会得到一个报错

  Installing build dependencies ... errorerror: subprocess-exited-with-error× pip subprocess to install build dependencies did not run successfully.│ exit code: 1╰─> [3 lines of output]Looking in links: .ERROR: Could not find a version that satisfies the requirement setuptools (from versions: none)ERROR: No matching distribution found for setuptools[end of output]note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> See above for output.note: This error originates from a subprocess, and is likely not a problem with pip.

个人感觉这个错误是由于pip在安装依赖时不能正确构建源码所致,要解决这个问题只能在下载包时使用上面提到的pip wheel some-package命令,这个命令只会下载whl格式的包,安装时不会出现上述问题。

方法2:批量离线安装多个Python软件包

方法1适用于安装少量包的情况,如果要安装多个包,方法1使用起来就不太方便了。要批量安装多个包,首先在可以连接外网的电脑上使用pip安装所有所需的包,然后使用

pip freeze > requirements.txt

生成一个包括所有包的requirements.txt文件。使用

pip wheel -r requirements.txt -i 

下载所有包。这里只推荐使用pip wheel命令来下载包,因为使用pip download命令下载多个包时不可避免的会下载到非whl格式的文件,后续安装时容易报错。不过pip wheel命令不能使用-d选项把下载的文件放在一个文件夹里,只能放置在当前文件夹下,所以建议提前新建一个文件夹来存放下载的包文件,requirements.txt文件与下载的文件在同一目录下即可。离线安装使用

pip install --no-index --find-links=. -r requirements.txt

即可批量安装所有软件包。