python路径问题:调用zodbconvert时的ImportError(FreeBSD 8.1)

use*_*857 1 python plone relstorage

我想这是一个python路径问题(在FreeBSD 8.1上).

我试图使用zodbconvert将Data.fs转换为Postgresql.我已经下载了RelStorage-1.5.0b2并且正在运行:

/usr/local/Plone/Python-2.6/bin/python zodbconvert.py fstodb.conf
Run Code Online (Sandbox Code Playgroud)

,使用Plone运行的版本.

我得到的错误:

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

版本:

  • 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

谢谢.尼古拉吉

Mar*_*ers 5

如果你正在使用buildout(我希望你是),让zodbconvertpython路径中正确包含所有依赖项的最简单方法是buildout为你创建脚本:

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

[zodbconvert]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
scripts = zodbconvert
Run Code Online (Sandbox Code Playgroud)

Buildout然后将为您创建一个新bin/zodbconvert脚本,其中包含所有buildout egg sys.path.

或者,您可以创建一个通用的python脚本运行器,其中包含buildout中的所有egg,并且可以运行任意脚本; 你可以使用它来代替bare-bones python解释器来运行任意python脚本以及所有的buildout egg sys.path:

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

[zopepy]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
interpreter = zopepy
scripts = zopepy
Run Code Online (Sandbox Code Playgroud)

bin/zopepy然后可以使用该脚本运行任意python脚本,并且所有的buildout egg已经存在sys.path,所以bin/zopepy zodbconvert.py fstodb.conf应该可以工作.

请注意,Plone统一安装程序已经附带了zopepy部件,我选择的此脚本的部件名是故意使用相同的名称.

如果您没有使用buildout(并且使用Plone 4,这在整体上并不是一个好主意),您还可以在PYTHONPATH环境变量中列出所需的包(ZODB3,zope.interface,RelStorage,psycopg2).