【问题标题】:Can I have 2 Django sites using 2 different version of Python on 1 domain?我可以在 1 个域上使用 2 个不同版本的 Python 来拥有 2 个 Django 站点吗?
【发布时间】:2015-09-03 00:00:09
【问题描述】:

我有 1 个使用服务器默认 Python (2.6.6) 的 Django 项目,我有一个想要使用 Python 2.7 的新项目,并将其放在虚拟环境中。

这是错误:

[client 64.136.119.142] Traceback (most recent call last):
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]   File "/var/www/venv/googleclicks/googleclicks/wsgi.py", line 12, in <module>
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]     from django.core.wsgi import get_wsgi_application
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]   File "/var/www/venv/lib/python2.7/site-packages/django/__init__.py", line 1, in <module>
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]     from django.utils.version import get_version
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]   File "/var/www/venv/lib/python2.7/site-packages/django/utils/version.py", line 7, in <module>
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]     from django.utils.lru_cache import lru_cache
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]   File "/var/www/venv/lib/python2.7/site-packages/django/utils/lru_cache.py", line 28
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]      fasttypes = {int, str, frozenset, type(None)},
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]                      ^
[Wed Jun 17 00:00:32 2015] [error] [client 64.136.119.142]  SyntaxError: invalid syntax

httpd.conf:

<VirtualHost *:80>
    ServerName www.mydomain.com
    ErrorLog /var/mail/django-error-log
    Alias /static/ /var/www/django/t/tUrls/static/
    WSGIScriptAlias /t /var/www/django/t/t/wsgi.py

    WSGIScriptAlias /gclicks /var/www/venv/gc/gc/wsgi.py process-group=gclicks
    WSGIDaemonProcess gclicks python-path=/var/www/venv/gc:/var/www/venv/lib/python2.7/site-packages
    #WSGIPythonPath /var/www/django/t:/var/www/venv/gc:/var/www/venv/lib/python2.7/site-packages
    <Location /gclicks>
        WSGIProcessGroup gclicks
    </Location>

#   WSGIDaemonProcess gclicks python-path=/var/www/django/t:/var/www/venv/gc:/var/www/venv/lib/python2.7/site-packages
#   WSGIProcessGroup gclicks

    <Directory /var/www/django>
    Order allow,deny
    Allow from all
    </Directory>
</VirtualHost>

WSGIPythonPath /var/www/django/t:/var/www/venv/gc:/var/www/venv/lib/python2.7/site-packages
#WSGIPythonHome /var/www/virtualenv-2.7

WSGISocketPrefix /var/run/wsgi

【问题讨论】:

  • 您为什么不能简单地升级您的 2.6 站点以使用 2.7?次要 Python 版本之间没有向后不兼容。
  • @DanielRoseman 因为每个人都告诉我不要更改服务器默认值
  • 不要更改服务器默认值 - 这是肯定的。但是,您可以将 Python 2.7 安装到备用位置(例如 /usr/local/python27)并针对该版本的 Python 创建 virtualenv。然后,点 mod_wsgi 来使用你的 virtualenv。
  • @DanielRoseman 哎呀,我读错了你的评论。是的,我可以将旧网站升级到 2.7。

标签: python django apache virtualenv mod-wsgi


【解决方案1】:

虽然您可以使用 mod_wsgi 在单个 Python 版本下托管多个域/站点,但据我所知,您不能运行多个 Python 版本,因为 mod_wsgi 必须针对单个版本进行编译。

对于 Centos 6,首先按照此处的说明将 Python 2.7.x 或 3.x 购买到其他位置(make altinstall):

https://www.digitalocean.com/community/tutorials/how-to-set-up-python-2-7-6-and-3-3-3-on-centos-6-4

然后,您应该能够启动 Python 并检查您的版本:

python2.7 --version

接下来,创建一个 virtualenv(我使用 virtualenvwrapper;强烈推荐):

mkvirtualenv yourproject -p python2.7

然后,为新的 Python 版本安装 mod_wsgi(4.2.8 是我在我的 vagrant box 中测试过的最新版本;您可能想尝试更新的版本):

wget -q "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.2.8.tar.gz"
tar -xzf '4.2.8.tar.gz'
cd ./mod_wsgi-4.2.8
./configure --with-python=python2.7
make
make install

最后,如果一切正常,请确保在这一行中指向正确的 virtualenv:

WSGIScriptAlias /gclicks /var/www/venv/gc/gc/wsgi.py process-group=gclicks

【讨论】:

  • 好的,您能否扩展您的答案,以便我可以将旧网站升级到 2.7 并使它们都正常工作?
  • 当然——你运行的是什么 Linux 发行版?我的工作场所是一家 RedHat 商店(不幸的是),所以我对 RedHat/CentOS 有简单的指导,但它们可以很容易地适应另一个发行版,我很乐意提供帮助。当你这样做时,Django 和它的大部分关键包都可用于 Python 3;在进行这项工作时,您可能需要考虑升级到 Python 3。如果您想考虑这一点,请同时包含您与 Django 一起使用的包/应用程序。
  • Centos 6. 我决定将 2.6.6 移到 virtualenv 中。根据对上述问题的第一条评论,这似乎是个好主意。
  • 已添加说明。祝你好运!
【解决方案2】:

试试this,我不确定不同的python版本,但你可以在一个域下拥有多个站点。

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2018-08-20
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多