gpt4 book ai didi

python - os.getcwd() 与 os.path.abspath(os.path.dirname(__file__))

转载 作者:IT老高 更新时间:2023-10-28 21:35:13 30 4
gpt4 key购买 nike

我正在使用 os 模块在我的 Django 项目 settings.py 文件中具有相对路径。变量 SITE_ROOT 设置为 settings.py 文件的当前工作目录,然后用于引用同样位于同一目录中的所有 static/media 目录。

这是我的问题:

print os.getcwd()
print os.path.abspath(os.path.dirname(__file__))

在 settings.py 中,上述语句都有相同的输出。但是只有当我使用 SITE_ROOT = os.path.abspath(os.path.dirname(__file__))

时我的模板才会加载

Django 在这里寻找模板:

TEMPLATE_DIRS = (
os.path.join(SITE_ROOT, 'templates'),
)

SITE_ROOT 设置为 os.getcwd() 似乎使 Django 在 settings.py 文件上方的目录中查找模板文件夹

我可以很容易地不使用 os.getcwd() 并且我的网站运行良好,但我很好奇这里可能发生了什么 :)

有人知道吗?

最佳答案

正如 mouad 所说,os.getcwd() 不会完全满足您的期望。

os.getcwd() 不仅仅返回当前工作目录。它在您的环境中默认为 $PWD。这不是脚本所在的位置,而是您执行脚本时所处的位置。

/home/user 并执行 python manage.pyos.getcwd() 将返回 /home/用户/home/ 并执行 python user/manage.pyos.getcwd() 将返回 /home

但它仍然不会总是正确的,因为可以使用 os.chdir()。换句话说,就像做cd。它还会改变 os.getcwd() 的返回值。

另一方面。 __file__ 是模块文件的路径。所以你必须使用它来确保有一个相对于你的模块的路径,而不是可能改变的当前工作目录。

正如 ShawnFumo 所说,__file__ 可能并不总是绝对的。要更好地了解它的工作原理,您可以查看该答案:Python __file__ attribute .此外,从 Python3.4 开始,__file__ 应该始终是绝对路径。

关于python - os.getcwd() 与 os.path.abspath(os.path.dirname(__file__)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274040/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com