2013-03-26 4 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.pyrun_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 फ़ाइल के शीर्ष पर एक प्रिंट स्टेटमेंट डालकर इसका परीक्षण कर सकते हैं।

हम --autogenerate के साथ कॉल करके उत्पन्न कोड को हटाकर इसके आसपास काम कर रहे हैं।

7

आप कहते हैं कि आप alembic migrate --autogenerate -m 'migration description' पर project/db से कुछ चलाते हैं और ImportError प्राप्त करते हैं, है ना?

यदि ऐसा है, तो समस्या स्पष्ट है।

देखें: आप configuration मॉड्यूल आयात करने का प्रयास करते हैं और इसके परिणामस्वरूप त्रुटियां होती हैं। फिर आप sys.path.append(os.getcwd()) डालते हैं - दूसरे शब्दों में, आप सिस्टम पथ में वर्तमान निर्देशिका जोड़ते हैं। लेकिन वर्तमान निर्देशिका क्या है? यह project/db है, और इसमें configuration मॉड्यूल नहीं है, इसलिए आप ImportError प्राप्त कर रहे हैं।

समाधान सिस्टम पथ पैरेंट निर्देशिका में जोड़ने के लिए है - project, जिसमें configuration मॉड्यूल शामिल है। इसलिए जैसा:

parent_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) 
sys.path.append(parent_dir) 
संबंधित मुद्दे