如何查找Django站点运行的Python和Django版本以及路径?

1 投票
3 回答
790 浏览
提问于 2025-04-16 04:25

我现在有多个Django网站,它们都通过WSGI在同一个Apache服务器上运行,每个网站都有自己的虚拟环境,可能使用的Python和Django版本略有不同。对于每个网站,我想显示它正在使用的Python和Django的版本,以及它从哪个路径获取Python的可执行文件。

对于每个Django网站,我可以这样做:

import sys
sys.version

但我不确定这显示的是网站正在使用的Python版本,还是系统自带的Python版本。对此有什么帮助吗?

3 个回答

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
0

但是我不确定这显示的是网站使用的Python版本还是系统的Python版本。对此有什么帮助吗?

没有。

不过,如果你想了解一些关于你的Django应用的信息,可以这样做。

  1. 使用日志记录。把信息写入sys.stderr,通常这个会被mod_wsgi转到errors_log文件里。或者你可以查看请求中的wsgi.errors文件。

  2. 更新你的顶层urls.py文件,写入一个启动消息,包括sys.version的信息到你的日志中。

0

要找出正在使用哪个Python,可以记录一下sys.executable的值。这个值会显示正在使用的Python解释器的路径。

撰写回答