Я использую virtualenv
с моей установкой Python Django.
Вот моя структура каталогов:
project/
dev_environ/
lib/
python2.6/
site-packages/
...
django/
titlecase/ # <-- The titlecase module
PIL/
...
bin/
...
python # <-- Python
...
include/
django_project/
localsite/
templatetags/
__init__.py
smarttitle.py # <-- My templatetag module
foo_app/
bar_app/
settings.py
manage.py
Если я запущу свою оболочку Django и попытаюсь импортировать titlecase
, все будет в порядке, потому что titlecase
находится в sys.path
по адресу dev_environ/lib/python2.6/site-packages/titlecase
.
$:django_project cwilcox$ ../dev_environ/bin/python manage.py shell
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import titlecase # <-- No Import Error!
>>>
Я даже могу сделать import titlecase
внутри моего файла settings.py
без ошибок.
Однако, когда я пытаюсь import titlecase
в моей библиотеке тегов шаблонов smarttitle.py
, я получаю ImportError
.
smarttitle.py выглядит следующим образом.
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
from titlecase import titlecase as _to_titlecase
@register.filter
@stringfilter
def smarttitle(value):
return _to_titlecase(value)
smarttitle.is_safe = True
Не только это, но я даже могу import titlecase
внутри представления, которое отображает шаблон, который пытается {% load smarttitle %}
, и ошибки нет.
Мой сервер разработки Django запускается с...
../dev_environ/bin/python manage.py runserver
Вкратце:
Я могу импортировать модуль titlecase
куда угодно, кроме этой библиотеки шаблонных тегов, где он выдает ошибку ImportError
! Что дает?! Любые идеи?
EDIT: я попытался сначала запустить source dev_environ/bin/activate
, чтобы переключить мою оболочку env на мою virtualenv, но это не помогло - я все еще получаю ImportError внутри моего модуля templatetag. Я уже вызывал правильный двоичный файл Python вручную.
source dev_environ/bin/activate
. Похоже, я упускаю что-то важное. Я подумал, что все, что мне нужно будет сделать, когда я что-то установлю, этоdev_environ/bin/pip install <module>
. - person Chris W.   schedule 16.03.2011bin/activate
. Похоже, что это просто изменяет вашу оболочку, я уже вызывал правильный bin/python напрямую, поэтому я не думаю, что это проблема (я отредактирую, чтобы сделать это более ясным). - person Chris W.   schedule 16.03.2011