我目前有多个Django站点从一个Apache服务器通过WSGI运行,每个站点都有自己的virtualenv,可能有轻微的Python和Django版本差异。对于每个站点,我想显示它正在使用的Python和Django版本,以及它从哪个路径中提取Python二进制文件。
对于每个Django网站,我都可以:
import sys
sys.version
但我不确定它是否显示该网站正在使用的Python或系统的Python。对此有何帮助?
答案 0 :(得分:0)
但我不确定它是否显示该网站正在使用的Python或系统的Python。对此有何帮助?
不。
但是,如果您想了解有关Django应用程序的信息,请执行此操作。
使用日志记录。写入sys.stderr
,通常由mod_wsgi路由到errors_log
。或者查看wsgi.errors
文件的请求。
更新您的顶级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