带有新 Python 和旧软件包集的 virtualenv

virtualenv with new Python and old set of packages

我在 CentOS 6 上设置了我的环境,默认 Python 2.6.6,生产中的 Django 版本是 1.4.1

最近,开始着手将应用程序移植到最新的长期支持 Django 1.8。在本地,我重构了该应用程序以使其准备就绪。将更改推送到生产时出现问题,使用 Django 1.8 设置 vituralenv,在导入 Django 的基本测试中出现异常。根本原因很简单,即 Django 1.8 最低运动 Python 2.7

问题是我需要在 Python 2.6.6 用作生产环境的同一主机上使用 Python 2.7.* 和 Django 1.8 设置 virtualenv Python解释器,这样新的 venv(Python 2.7.*Django 1.8)包含所有当前安装的 Python 包(我有很多)。

我找到的最佳方法:

  1. 安装python 2.7.*.
  2. 将这个新安装的 python 用于 virtualenv
  3. 从 python 复制 site-packages 2.6.6

新 Python 2.7.8 - 为全新 Python 安装创建一个新目录

$ cd /var/www/myproject
$ mkdir new_py
$ cd /var/www/  or   cd ..

下载、解压并安装 Python 2.7.8

$ wget http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
$ tar -zxvf Python-2.7.8.tar.gz
$ cd Python-2.7.8
$ ./configure --prefix=/var/www/myproject/new_py/Python-2.7.8/
$ make && make install

在项目目录中创建新的 venvmyproject(将其替换为您自己的项目名称)和新安装的 Python 2.7.8 - 用 -p 标志指定

$ virtualenv -p /var/www/myproject/new_py/Python-2.7.8/bin/python2.7 venv_djangoupgrade
New python executable in venv_py2.7.8/bin/python2.7
Also creating executable in venv_py2.7.8/bin/python
Installing setuptools, pip, wheel...done.

复制已安装的 Python 包 - (或者,技术方法是获取已安装包的列表 $ pip freeze > requirements.txt ,一旦 venv 被激活,执行 $ pip install -r requirements.txt 它将安装软件包列表)

$ cp -R /usr/lib/python2.6/site-packages/* var/www/myproject/venv_djangoupgrade/lib/python2.7/site-packages/ 

对于 debian 即 Ubuntu

$ cp -R /usr/lib/python2.6/dist-packages/* /var/www/myproject/venv_py2.7_django1.8/lib/python2.7/site-packages/  

激活 venv

$ source djangoupgrade_venv/bin/activate
(djangoupgrade_venv) $ 

如果你只是没有复制 site-packages 但 pip 冻结列表,请在 venv 处于活动状态时执行以下 pip 命令

(djangoupgrade_venv) $ pip install -r requirements.txt

最后 install/upgrade Django

(djangoupgrade_venv) $ pip install -U django==1.8

root或使用sudo

执行以上命令