Проблема с путями в python: ImportError при вызове zodbconvert (FreeBSD 8.1)

Я предполагаю, что это проблема с путями Python (на FreeBSD 8.1).

Я пытаюсь конвертировать Data.fs в Postgresql с помощью zodbconvert. Я скачал RelStorage-1.5.0b2 и работает:

/usr/local/Plone/Python-2.6/bin/python zodbconvert.py fstodb.conf

, чтобы использовать версию, с которой работает Plone.

Ошибка, которую я получаю:

Traceback (most recent call last):
  File "zodbconvert.py", line 22, in <module>
    from persistent.TimeStamp import TimeStamp
ImportError: No module named persistent.TimeStamp

Версии:

  • Plone 4.0.5 (python 2.6)
  • Postgresql 9.0.3
  • FreeBSD 8.1
  • python26-2.6.6_1
  • python27-2.7.1_1

PS по умолчанию "python --version" 2.7.1

Благодарю. Николай Григорьевич

3 ответа

Решение

Если вы используете buildout (Я надеюсь, что вы) самый простой способ получить все zodbconvert Зависимости должным образом включены в путь Python должен иметь buildout создать скрипт для вас:

[buildout]
...
parts =
     ...
     zodbconvert

[zodbconvert]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
scripts = zodbconvert

Затем Buildout создаст новый bin/zodbconvert скрипт для вас, который включает в себя все яйца в sys.path,

В качестве альтернативы, вы можете создать универсальный запуск скриптов Python, который включает в себя все яйца в вашей сборке и может запускать произвольные скрипты; Вы можете использовать это вместо обычного интерпретатора Python для запуска произвольных сценариев Python со всеми яйцами сборки в sys.path:

[buildout]
...
parts =
    ...
    zopepy

[zopepy]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
interpreter = zopepy
scripts = zopepy

bin/zopepy Затем скрипт можно использовать для запуска произвольных скриптов Python со всеми вашими яйцами сборки, уже находящимися в sys.path, так bin/zopepy zodbconvert.py fstodb.conf должно сработать.

Обратите внимание, что унифицированный установщик Plone уже поставляется с zopepy часть включена, и мой выбор имени для этого сценария был намеренно с тем же именем.

Если вы не используете buildout (а с Plone 4, это не очень хорошая идея в целом), вы также можете перечислить необходимые пакеты (ZODB3, zope.interface, RelStorage, psycopg2) в вашем PYTHONPATH переменная окружения.

Быстрая починка..

locate persistent
export PYTHONPATH=$PYTHONPATH:/path/to/your/python_persistent_dir

Вы не включили пакет ZODB в вашу установку Python. Либо настройте PYTHONPATH, чтобы включить пакет ZODB, либо просто easy_install ZODB - в зависимости от того, что вы пытаетесь сделать.

Другие вопросы по тегам