проблема с путями в python: ImportError при вызове zodbconvert (FreeBSD 8.1) - PullRequest
1 голос
/ 24 апреля 2011

Полагаю, это проблема с путями в 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 ]

5 голосов
/ 24 апреля 2011

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

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

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

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

В качестве альтернативы, вы можете создать общий исполнитель сценариев Python, который включает все яйца вbuildout и может запускать произвольные скрипты;Вы можете использовать это вместо обычного интерпретатора 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.

0 голосов
/ 24 апреля 2011

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

0 голосов
/ 24 апреля 2011

быстрое исправление ..

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