离线安装Django
在线上服务器部署Django的时候,不可能将所有服务器都连接到internet,然后通过pip进行联网安装。
离线安装Django以及相关软件模块
首先在一个可以连接internet的开发测试环境,在一个Python虚拟环境安装Django以及所有相关包,
在已经具备好所有运行模块的Django环境中执行以下命令列出所有安装的包和版本:
pip freeze > requirements.txt使用以下命令为模块包构建一个
wheelhouse目录
pip wheel -r requirements.txt -w wheelhouse注意:如果没有
-w wheelhouse参数,则默认在当前目录下构建wheels - 参考 pip wheel
压缩
wheelhouse目录
zip -r wheelhouse.zip wheelhouse将上述压缩包
wheelhouse.zip复制到目标服务器上,然后先切换到virtuanlenv环境 - 这里假设已经参考在古老的CentOS 5上安装Python 2.7以及virtualenv环境构建好了Python运行虚拟环境venv2,则按照下面步骤执行
source venv2/bin/activate
unzip wheelhouse.zip
pip install wheelhouse/*pip install wheelhouse的异常排查
wheelhouse的异常排查pip版本过低导致安装失败
pip版本过低导致安装失败这里遇到一个报错:
参考 ValueError “Expected version spec” when installing local wheel via pip,原因是当前的pip版本太低导致的。
通过本地安装升级pip来解决上述问题,下载以下4个文件复制到offline主机上(setuptools有可能不需要),例如目录/tmp/update_pip:
get-pip.py( https://bootstrap.pypa.io/get-pip.py )pip-9.0.1-py2.py3-none-any.whl( https://pypi.python.org/pypi/pip )setuptools-37.0.0-py2.py3-none-any.whl( https://pypi.python.org/pypi/setuptools )wheel-0.30.0-py2.py3-none-any.whl( https://pypi.python.org/pypi/wheel )
执行以下命令升级pip
可以看到升级了Python虚拟环境中的pip和wheel
然后再次执行pip install wheelhouse/*即可以成功。
XXXX.whl is not a supported wheel on this platform
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 platform 和 Cannot install numpy from wheel format,可以通过以下命令来验证兼容的关键字
由于其中没有包含cp27mu所以导致拒绝安装。(cp表示CPython)
实际上可以通过重新命名.whl包名字来绕开这个问题:
然后就可以正常安装和使用了。
Python mysqlclient 安装
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
然后下载源代码编译
通过源代码安装了
mysqlclient之后,可以从wheelhouse目录下移除mysqlclient-1.3.12-cp27-cp27mu-linux_x86_64.whl
启动MySQL服务
如果数据库密码不正确,则执行MySQL Root用户密码重置
恢复Django应用
执行检查和同步迁移数据库
运行django服务
参考
Last updated
Was this helpful?