离线安装Django

在线上服务器部署Django的时候,不可能将所有服务器都连接到internet,然后通过pip进行联网安装。

离线安装Django以及相关软件模块

pip freeze > requirements.txt
  • 使用以下命令为模块包构建一个wheelhouse目录

pip wheel -r requirements.txt -w wheelhouse

注意:如果没有-w wheelhouse参数,则默认在当前目录下构建wheels - 参考 pip wheel

  • 压缩wheelhouse目录

zip -r wheelhouse.zip wheelhouse
source venv2/bin/activate
unzip wheelhouse.zip
pip install wheelhouse/*

pip install wheelhouse的异常排查

pip版本过低导致安装失败

这里遇到一个报错:

参考 ValueError “Expected version spec” when installing local wheel via pip,原因是当前的pip版本太低导致的。

通过本地安装升级pip来解决上述问题,下载以下4个文件复制到offline主机上(setuptools有可能不需要),例如目录/tmp/update_pip

执行以下命令升级pip

可以看到升级了Python虚拟环境中的pipwheel

然后再次执行pip install wheelhouse/*即可以成功。

XXXX.whl is not a supported wheel on this platform

在执行pip install wheelhouse/*的时候,有些包安装会提示错误,例如:

开始我以为是操作系统不同,实际对比了操作系统版本完全一致。差别只是Python版本,目标服务器的Python版本较低是 2.7.8,而源服务器的Python版本是2.7.14。但是,相同的大版本2.7,应该是通用才对啊。

参考 pip安装报错:is not a supported wheel on this platformCannot install numpy from wheel format,可以通过以下命令来验证兼容的关键字

由于其中没有包含cp27mu所以导致拒绝安装。(cp表示CPython)

实际上可以通过重新命名.whl包名字来绕开这个问题:

然后就可以正常安装和使用了。

Python mysqlclient 安装

上述pip install wheelhouse/*还有一个报错提示

参考 https://pypi.python.org/pypi/mysqlclient/1.3.12 显示 mysqlclient-1.3.12 要求的MySQL版本如下:

MySQL-5.5 through 5.7 and Python 2.7, 3.4+ are currently supported. PyPy is supported too.

检查服务器,发现只安装了mysql-libs-5.5.17-1.el5.remi,所以考虑升级MySQL

CentOS 5.7建议安装社区版本的MySQL 5.7

然后下载源代码编译

通过源代码安装了mysqlclient之后,可以从wheelhouse目录下移除mysqlclient-1.3.12-cp27-cp27mu-linux_x86_64.whl

启动MySQL服务

如果数据库密码不正确,则执行MySQL Root用户密码重置

恢复Django应用

  • 执行检查和同步迁移数据库

  • 运行django服务

参考

Last updated

Was this helpful?