从本地目录中安装 Python 包

2024-06-20#Python

在开发 Python 应用或者完成机器学习任务时,通常使用 pip install -r requirements.txt 安装第三方包。但是,当代码在生产环境中运行前,才去安装依赖包,会产生一些问题。比如安装时间长的问题:从官方PyPI服务器或者国内镜像安装依赖包时,网速不够快。对于一些大型包,尤其是机器学习使用的包,可能耗费几分钟或者几十分钟的时间。

参考应用开发的模式,可以将打包和运行解耦。在部署之前,将代码及其依赖打包成本地文件,在运行期间从本地文件中安装或者提取依赖。

结合笔者的实践经验,目前有以下方法:

  1. 使用 virtualenv 创建虚拟环境并安装依赖软件包,然后将虚拟环境中的软件包合并打包,上传到服务器。在运行代码时,通过修改 PYTHONPATH 环境变量或者 sys.path 改变软件包的加载路径。

  2. 使用 wheel 将软件包下载为 whl 文件,上传到服务器的某个目录。在服务器上,从这个目录中安装软件包(而不是从 PyPI服务器)。

打包虚拟环境中的依赖包,上传并解压到服务器 🔗

当服务器无法运行Shell脚本,只能运行 Python 文件时,可采用这种方法。思路如下,待验证:

  1. 将依赖包安装到虚拟环境,比如 venv/
  2. venv/ 目录压缩,上传到服务器,然后解压。
  3. venv/lib/python3.9/site-packages 添加到 PYTHONPATH环境变量或者 sys.path 中。此时即可引用依赖包。

下载依赖包到本地,上传并安装到服务器 🔗

下载依赖包 🔗

首先安装 wheel

pip install wheel

将依赖下载到本地可使用如下命令,其中 -w 参数指定将依赖包下载到 packages 目录:

pip wheel -r requirements.txt -w packages

运行成功后,就会看到 packages 目录里出现了 requirements.txt 中定义的依赖包及其依赖包。这些依赖包文件的后缀为 .whl

安装依赖包 🔗

将依赖包上传到服务器后,执行以下命令,即可从本地目录安装(此处为 ./packages 目录):

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

加载中...