2013-11-22 3 views
6

Я пытаюсь импортировать класс python из другой папки моего пакета python, но я эту ошибку «No module named models».импортировать класс python в другую папку в пакете

Это проект в колбе.

-app 
    |-run.py 
    |-myapp 
    |- libs 
     |- updateto 
      |- __init__.py  (empty) 
      |- connection.py 
     |- removeto 
     |- __init__.py (empty) 
    |- static 
    |- templates 
    |- __init__.py  (NOT empty) 
    |- routes.py 
    |- models.py 

Моего INIT .py:

from flask import Flask 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///maindb.db' 

from models import db 
db.init_app(app) 

import myapp.routes 

В моем models.py У меня есть класс с именем: применение

И в connection.py я хочу импортировать мой класс «приложения ». Я попытался использовать «из приложения импорта моделей», но у меня есть эта ошибка «без модулей с именем модели».

Я думаю, что достичь этой цели можно с помощью изменения init.py в папке «updateto», но я не уверен, потому что я не понимаю, как работает файл init .py. ..

Благодаря

EDIT:

что странно, это если под connection.py добавить "импорт MyApp" и "печать (помощь (MYAPP))", Я этот вывод:

Help on package myapp: 

NAME 
    myapp 

FILE 
    c:\app\myapp\__init__.py 

PACKAGE CONTENTS 
    libs (package) 
    models 
    routes 

DATA 
    app = <Flask 'myapp'> 

Но если я пытаюсь «из импортных моделей MYAPP» Я эту ошибку «ImportError: не может импортировать модели название»

EDIT2:

Если я пытаюсь добавить в connection.py «от импорта приложения MYAPP «, это работает, но нет, если я пытаюсь импортировать модели ... Я очень удивлен. Я пытаюсь добавить в MyApp/INIT .py:

__all__ = ["models", "routes] 

Но ту же ошибку ...

EDIT3:

hummmm Я переместить все мои модули в папке Libs в myapp, и когда я пытаюсь установить connection.py «из приложения импорта модели», у меня всегда такая же ошибка «ImportError: не может импортировать заявку на использование имени»

Другие испытания in connection.py:

import models 
print(models) 

Output: 
<module 'myapp.models' from 'C:\app\myapp\models.pyc'> 

я могу импортировать мой модуль с именем модели, но я не могу импортировать класс под models.py

EDIT4:

Хорошо, я думаю, что я нашел эту проблему. Это мой ini .py в myapp, потому что, если я прокомментирую содержимое этого файла, connection.py теперь может импортировать мое приложение класса в модели. Я запускаю файл run.py, который использует routes.py, и это он вызывает операцию.ру

С некоторыми тестами, я найти линии, которые создают свою ошибку:

from models import db 
db.init_app(app) 
import myapp.routes 

Но почему ????

+0

Это может быть проблема, связанная с пути импорта. Можете ли вы рассказать нам, как вы загружаете файл 'connection.py'? Вы запускаете его из каталога 'updateto'? – jorgerivera

+0

В моем приложении колба нет. Это файл routes.py, который вызывает connection.py при запуске run.py. – Matt

ответ

2

Я не знаю, о Настой конкретно, но в Python вы обычно должны включать в себя __init__.py в каждый папку и папку для их, чтобы быть признанным в качестве модулей и/или пакетов.

На диаграмме, которую вы указываете, нет __init__.py в папке app. Попытайтесь поместить один и повторите отправку, если это решит вашу проблему.

Если это не сработает, попробуйте:

import os 
print(os.getcwd()) 

Если текущий рабочий каталог не является каталогом app, вы должны будете работать вокруг этого. Один из способов будет:

import sys 
sys.path.append('/path/to/app') 

import myapp.models 

Вы всегда можете увидеть, что каталоги в пути поиска модулей по проверке sys.path.

Обновление: Извините, я просто понял, что, возможно, вы пытаетесь запустить connections.py в качестве сценария. Это изменит ваш рабочий каталог на connections.py. Попробуйте импортировать connections.py из вашего основного сценария с import models внутри connections.py и посмотреть, есть ли у вас ошибка.


Update (в ответ на Edit 4): (у меня нет достаточно очков репутации комментировать, поэтому я ответить)

from models import db 
db.init_app(app) 
import myapp.routes 

Проблема в этой части кода import myapp.routes. Измените это на import routes, и он должен работать. Как правило, ваш основной каталог является вашим корневым каталогом. Вы можете импортировать любой модуль, расположенный в корневом каталоге, изнутри любой другой модуль (даже модули внутри подпапки!) С простым import module.

+0

Я попытался поместить __init__.py пустым в корневую папку приложения, но с той же ошибкой. Я проверяю значение sys.path из connection.py, и я думаю, что путь хорош: «C: \\ app \\ myapp». И я не выполнил connection.py как скрипт, но он был вызван внутри моего флеш-приложения. Это route.py, которые его называют. – Matt

+0

Проверьте это [link] (http://docs.python.org/2/tutorial/modules.html#intra-package-references) – Asotos

+0

Я уже проверил эту ссылку. Но если я пытаюсь в connection.py "из моделей импорта ..libs" У меня есть эта ошибка "ImportError: No module named libs" – Matt

Смежные вопросы