为什么os.path.dirname(uuu file_uuu)在Django中工作?

2024-04-23 07:08:29 发布

您现在位置:Python中文网/ 问答频道 /正文

请解释为什么os.path.dirname(__file__)在Django中工作,但在python中不工作? 这是一种我无法理解的奇怪情况。

我制作了一个python脚本并将其放在一个文件test_file.py中:

import os

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

print dirname
print realpath
print abspath

当我运行脚本时,得到的结果是:

(env)user@ubuntubox:~/srv/django_pro$ python test_file.py 

/home/srv/django_pro
/home/srv/django_pro
(env)user@ubuntubox:~/srv/django_pro$

我得到的结果是realpathabspath都在工作,但是dirname是空的。但是在Django settings.py中,我有:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

如果我进入python shell并打印出BASE_DIR,它不是空的:

(env)user@ubuntubox:~/srv/django_pro$ python manage.py shell
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.conf import settings
>>> 
>>> print 'BASE_DIR:\n%s' % settings.BASE_DIR
BASE_DIR:
/home/srv/django_pro
>>> 

这意味着os.path.dirname(os.path.dirname(文件)不为空。我在这两种情况下都使用相同的python。我的Django版本是:

Django==1.7b4

那么诀窍是什么?


Tags: pathdjangopyenvbaseosdirpro
1条回答
网友
1楼 · 发布于 2024-04-23 07:08:29

运行的第一个脚本已设置为传递给Python的路径。您使用python test_file.py启动脚本,因此__file__设置为'test_file.py'。如果您使用python /home/srv/django_pro/test_file.py,那么您的测试脚本将显示所有三个选项的路径。

另一方面,导入的模块的__file__值设置为完整路径

您需要考虑到这一点,并始终使用os.path.abspath

directory = os.path.dirname(os.path.abspath(__file__))

相关问题 更多 >