2013-03-26 2 views
15

내가 내 Flask 프로젝트를 통합하기 위해 노력하고 말한다 Alembic
, 내가증류기는 : 증류기 개정 가져 오기 오류

를 참조
project/ 
     configuration/ 
        __init__.py 
        dev.py 
        test.py 
     core/ 
      # all source code 
     db/ 
     migrations/ 
        __init__.py 
        alembic.ini 
        env.py 
        versions/ 

나는 내 db 디렉토리에서 다음 실행하려고

처럼 내 응용 프로그램 구조가 보인다
File "migration/env.py", line 55, in run_migrations_online 
    from configuration import app, db 
ImportError: No module named configuration 

나는 Request a simple alembic working example for Auto Generating Migrations에 언급 된 솔루션을 시도하지만,

나를 위해 작동하지 않습니다 변화 env.py run_migrations_online()에서

내 방법은

def run_migrations_online(): 
    """Run migrations in 'online' mode. 

    In this scenario we need to create an Engine 
    and associate a connection with the context. 

    """ 
    import os 
    import sys 

    sys.path.append(os.getcwd()) 
    from configuration import app, db 

    alembic_config = config.get_section(config.config_ini_section) 
    alembic_config['sqlalchemy.url'] = app.config['SQLALCHEMY_DATABASE_URI'] 
    target_metadata = db.metadata 

    engine = engine_from_config(
     alembic_config, 
     prefix='sqlalchemy.', 
     poolclass=pool.NullPool) 

    connection = engine.connect() 
    context.configure(
     connection=connection, 
     target_metadata=target_metadata 
    ) 

    try: 
     with context.begin_transaction(): 
      context.run_migrations() 
    finally: 
     connection.close() 


if context.is_offline_mode(): 
    run_migrations_offline() 
else: 
    run_migrations_online() 

나는이 문제를 어떻게 해결할 수

입니까?

답변

19

내가 export PYTHONPATH=<path_to_project>를하고 명령을 다시 실행하고 더 나은, 더 영구적 인 솔루션의 성공적

+0

실행, 나는 두 번째 @Palasaty는 무엇을 제안. 단지'env.py' 파일을 업데이트하여 올바른 디렉토리를 사용하십시오. –

1

동일한 문제가 발생했습니다.--autogenerate 플래그가 설정되어 있지 않으면 env.py가 개정 에 의해 호출되지 않습니다. env.py 파일의 맨 위에 print 문을 넣어 테스트 할 수 있습니다.

우리는 --autogenerate으로 전화를 걸어 생성 된 코드를 제거하고 있습니다.

7

project/db 디렉토리에서 alembic migrate --autogenerate -m 'migration description'과 같은 것을 실행하고 ImportError을 얻으시겠습니까?

그렇다면 문제는 분명합니다.

참조 : configuration 모듈을 가져 오려고하면 오류가 발생합니다. 그런 다음 sys.path.append(os.getcwd())을 입력합니다. 즉, 현재 디렉토리를 시스템 경로에 추가합니다. 그러나 현재 디렉토리 란 무엇입니까? 그것은 project/db이고 그 아래에 configuration 모듈이 없으므로 계속 ImportError이됩니다.

해결 방법은 configuration 모듈을 포함하는 시스템 경로 상위 디렉토리 - project에 추가하는 것입니다. 그래서 같이 :

parent_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) 
sys.path.append(parent_dir)