前言
在一些服务器上,在搭建完Python环境之后,因为客服现场的服务器的网络限制原因,不能直接通过pip命令网络下载安装Python的依赖包。
需要在可以正常上网的服务器上下载好所需的依赖包文件,然后复制拷贝在离线的目标环境下
一、准备requirements.txt文件
将自己需要待迁移的第三方库进行记录,用pip中命令将Python依赖包生成列表到requirements.txt文件中,使用命令:
pip freeze >requirements.txt
二、下载第三方库
在正常能上网的服务器中下载需要准备离线安装的python库包,
需要输入以下两个命令:
pip download -r requirements.txt -d packages/ -i https://pypi.tuna.tsinghua.edu.cn/simple
pip wheel -r requirements.txt -w packages/ -i https://pypi.tuna.tsinghua.edu.cn/simple
- 1、packages/是要生成的文件夹,存放下载的依赖包文件
- 2、https://pypi.tuna.tsinghua.edu.cn/simple是镜像源地址,加速 download 和 wheel的下载,防止因为网络异常而导致中断
- 3、为什么连续使用两个下载命令? 理论上仅使用download或者wheel就可以将第三方库下载完毕,但是实际情况,若单独仅使用download命令,可能不对第三方库中的依赖库进行下载。例如 Flask-PyMongo 这个包,只会下载该包,而不会下载 pymongo,那么在离线安装时候会报错。两者同时使用,下载到同一个文件夹中,后续在离线安装时,才能将requirements文件的库完整的下载。
三、在目标服务器上离线部署
不要将 windows 下载包,然后放到 Linux 上进行安装,会安装失效
将生成的packages文件夹和requirements.txt文件同时拷入到目标服务器中, 输入以下命令
pip install --no-index --find-links=./packages -r ./requirements.txt
这样就批量下载部署完毕
四、脚手架项目依赖项的离线安装
举例说明:在离线环境搭一套dagster脚手架
在有网络环境下需要输入的命令:
# 下载dagster包
pip install dagster
# 生成dagster脚手架
# dagster project scaffold --name my-dagster-project
# 下载dagster脚手架项目的依赖包
pip install -e ".[dev]"
# 启动dagster
dagster dev
按照上文方法,以可将dagster库离线部署,并可以执行dagster project scaffold --name my-dagster-project
命令
但是pip install -e ".[dev]"
,安装同样需要必须离线安装,这里一般项目的依赖包都在setup.py
中
setup.py文件
from setuptools import find_packages, setup
setup(
name="my_dagster_project",
packages=find_packages(exclude=["my_dagster_project_tests"]),
install_requires=[
"dagster",
"dagster-cloud"
],
extras_require={"dev": ["dagster-webserver", "pytest"]},
)
从上面的setup.py
文件中可以看到,需要dagster
、dagster-cloud
、dagster-webserver
、"pytest"
。所以理论上提前下载安装这四个库,pip install -e ".[dev]
问题也就解决了。
所以在在有网环境下的时候,将pip install -e ".[dev]
运行,下载需要安装的库,并用pip freeze >requirements.txt
记录,同时再用pip download
和pip wheel
命令将需要库下载指定文件夹dev_packages文件夹
(文件名可以自定义),再将dev_packages文件夹
拷入到目标服务器中,执行以下命令,指定安装的路径
pip install -e ".[dev]" --no-index --find-links=xxx\dev_packages
-
1、
find-links=xxx\dev_packages
,这里的路径改成你实际需要的路径; -
2、如果还提示
dev_packagesw文件夹
中缺少相关的包,以可根据提示,去Pypi 官网(https://pypi.org/project/uWSGI/)下载并复制到dev_packagesw文件夹
中。
最后启动dagster dev
,运行程序。