2012-10-13 3 views
1

나는 Flask + sqlalchemy (mysql)을 실행중인 Linode 인스턴스에서 python setup.py 작은 스크립트를 실행하려고합니다.Virtualenv에서 가져 오기 오류

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 이름) 가상 ENV를 활성화하고 ipython 모든 일에 init_db를 실행하는 것입니다 -

#filename - setup.py 
from daaru import db 

def init_db(): 
    db.drop_all() 
    db.create_all() 

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 일 지연은 그들에게 당신의 질문을 볼 기회를주는 것입니다. :-) –

답변

2

내 venv에 mysql-python을 설치하려면 this 블로그 게시물을 사용했습니다. 모든 것은 지금 매력을 좋아합니다. 감사. 또한 배포를 자동화하는 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/로했다.

더 살펴보면 은이 (가) apt를 통해 설치되지 않아 virtualenv에서 실패한 것으로 나타났습니다. 희망이 도움이됩니다.