我想在運行Flask + sqlalchemy(mysql)的Linode實例上運行python setup.py
一個小腳本。在Virtualenv中導入錯誤
#filename - setup.py
from daaru import db
def init_db():
db.drop_all()
db.create_all()
init_db()
這是我得到的錯誤 -
Traceback (most recent call last):
File "setup.py", line 21, in <module>
init_db()
File "setup.py", line 9, in init_db
db.drop_all()
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/flask_sqlalchemy.py", line 830, in drop_all
self._execute_for_all_tables(app, bind, 'drop_all')
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/flask_sqlalchemy.py", line 814, in _execute_for_all_tables
op(bind=self.get_engine(app, bind), tables=tables)
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/flask_sqlalchemy.py", line 763, in get_engine
return connector.get_engine()
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/flask_sqlalchemy.py", line 443, in get_engine
self._engine = rv = sqlalchemy.create_engine(info, **options)
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 338, in create_engine
return strategy.create(*args, **kwargs)
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 64, in create
dbapi = dialect_cls.dbapi(**dbapi_args)
File "/home/captain/public/daaru/v1/local/lib/python2.7/site-packages/sqlalchemy/connectors/mysqldb.py", line 52, in dbapi
return __import__('MySQLdb')
ImportError: No module named MySQLdb
有趣的是,當我登錄到服務器,激活虛擬ENV(名爲v1
),並在IPython的一切運行init_db
按預期工作。但是當我將它作爲腳本運行時,它給了我一個名爲MySQLdb
的模塊的ImportError
。 MySQLdb的系統範圍安裝使用apt-get install python-mysqldb
,因爲該軟件包不可通過pip使用。
我在這裏做錯了什麼?
在服務器上運行pip freeze
顯示我:
Flask==0.9
Flask-SQLAlchemy==0.16
Jinja2==2.6
SQLAlchemy==0.7.9
Werkzeug==0.8.3
argparse==1.2.1
wsgiref==0.1.2
來了,因爲MySQLdb的包沒有在VENV發現錯誤?那麼爲什麼不使用該軟件包的系統範圍安裝?
如果人們認爲他們可以爲您提供更好的解決方案,他們仍然可以添加答案;兩天的延遲是讓他們有機會看看你的問題。 :-) –