带有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)
...谢谢
答案 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以避免忘记更改它,但这并不能解决并发访问问题。