#python #flask #pip #virtualenv
#python #flask #pip #virtualenv
Вопрос:
Я следую руководству Flask Mega, и я сталкиваюсь с проблемой, как только я добираюсь до второй части и реструктурирую свою структуру папок, чтобы соответствовать их, я не могу импортировать Flask.
Моя текущая структура папок выглядит следующим образом
/FlaskTest
/app
/static, templates etc
/flask
/virtualenv folders etc
/tmp
run.py
насколько я могу судить, структуры папок идентичны, кроме именования каталога верхнего уровня.
в моем __init__.py файл (/app/__init__.py ), я делаю так, как указано в руководстве,
from flask import Flask
app = Flask(__name__)
from app import views
Я получаю сообщение об ошибке импорта, которое «не удается импортировать имя ‘Flask'». Я предполагаю, что проблема заключается в том, что пакет flask был установлен в /flask/lib/site-packages .
Мой вопрос: как я могу ссылаться на подпапку flask / site-packages?
Я прочитал документацию по системе импорта python, и из того, что я могу сделать из нее, прочитав ее в первый раз, мне, вероятно, нужно будет сделать что-то вроде из flask import flask.Flask или что-то в этом роде.
ОБНОВЛЕНИЕ: итак, после обхода каталога и проверки списка файлов я понял, что flask недоступен для моего каталога приложений. Я запустил pip install flask в каталоге приложения. Сейчас мой сайт работает, но я не уверен, что это лучшая практика работы с Python. Пожалуйста, внесите некоторую ясность в то, что является наилучшей практикой для установки пакетов и где находятся пакеты.
ОБНОВЛЕНИЕ 2: после создания каталога с именем standalone. В этой папке я создал виртуальную среду под названием standalone-test. Однажды я сделал это, я также отредактировал приложение и скопировал его содержимое из FlaskTest, чтобы код был идентичным. Я смог запустить run.py скрипт с помощью python run.py
, но я не могу запустить python -m app
, как вы сказали, не столкнувшись с ошибкой. Ошибка заключается в следующем, если это помогает.
«Нет имени модуля app.main; «приложение» является пакетом и не может быть выполнено напрямую.
Я могу запустить python run.py
, как я уже упоминал, но я не могу запустить python -m app
команду, как вы упомянули
Комментарии:
1. Вам нужно запускать команды из
FlaskTest/
подкаталога.
Ответ №1:
Я думаю, что что-то пошло не так в вашей среде выполнения. Вот некоторые пояснения.
Virtualenv
Смотрите Документацию virtualenv
Если вы следовали руководству:
flask
Каталог — это ваш virtualenv,- В системе posix у вас есть
flask/bin
подкаталог или - В системе Windows у вас есть
flaskScripts
подкаталог.
Я предполагаю, что вы используете систему posix.
Чтобы активировать ваш virtualenv, выполните:
source flask/bin/activate
Ваше приглашение должно измениться на что-то вроде: (flask)$
.
Чтобы перечислить установленные библиотеки, используйте pip
:
pip list
Убедитесь, что вы видите Flask. В руководстве предлагается установить множество плагинов Flask, поэтому есть много чего-то похожего на Flask…
Если Flask отсутствует, установите его:
pip install Flask
Запустите ваше приложение
Ваше приложение находится в app
каталоге, в нем есть __init__.py
файл (это пакет Python).
В этом файле у вас есть:
from flask import Flask
app = Flask(__name__)
from app import views
Из вашего FlaskTest/
каталога попробуйте запустить этот скрипт следующим образом:
cd FlaskTest/ # if not in this directory
python -m app
Это должно импортировать Flask
, создать ваш app
экземпляр (но не запускать его), импортировать views
модуль.
Если app/views.py
существует, у вас не должно быть ошибок.
=> на данный момент мы смоделировали, что run.py
импортирует…
Теперь напишите run.py
в своем FlaskTest/
каталоге:
#!flask/bin/python
from app import app
app.run(debug=True)
Запустите его следующим образом:
python run.py
Обратите внимание, что shebang #!flask/bin/python
необычен, но должен работать в контексте руководства.
Это должно запустить ваш http-сервер…
Комментарии:
1. Я обязательно попробую еще раз, но я установил его, просто запустив pip install virtualenv, а затем создал папку, выполнил команду create, а затем запустил скрипт activate.bat (система Windows). Побочный вопрос, имеющий init.py файл превращает каталог в пакет? Я собираюсь попробовать создать другую виртуальную среду и посмотреть, что получится, когда я попытаюсь запустить команды установки из учебника.
2. Итак, я немного поэкспериментировал, и когда я нахожусь в контексте моей виртуальной среды (в моем приглашении рядом с ним указано имя виртуальной среды), и я нажимаю install flask, он устанавливается глобально. Насколько я понимаю virtual env, это ненормальное поведение. Я собираюсь начать учебник заново в другом каталоге. И поделюсь своими результатами / опытом.
3. Обновил OP моими тестами / результатами.