root 権限を持たないコンピューターで Python スクリプトを実行しようとしています。そのために、Python 2.7 を使用するようにセットアップし、virtualenv
必要な Parallel Python と SQLAlchemy の 2 つのパッケージを追加します。スクリプトを実行すると、次のエラーが表示されます。
(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()
その後にクラス定義が続きます。
他の virtualenv を含む他のコンピューター (ただし、root アクセス権がある) でこのスクリプトを試してみましたが、正常に動作します。何がうまくいかないのか、私は非常に混乱しています!