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

#python #plone #relstorage

#python #plone #повторное хранение

Вопрос:

Я предполагаю, что это проблема с python path (во 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

Спасибо. Николай Г.

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

1. И можете вы это импортировать?

2. извините, я новичок здесь — конечно. Спасибо. николай

Ответ №1:

Если вы используете 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 переменной окружения.

Ответ №2:

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

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

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

1. Ему также нужно будет включить пакеты ZODB , zope.interface RelStorage и psycopg2 .

Ответ №3:

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

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

1. Ему понадобится больше, чем ZODB; он пропустит psycopg2 , RelStorage и zope.interface . Лучше просто использовать bin / zopepy или выделенную часть сборки, не так ли? 🙂

2. Спасибо Sentinel, я попробую это. Извините за «принять» — я только что указал вам на это. Я вернусь к проблеме — в данный момент немного напряженный. Спасибо.