如何查找Django站点运行的Python和Django版本以及路径?
我现在有多个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应用的信息,可以这样做。
使用日志记录。把信息写入
sys.stderr
,通常这个会被mod_wsgi转到errors_log
文件里。或者你可以查看请求中的wsgi.errors
文件。更新你的顶层
urls.py
文件,写入一个启动消息,包括sys.version
的信息到你的日志中。
0
要找出正在使用哪个Python,可以记录一下sys.executable
的值。这个值会显示正在使用的Python解释器的路径。