Ошибка PROJECT_ROOT = os.path.dirname(__file__)

#django

#django

Вопрос:

Когда я пытаюсь:
PROJECT_ROOT = os.path.dirname(__file__)
я получаю ошибку, подобную этой:
Traceback (most recent call last):
File "< stdin>", line 1, in <module>
NameError: name '__file__' is not defined

Кто-нибудь знает, как это исправить?

Ответ №1:

Запустите эту строку кода через реальный модуль, а не в Python REPL.

Комментарии:

1. Я пытаюсь сделать это четко в bash: PROJECT_ROOT = os.path.dirname(__file__) и теперь я получаю: -bash: syntax error near unexpected token (» Я все еще не знаю некоторых важных вещей о bash, я думаю.. Есть ли какое-либо решение, которое вы могли бы предоставить?

2. Вам действительно нужно прекратить писать код Python в командной строке bash. И пока вы этим занимаетесь, прочитайте руководство. docs.python.org/tutorial/index.html

Ответ №2:

Если вы пытаетесь использовать __file__ из своего интерпретатора, не __file__ определено. Это предполагаемое поведение. __file__ является атрибутом модулей. Here это обсуждение темы.

Вы можете протестировать, выполнив это:

 ~$ echo "print __file__" > test.py
~$ python test.py
test.py
  

__file__ работает в модулях изнутри.

Теперь из интерпретатора:

 ~$ python
Python 2.7.0  (r27:82500, Sep 15 2010, 18:04:55) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print __file__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__file__' is not defined
  

__file__ не определено

 >>> import test
test.pyc
>>> print __file__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__file__' is not defined
  

__file__ не определено

 >>> print test.__file__
test.pyc
>>> 
  

__file__ определено для тестового модуля

Комментарии:

1. Это кое-что объясняет мне, но я все еще не знаю, каково решение моей проблемы. Я не хочу читать книгу по python, мне просто нужно создать небольшой проект django-powerade с двумя приложениями в одной папке. Должно быть два приложения в одной папке. Но спасибо за некоторые указания.

Ответ №3:

Пожалуйста, попробуйте это в вашем settings.py :

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