Терпите меня, поскольку я попытаюсь объяснить различные части и как они все соединяются.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
и ищет каталоги в следующем порядке для поиска запрошенного модуля:
- текущий каталог , в который был вызван скрипт.Вот почему вы можете всегда импортировать модули, содержащиеся в одном каталоге друг с другом .
- Значение вашей переменной среды
PYTHONPATH
- Стандартный каталог библиотеки на вашем компьютере.путь
- Наконец, каталог пакетов сайта, то есть ваши сторонние пакеты вроде
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
Я знаю, что это было много, но, надеюсь, это поможет вам кое-что прояснить!