1

python setup.pyFlask + sqlalchemy (mysql) を実行している Linode インスタンスで小さなスクリプトを実行しようとしています。

#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

面白いのは、サーバーにログインし、仮想環境 (という名前v1) をアクティブにinit_dbし、ipython で実行すると、すべてが期待どおりに機能することです。しかし、スクリプトとして実行すると、ImportErrorという名前のモジュールのMySQLdb. apt-get install python-mysqldbこのパッケージは pip 経由では入手できないため、MySQLdb はシステム全体にインストールされます。

ここで何が間違っていますか?

サーバーで実行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

venv に mysqldb パッケージが見つからないため、エラーが発生していますか? そのパッケージのシステム全体のインストールが使用されていないのはなぜですか?

4

2 に答える 2

2

このブログ投稿を使用して、venv に mysql-python をインストールしました。今ではすべてが魅力のように機能します。ありがとう。展開を自動化するためにfabfileも追加しました-

from fabric.api import *

env.user = "host"
env.hosts = ["hostname"]
env.directory = "/home/captain/public/daaru"
env.activate = "source /home/captain/public/daaru/v1/bin/activate"

def deploy():
    with cd(env.directory):
        run("git pull")
        run("sudo service apache2 reload")

def virtualenv(command):
    with cd(env.directory), prefix(env.activate):
        run(command)

def populate_db():
    virtualenv("python setup.py")

def freeze():
    """ command for testing virtualenv """
    virtualenv("pip freeze")
于 2012-10-13T06:46:17.007 に答える
0

cp -r /usr/lib/python2.7/dist-packages/*mysql* $VIRTUALENV/lib/python2.7/dist-packages/私はちょうどこれに出くわしました、そして私にとっての単純で汚い回避策は、cp -r /usr/lib/python2.7/dist-packages/*MySQL* $VIRTUALENV/lib/python2.7/dist-packages/必要なすべての部品を拾い上げる と でした。

さらに調べてみると、 apt経由でインストールされていないpip install MySQL-pythonためにvirtualenvで失敗したことが判明しました。libmysqlclient-devお役に立てれば。

于 2014-09-05T17:39:18.253 に答える