如何在导入的模块中获取python wsgi app的root目录?

时间:2014-09-25 15:49:13

标签: python

带有WSGI的Nginx正在我的根目录中加载一个名为run.py

的文件

run.py内,我使用

获取根目录

ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))

这很好用。

我现在想要在导入的模块中访问此根变量。 我听说全局是邪恶的。但是将根路径传递给我想要使用的模块似乎很奇怪。使用它的最pythonic方法是什么?

另外 - 我想要根路径的原因是因为我在导入的模块中这样做。

os.chdir('/some/path')

我希望稍后在脚本中更改回根路径。

os.chdir(ROOT)

...谢谢

2 个答案:

答案 0 :(得分:2)

如何记住当前的工作目录,然后再恢复:

ROOT = os.getcwd()
os.chdir('/some/path')
...
os.chdir(ROOT)

答案 1 :(得分:1)

我认为,虽然对你来说似乎很奇怪,但如果你需要在模块中使用它,那么明确地将路径传递给模块实际上是最好的解决方案。

此外,您应该确保您的模块始终使用绝对路径(也就是说,您根本不需要chdir。)

原因是当前工作目录是全局状态(它的范围是进程')。正如您所提到的,全局状态是“邪恶的” - 它可以被任何一个模块自由修改,这可能导致细微的错误 - 尤其是在处理并发时(as in a threaded WSGI webserver)。

如果您真的想要chdir,可以use a context manager以避免忘记更改它,但这并不能解决并发访问问题