0
我想在我没有root权限的计算机上运行python脚本。为此,我使用Python 2.7创建了一个virtualenv
,然后添加了我需要并行Python和SQLAlchemy的两个包。当我运行该脚本,我得到这个错误:在virtualenv SQLAlchemy错误
(virtPython)thaddeus:recipes ab940$ python2.7 matchIngsParallel.py
Starting pp with 8 workers
Reading ingredients into dictionary
Traceback (most recent call last):
File "matchIngsParallel.py", line 65, in <module>
for synonym, parentIng in session.query(IngSyn.synonym, IngSyn.parentIng):
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/query.py", line 2227, in __iter__
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/query.py", line 2242, in _execute_and_instances
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1449, in execute
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1584, in _execute_clauseelement
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1698, in _execute_context
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1691, in _execute_context
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/default.py", line 331, in do_execute
sqlalchemy.exc.OperationalError: (OperationalError) no such table: ingSyns u'SELECT "ingSyns".synonym AS "ingSyns_synonym", "ingSyns"."parentIng" AS "ingSyns_parentIng" \nFROM "ingSyns"'()
它好像一切都被正确导入但数据库没有被正确访问。
的脚本如下:
from assignDB import *
from sqlalchemy.orm import sessionmaker
import pp, sys
ppservers =()
job_server = pp.Server(ppservers=ppservers)
print "Starting pp with", job_server.get_ncpus(), "workers"
print "Reading ingredients into dictionary"
ingreds = {}
for synonym, parentIng in session.query(IngSyn.synonym, IngSyn.parentIng):
ingreds[synonym] = parentIng
print "Finished reading ingredients"
(该代码被缩短,但包括其中发生错误的地方)
assignDB
看起来像这样:
from sqlalchemy import Column, Integer, String, ForeignKey, create_engine, Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref, sessionmaker
from sqlalchemy.dialects.sqlite import DATETIME, REAL
engine = create_engine('sqlite:///recDB.db')
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
随后类定义。
我试过这个脚本在其他计算机上(我有root权限,但是),包括其他virtualenvs,它工作正常。我很困惑会发生什么问题!
是的,我正在访问一个保管箱文件夹,所以它在所有机器上都是一样的。我认为virtualenv调用导入的方式存在一些问题,特别是'assignDB'?如果它在创建引擎时找不到数据库,它会不会传递错误? – abroekhof 2012-07-20 13:30:28
如果SQLite驱动程序找不到该文件,它会创建它,因此您不会在那里看到错误。 ''sqlite:/// recDB.db''是一个相对于你当前工作目录的路径,我想你在启动你的python外壳之后,进入dropbox文件夹?你的'assignDB'导入成功了,否则你的脚本的第一行会出现'ImportError'。是什么让你认为这是一个进口问题? – Simon 2012-07-20 16:16:37