Что ж, это довольно жесткая проблема, «предложение другого решения» в данной ситуации недоступно, поэтому, пожалуйста, попробуйте помочь мне решить эту проблему, а не избежать ее =)
Итак, есть проект django, который использует buildout, но не использует virtualenv (потому что у нас были проблемы с установкой шрифтов ..). Проект работает нормально. Сейчас я пытаюсь реализовать автономный скрипт django и думаю, что у меня проблема с путём. Прежде всего я хотел бы представить структуру базового каталога.
roman% ls
bootstrap.py
cgi-bin
eggs
parts
bin
buildout.cfg
develop-eggs
lib
project
bin
|-- buildout
`-- django
roman% cd eggs
roman% ls -h
DateUtils-0.5.1-py2.7.egg oauth2-1.5.211-py2.7.egg
Django-1.3.1-py2.7.egg pisa-3.0.33-py2.7.egg
South-0.7.3-py2.7.egg pyBarcode-0.6-py2.7.egg
collective.recipe.omelette-0.12-py2.7.egg pycrypto-2.5-py2.7-freebsd-8.2-RELEASE-amd64.egg
django_mptt-0.5.2-py2.7.egg pygeoip-0.2.2-py2.7.egg
django_pagination-1.0.7-py2.7.egg python_dateutil-2.0-py2.7.egg
django_registration-0.7-py2.7.egg python_openid-2.2.5-py2.7.egg
django_rosetta-0.6.5-py2.7.egg pytz-2012b-py2.7.egg
django_social_auth-0.6.7-py2.7.egg setuptools-0.6c12dev_r88846-py2.7.egg
django_staging-0.1.0_alpha-py2.7.egg six-1.1.0-py2.7.egg
django_tagging-0.3.1-py2.7.egg sorl_thumbnail-11.12-py2.7.egg
django_threaded_multihost-1.4_1-py2.7.egg unicodecsv-0.9.0-py2.7.egg
djangorecipe-1.1.2-py2.7.egg xlwt-0.7.3-py2.7.egg
flup-1.0.3.dev_20110405-py2.7.egg zc.buildout-1.5.2-py2.7.egg
html5lib-0.95-py2.7.egg zc.recipe.egg-1.3.2-py2.7.egg
httplib2-0.7.4-py2.7.egg
roman% tree parts
parts
|-- buildout
| |-- site.py
| |-- site.pyc
| |-- site.pyo
| |-- sitecustomize.py
| |-- sitecustomize.pyc
| `-- sitecustomize.pyo
`-- omelette
`-- django -> /srv/xxx/eggs/Django-1.3.1-py2.7.egg/django
3 directories, 6 files
автономный скрипт находится в / srv / xxx / project / app / dir
теперь наконец-то скрипт:
import os
import sys
import time
import pickle
from datetime import datetime
from pprint import pprint
sys.path.append(os.path.abspath('..'))
sys.path.append(os.path.abspath(os.path.join( '..', '..' ))) # Project dir
sys.path.append(os.path.abspath(os.path.join( '..', '..', 'parts', 'omelette')))
sys.path.append(os.path.abspath(os.path.join( '..', '..', 'eggs')))
from django.core.management import setup_environ
import settings
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.site_nl'
from django.template.loader import render_to_string
Если вы запустите этот скрипт, все работает, кроме последней строки. Я даже могу импортировать модели. В любом случае, когда я выполняю это в ipython, вы можете перейти через автозаполнение к django.template, но все, что глубже, например, django.template.loader / base / что угодно - не работает .. последняя строка этого скрипта дает эту ошибку
roman% python email.py
Traceback (most recent call last):
File "email.py", line 34, in <module>
from django.template.loader import render_to_string
File "/srv/travelbird/parts/omelette/django/template/__init__.py", line 53, in <module>
from django.template.base import (ALLOWED_VARIABLE_CHARS, BLOCK_TAG_END,
File "/srv/travelbird/parts/omelette/django/template/base.py", line 6, in <module>
from django.template.context import Context, RequestContext, ContextPopException
File "/srv/travelbird/parts/omelette/django/template/context.py", line 4, in <module>
from django.http import HttpRequest
File "/srv/travelbird/parts/omelette/django/http/__init__.py", line 122, in <module>
from django.utils.http import cookie_date
File "/srv/travelbird/parts/omelette/django/utils/http.py", line 7, in <module>
from email.Utils import formatdate
File "/srv/travelbird/travelbird/draaideur/email.py", line 34, in <module>
from django.template.loader import render_to_string
File "/srv/travelbird/parts/omelette/django/template/loader.py", line 29, in <module>
from django.template.base import Origin, Template, Context, TemplateDoesNotExist, add_to_builtins
ImportError: cannot import name Origin
если вам нужен buildout.cfg, вот он ..
[buildout]
parts = django ipython omelette
eggs =
reportlab
lxml
MySQL-python
markdown
sorl-thumbnail
django
django-tagging
django-pagination
django-staging
pyBarcode
dateutils
html5lib
oauth2
python-openid
pygeoip
django-rosetta
django-social-auth #check
South
unicodecsv
xlwt
django-mptt
django-registration
django-threaded-multihost
pycrypto
flup
ipython
#PIL # custom install by pip
extra-paths =
[versions]
django = 1.3.1
[django]
recipe = djangorecipe
eggs = ${buildout:eggs}
project = project
projectegg = project
settings = settings
extra-paths =
${buildout:extra-paths}
${buildout:directory}/project
[ipython]
recipe = zc.recipe.egg
eggs =
ipython
[omelette]
recipe = collective.recipe.omelette
eggs =
django
ignore-develop = true
sys.path ->
In [16]: sys.path
Out[16]:
['/srv/xxx/project/settings/../../lib',
'',
'/usr/local/bin',
'/usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/Pygments-1.4-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/MarkupSafe-0.15-py2.7-freebsd-8.2-RELEASE-amd64.egg',
'/usr/local/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/Sphinx-1.1.2-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/MySQL_python-1.2.3-py2.7-freebsd-8.2-RELEASE-amd64.egg',
'/usr/local/lib/python2.7/site-packages/flup-1.0.2-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/virtualenv-1.7-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg',
'/usr/local/lib/python2.7/site-packages/lxml-2.3.3-py2.7-freebsd-8.2-RELEASE-amd64.egg',
'/usr/local/lib/python2.7/site-packages/tornado-2.2-py2.7.egg',
'/usr/local/lib/python27.zip',
'/usr/local/lib/python2.7',
'/usr/local/lib/python2.7/plat-freebsd8',
'/usr/local/lib/python2.7/lib-tk',
'/usr/local/lib/python2.7/lib-old',
'/usr/local/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/site-packages/PIL',
'/usr/local/lib/python2.7/site-packages/IPython/extensions',
'/srv/xxx/project',
'/srv/xxx',
'/srv/xxx/parts/omelette',
'/srv/xxx/eggs']
Я хотел бы упомянуть, что я пытался установить django из портов (менеджер пакетов), и я проверил sys.path, да, он использовал установленную версию, все равно получаю точно такую же ошибку. хотя половина работ пути Джанго ..
А насчет настроек. у нас есть 5 файлов настроек для каждого языкового сайта. так что это: settings.site_nl. Если я забыл что-то добавить, пожалуйста, оставьте сообщение в комментарии.