Как я могу запустить приложение Flask - PullRequest
0 голосов
/ 30 марта 2019

Официальный сайт Flask сообщает, что мы можем запустить приложение Flask по

$ export FLASK_APP=hello.py
$ flask run
  1. Вторая команда не работает для меня.

    $ flask run    
    Command 'flask' not found, but can be installed with:  
    sudo apt install python3-flask
    

    Вместо этого работает

    python3 -m flask run
    

    Как заставить работать вторую команду? Если я запусту sudo apt install python3-flask, получу ли я две установки колбы?

  2. Можно ли объединить две команды в одну команду без использования переменной среды?

1 Ответ

3 голосов
/ 30 марта 2019

Терпите меня, поскольку я попытаюсь объяснить различные части и как они все соединяются.export FLASK_APP=hello.py означает установку переменной среды операционной системы , называемой FLASK_APP, и просто указывает на входной файл для запуска приложения колбы .Это ничем не отличается от установки любой другой переменной среды в вашей операционной системе.Теперь команда разработчиков фляг предоставила всем команду flask run, которую можно использовать для запуска вашего приложения фляги , и эта команда будет использовать значение, установленное в переменной среды FLASK_APP, при попытке запуска.ваш флеш-сервер.Таким образом, причина, по которой ваша команда python3 -m flask run работает, заключается в том, что вы указываете установке Python в операционной системе, что она запускает команду flask run в виде сценария, как и предполагается, что эта команда должна вызываться.

Для справки:

-m mod : run library module as a script (terminates option list)

Кроме того, python пытается разрешить модули из своей переменной среды sys.path и ищет каталоги в следующем порядке для поиска запрошенного модуля:

  1. текущий каталог , в который был вызван скрипт.Вот почему вы можете всегда импортировать модули, содержащиеся в одном каталоге друг с другом .
  2. Значение вашей переменной среды PYTHONPATH
  3. Стандартный каталог библиотеки на вашем компьютере.путь
  4. Наконец, каталог пакетов сайта, то есть ваши сторонние пакеты вроде flask

Теперь причина, по которой ваша команда flask run изначально не быларабота заключается в том, что python не смог найти флягу ни в одном из четырех мест, перечисленных выше .Однако, как только вы дали -m python, который знал, что искать в вашем каталоге site-packages для flask и смог найти указанный модуль.

Для справки вы можете увидеть, где python ищет для разрешения модулей с помощьювыведите на консоль переменную sys.path:

import sys
print(sys.path)

Хорошо, чтобы ответить на первую часть вашего первого вопроса, теперь как на вторую часть вашего первого вопроса:

«Если я запусту sudo apt install python3-flask, получу ли я две установки колбы?»

Да, это будет глобальная установка колбы в вашей системе , и я настоятельно рекомендую противэто потому, что вы можете испортить вашу систему, если не будете осторожны.Итак, как мне избежать путаницы с настройками Python на системном уровне?

Virtualenv В помощь, Виртуальные среды позволяют вам иметь изолированную область для работы с библиотеками.В наихудшем сценарии вы сдуруете их и начинаете с нуля, если что-то напортачили, не влияя на установку Python в вашей операционной системе. Вы должны иметь отношение один к одному между каждым проектом Python и виртуальной средой .Если вы используете virtualenv, я настоятельно рекомендую изучить Virtualenvwrapper , который обернет virtualenv более удобными для запоминания командами.Хотя я думаю, что все классные дети сейчас используют pipenv , так что, возможно, вы тоже захотите в этом разобраться, я оставлю это решение вам.Что приятно, когда вы активируете свою виртуальную среду и разрабатываете ее, вы можете просто использовать flask run, поскольку ваша виртуальная среда будет на вашем пути python.

Что касается вашего второго вопроса: "Может лидве команды объединены в одну команду без использования переменной среды? "

Нет, вам все равно нужно установить переменную среды FLASK_APP для использования flask run, так как она ищет значение этой переменной средычтобы запустить ваш флеш-сервер.Возможно, вы можете попробовать что-то вроде:

FLASK_APP=hello.py flask run

в командной строке и посмотреть, поможет ли это вам, но вы все еще устанавливаете переменную окружения FLASK_APP.В качестве альтернативы, вы можете просто запустить файл ввода для вашего флеш-сервера напрямую:

python hello.py

Я знаю, что это было много, но, надеюсь, это поможет вам кое-что прояснить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...