Python路径问题:调用zodbconvert时出现ImportError(FreeBSD 8.1)
我想这可能是一个Python路径的问题(在FreeBSD 8.1上)。
我正在尝试使用zodbconvert将一个Data.fs文件转换成Postgresql格式。我下载了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
顺便说一下,默认情况下“python --version”显示的是2.7.1
谢谢。
Nikolaj G.
3 个回答
快速解决方法..
locate persistent
export PYTHONPATH=$PYTHONPATH:/path/to/your/python_persistent_dir
你的Python安装中没有包含ZODB这个包。你可以调整一下PYTHONPATH,让它包含ZODB包,或者直接用easy_install ZODB
来安装它,这要看你想做什么了。
如果你在使用 buildout
(我希望你在用),那么最简单的方法就是让 buildout
为你创建一个脚本,这样就能把所有的 zodbconvert
依赖项正确地放到 Python 的路径里:
[buildout]
...
parts =
...
zodbconvert
[zodbconvert]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
scripts = zodbconvert
这样,Buildout 会为你创建一个新的 bin/zodbconvert
脚本,这个脚本会把所有的 buildout 包都放到 sys.path
里。
另外,你也可以创建一个通用的 Python 脚本运行器,它会把你 buildout 中的所有包都包含进去,并且可以运行任意的脚本;你可以用这个来代替普通的 Python 解释器,这样就能用所有的 buildout 包来运行任意的 Python 脚本:
[buildout]
...
parts =
...
zopepy
[zopepy]
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
interpreter = zopepy
scripts = zopepy
然后你可以用 bin/zopepy
脚本来运行任意的 Python 脚本,因为所有的 buildout 包已经在 sys.path
里了,所以 bin/zopepy zodbconvert.py fstodb.conf
应该可以正常工作。
需要注意的是,Plone 的统一安装程序已经包含了 zopepy
部分,而我选择这个脚本的名字也是故意和它相同。
如果你没有使用 buildout
(而且在 Plone 4 中,这通常不是个好主意),你也可以在你的 PYTHONPATH
环境变量中列出所需的包(ZODB3、zope.interface、RelStorage、psycopg2)。