我如何找到Django网站运行的Python,Django版本和路径?

时间:2010-09-21 15:10:25

标签: python django

我目前有多个Django站点从一个Apache服务器通过WSGI运行,每个站点都有自己的virtualenv,可能有轻微的Python和Django版本差异。对于每个站点,我想显示它正在使用的Python和Django版本,以及它从哪个路径中提取Python二进制文件。

对于每个Django网站,我都可以:

import sys
sys.version

但我不确定它是否显示该网站正在使用的Python或系统的Python。对此有何帮助?

3 个答案:

答案 0 :(得分:0)

  

但我不确定它是否显示该网站正在使用的Python或系统的Python。对此有何帮助?

不。

但是,如果您想了解有关Django应用程序的信息,请执行此操作。

  1. 使用日志记录。写入sys.stderr,通常由mod_wsgi路由到errors_log。或者查看wsgi.errors文件的请求。

  2. 更新您的顶级urls.py,在您的日志中写入包含sys.version的启动消息。

答案 1 :(得分:0)

要找出正在使用的Python,请记录sys.executable的值。它应该包含正在使用的解释器的路径。

答案 2 :(得分:0)

这比你要求的要多一些,但是我们有类似的情况,其中不同的目录(可能)使用不同的Python / Django代码。我们使用以下内容来构建一个易于查看的列表(至少对我而言)是Python和& Django版本加上所有模块以及它们的加载位置。它有时帮助保存我头发剩下的一点点。修改品尝。

import sys, re, os
import django

def ModuleList():
    ret = []
    # The double call to dirname() is because this file is in our utils/ 
    # directory, which is one level down from the top of the project.
    dir_project = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
    project_name = os.path.basename(dir_project)

    for k,v in sys.modules.items():

        x = str(v)
        if 'built-in' in x:
            ret.append((k, 'built-in'))
            continue

        m = re.search(r"^.*?'(?P<module>.*?)' from '(?P<file>.*?)'.*$", x)
        if m:
            d = m.groupdict()
            f = d['file']
            # You can skip all of the re.sub()'s if you want raw paths
            f = re.sub(r'/usr/.*?/lib/python[.0-9]*/site-packages/django/', 'system django >> ', f)
            f = re.sub(r'/usr/.*?/lib/python[.0-9]*/site-packages/', 'site-packages >> ', f)
            f = re.sub(r'/usr/.*?/lib/python[.0-9]*/', 'system python >> ', f)
            f = re.sub(dir_project+'.*python/', 'local python >> ', f)
            f = re.sub(dir_project+'.*django/', 'local django >> ', f)
            f = re.sub(dir_project+r'(/\.\./)?', project_name + ' >> ', f)
            ret.append((d['module'], f))
    ret.sort( lambda a,b: cmp(a[0].lower(), b[0].lower()) )
    ret.insert(0, ('Python version', sys.version) )
    ret.insert(0, ('Django version', django.get_version()) )

    return ret
# ModuleList