Форум сайта python.su
Делаю всё по учебнику:
http://habrahabr.ru/post/193242/
Структура папок абсолютно идентичная структуре из учебника, только директория с интерпретатором называется bin, а не flask:
books\
bin\
<файлы виртуального окружения>
app\
static\
templates\
__init__.py
views.py
models.py
forms.py
tmp\
run.py
config.py
C:\proj\books\bin\Scripts\python.exe C:/proj/books/run.py Traceback (most recent call last): File "C:/proj/books/run.py", line 1, in <module> from app import app File "C:\proj\books\app\__init__.py", line 9, in <module> from app import views, models File "C:\proj\books\app\views.py", line 3, in <module> from forms import Seaker ImportError: No module named 'forms'
Отредактировано aCL (Март 17, 2015 18:50:59)
Офлайн
Покажи содержимое файлов run.py и __init__.py
Офлайн
Так работает?
from app.views import view_func from app.models import ModelClass
Офлайн
FishHookДа, работает. Но почему именно через app, если импорт ведется из текущей директории?
Так работает?
py.user.next__init__.py:
Покажи содержимое файлов run.py и __init__.py
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_object('config') db = SQLAlchemy(app) from app import views, models
from app import app if __name__ == '__main__': app.run(debug=True)
Офлайн
aCL
потому что импорты работают не так
из app импортируется, потому что импорт идет из пакета “app”, в данном случае из файла __init__.py, куда питон смотрит в первую очередь
Офлайн
sanderА куда он смотрит после этого?
aCLпотому что импорты работают не такиз app импортируется, потому что импорт идет из пакета “app”, в данном случае из файла __init__.py, куда питон смотрит в первую очередь
app/
__init__.py
module.py
run.py
from app import module
a = 'qweqwe'
from module import a input(a)
Офлайн
Никто не поможет или никто не знает ответа?
Офлайн
> Но почему именно через app, если импорт ведется из текущей директории?
Ну наверно потому что у тебя текущая директория не app, а books
А вообще прочитай про sys.path и сразу многое станет ясным.
Офлайн
Лутц передает привет
В обеих версиях, Python 3.0 и 2.6, инструкции from теперь могут использовать
точки («.»), чтобы указать, что поиск модулей в первую очередь должен про-изводиться в том же самом пакете (эта особенность известна как импортирование относительно пакета), а не где-то в другом месте, в пути поиска (эта особенность называется импортирование по абсолютному пути). То есть:
• В обеих версиях Python, 3.0 и 2.6, в инструкции fromв начале пути мож-но использовать точки, чтобы указать, что импорт должен производиться
относительновмещающего пакета, – при таком способе импортирования
поиск модулей будет производиться только внутри пакета, а модули с теми
же именами, находящиеся где-то в пути поиска (sys.path), будут недоступны. Благодаря этому модули внутри пакета получают преимущество перед
модулями за его пределами.
• В Python 2.6 обычная операция импортирования в программном коде пакета (без точек) в настоящее время по умолчанию выполняется в порядке
«сначала поиск относительно пакета, потом – абсолютный поиск». То есть
поиск сначала производится в каталоге пакета и только потом в пути поиска. Однако в Python 3.0 по умолчанию выполняется импортирование по абсолютному пути – при отсутствии точек операции импортирования пропускают вмещающий пакет и пытаются отыскать импортируемые модули
в пути поиска sys.path.
Например, в обеих версиях Python, 3.0 и 2.6, инструкция вида:
from . import spam # Импортирование относительно текущего пакета
from .spam import name
from __future__ import absolute_import # Обязательно до версии2.7?
import string # Пропустит поиск модуля в пакете
from . import string # Поиск выполняется только в пределах пакета
from .string import name1, name2 # Импорт имен из mypkg.string from . import string # Импорт mypkg.string from .. import string # Импорт string из родительского каталога
Офлайн
aCL
В run.py:from module import a input(a)
запуск run.py выводит вот это самое ‘qweqwe’
from app import module
Офлайн