2012-10-13 76 views
1

我想在运行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发现错误?那么为什么不使用该软件包的系统范围安装?

+0

如果人们认为他们可以为您提供更好的解决方案,他们仍然可以添加答案;两天的延迟是让他们有机会看看你的问题。 :-) –

回答

2

我用this博客文章在我的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") 
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/,其中拿起所有需要的零部件。

仔细研究它,结果发现pip install MySQL-python在virtualenv失败,原因是libmysqlclient-dev没有通过apt安装。希望这可以帮助。

相关问题