Snext — это приложение Next.js, которое позволяет создавать маршруты API в Python.
Snext, потому что это звучит как «змея»? Знаешь, как Питон.
/! /! /! Это ранний эксперимент.
Эй, если вы окажетесь там, вы, вероятно, разработчик JavaScript, а Python — только ваш второй язык.
Вот как настроить эффективную среду Python.
Я предлагаю использовать Pyenv для установки Python. Считайте его эквивалентом Node Version Manager или Volta, но для Python.
Это эквивалентно использованию Volta или NVM в экосистеме Node.
В Python нет папки node_modules
. Возможно, это и к лучшему, однако из-за этого становится довольно сложно обрабатывать зависимости, когда на вашем компьютере много проектов.
Виртуальная среда немного похожа: она скажет Python устанавливать пакеты локально в ваш текущий проект, а не глобально.
Отличие от Node в том, что вы должны включать их систематически.
Настройте виртуальную среду и установите пакеты Python:
python3 -m venv ./venv
source ./venv/bin/activate
pip install -r requirements.txt
Вам необходимо активировать виртуальную среду, когда вы начнете работать:
source ./venv/bin/activate
К сожалению, эта команда не работает в сценариях NPM. Вам придется вводить его каждый раз.
vercel
CLI может решить наши проблемы (см. https://vercel.com/docs/cli#commands/dev) => готово, это так! Используйте Vercel CLI вместо next dev
.
Команда Vercel CLI vercel dev
способна локально моделировать бессерверную среду, поэтому вы можете тестировать маршруты API.
Если вы поместите все маршруты API в ./api/
и используете vercel dev
, у вас могут быть маршруты API Python и Node.js (и, конечно, интерфейс Next.js по-прежнему работает нормально).
Читать vercel/vercel#6197
При запуске Next вам нужно, чтобы все работало на localhost:3000
, но у вас будет 2 сервера: один для Node, другой для Python. Для работы этого потребуется переписать логику.
Кроме того, у нас может быть несколько маршрутов API, которые при развертывании будут действовать как бессерверные функции. Но локально мы должны сделать их одним сервером.
Рекомендуемый шаблон для получения статических данных из маршрутов API в Next — повторное использование базовой логики маршрута непосредственно в getStaticProps
. Но это возможно только потому, что оба используют JS. При использовании Python нам нужно будет сначала построить маршруты API, запустить их, а затем только создавать интерфейс.
Необходимо протестировать с помощью Vercel CLI.
У нас есть эта ошибка https://github.com/vercel/community/discussions/103
в последней версии, среда выполнения Python кажется слишком большой. См. vercel/community#103 (комментарий). См. vercel/vercel#2830.
См. https://github.com/vercel/vercel/blob/main/errors/now-dev-as-dev-script.md.
Сценарий должен иметь другое имя, например dev:vercel
иначе он создаст бесконечный цикл.
Нет -
в именах папок в Python, иначе у вас будут проблемы с импортом файлов... Используйте подчеркивание _
. Это может привести к созданию запутанных URL-адресов, поскольку имя папки привязано к имени маршрута в разделе «Далее».
(Из моего ограниченного опыта работы с Python) я склонен сравнивать Flask или Falcon с Express: используется много, достаточно минимально. Но блокирующее поведение Python может сбить с толку разработчика JavaScript. Поэтому я выберу Sanic, потому что он опирается на async/await, как Node.js, и может быть наименее запутанным.
В любом случае, все знания, собранные для одного фреймворка, должны быть повторно использованы для любого другого фреймворка.
Для упрощения предположим хостинг на Верселе. Нам может понадобиться vercel.json
, чтобы сообщить Vercel, какую среду выполнения использовать: https://vercel.com/docs/runtimes#advanced-usage/community-runtimes
Поскольку разработка Vercel работает, следует ожидать, что развертывание Vercel будет работать сразу после установки. Чтобы пройти тестирование.
В Python вам нужна виртуальная среда для изоляции ваших пакетов между приложениями, а в JS эту роль играет node_modules
. Проблема в том, что виртуальную среду необходимо активировать при начале работы, а это дополнительный шаг для разработчика. Что еще хуже, source
команду, активирующую среду, невозможно (последний раз, когда я проверял) поместить в package.json
, поэтому вам придется каждый раз запоминать правильную команду.
Это проект Next.js, загруженный с помощью create-next-app
.
Сначала запустите сервер разработки:
npm run dev
# or
yarn dev
Откройте http://localhost:3000 в браузере, чтобы увидеть результат.
Вы можете начать редактирование страницы, изменив pages/index.js
. Страница автоматически обновляется по мере редактирования файла.
Доступ к маршрутам API можно получить по адресу http://localhost:3000/api/hello. Эту конечную точку можно редактировать в pages/api/hello.js
.
Каталог pages/api
отображается в /api/*
. Файлы в этом каталоге рассматриваются как маршруты API, а не как страницы React.
Чтобы узнать больше о Next.js, посетите следующие ресурсы:
Вы можете посетить репозиторий Next.js на GitHub — ваши отзывы и вклад приветствуются!
Самый простой способ развернуть приложение Next.js — использовать платформу Vercel от создателей Next.js.
Дополнительную информацию можно найти в документации по развертыванию Next.js.