Шаблон Copier/CookieCutter для новых проектов Python на основе научного руководства по разработчику Python. Что отличает это от других шаблонов для пакетов Python?
github.com (по умолчанию), и добавляет экспериментальную поддержку Gitlab CI иначе.sp-repo-review для оценки существующих репо с руководящими принципами, с версией WebAssembly, интегрированной с руководством. Все чеки сшиты. Убедитесь, что вы сначала прочитали Руководство по развитию научного питона и, возможно, использовали их в проекте или два. Это не минимальный пример или учебник. Это набор полезных инструментов для запуска нового проекта с использованием CookieCutter или для копирования в отдельных файлах для существующего проекта (вручную, от {{cookiecutter.project_name}}/ ).
Во время поколения вы можете выбрать из следующих бэкэндов для вашего пакета:
В настоящее время лучший выбор, вероятно, является люк для проектов Pure Python и Scikit-Build (например, выбор Scikit-Build-Core + Pybind11) для бинарных проектов.
Установите copier и copier-templates-extensions . Используя PIPX, это:
pipx install copier
pipx inject copier copier-templates-extensionsТеперь запустите Copier, чтобы создать свой проект:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> -это путь для размещения нового проекта. Если копир старый, используйте --UNSAFE вместо --trust )
Вы получите более приятный опыт CLI с проверкой ответов. Вы также получите файл .copier-answers.yml , который позволит вам выполнять обновления в будущем.
Примечание: добавить
--vcs-ref=HEADчтобы получить последнюю версию вместо последней версии с тегами; Голова всегда проходит тесты (и это то, что использует CookieCutter).
Установите CookieCutter, в идеале с помощью brew install cookiecutter если вы используете Brew, в противном случае с pipx install cookiecutter (или pipx run к команде ниже, и пропустите установку). Затем беги:
cookiecutter gh:scientific-python/cookieЕсли вы используете CookieCutter 2.2.3+, вы получите хорошие описания для таких вариантов, как Copier!
Вы также можете использовать Cruft, который добавляет обновление возможности для проектов CookieCutter. Установите с помощью pipx install cruft (или pipx run к команде ниже, и пропустите установку). Затем беги:
cruft create gh:scientific-python/cookie Проверьте файлы настройки ключей, pyproject.toml и, возможно, setup.cfg и setup.py (пример Pybind11). Обновление README.md . Также обновите и добавьте документы в docs/ .
Есть несколько примеров зависимостей и минимальная версия Python 3.9, не стесняйтесь изменить ее на все, что вам нужно/нужно. Существует также базовая структура закупорочных ресурсов с небольшим примером печати.
[docs] Extra[test] дополнительныйВы можете проверить локально с NOx:
# See all commands
nox -l
# Run a specific check
nox -s "lint(scikit-build)"
# Run a noxfile command on the project noxfile
nox -s "nox(hatch)" -- docs Если у вас нет nox локально, вы можете использовать PIPX, например, pipx run nox .
Hypermoderner-Python-это еще один проект, который стоит проверить со многими сходствами, такими как отличная документация для каждой функции и многие из тех же используемых инструментов. Он имеет немного другой набор функций и более сильнее сосредоточен на действиях GitHub - большинство нашего руководства может быть адаптировано к другой системе CI довольно легко, если вы не хотите использовать GHA. Это также заставляет использовать поэзию (вместо того, чтобы иметь бэкэнд -выбор), и не поддерживает скомпилированные проекты. В настоящее время он сбрасывает все зависимости развития в общую среду, вызывая длительные времена и высокие шансы на конфликты. Он также не использует предварительную связь так, как было предназначено для использования. У этого также есть немало пользовательского кода.
Многие руководства, CookieCutter и Repo-Review начинались как часть Scikit-HEP. Эти проекты были объединены, обобщены и в сочетании с руководством NSLS-II на саммите разработчиков научных питонов 2023 года.
sp-repo-review предоставляет проверки, основанные на Руководстве по разработке научного питона в Scientific-Python/Cookie для Repo-Review.
Этот инструмент может проверить стиль репозитория. Используйте так:
pipx run ' sp-repo-review[cli] ' < path to repository >Это даст список результатов - зеленые чеки означают, что это правило соблюдается, Red x означает, что правило нет. Желтый предупреждающий знак означает, что чек был пропущен, потому что предыдущая необходимая проверка не удалась. Некоторые чеки потерпят неудачу, это нормально - цель состоит в том, чтобы довести все возможное для вашего внимания, а не привести к соблюдению произвольных проверок. В конце концов может быть способ отметить чеки, которые игнорируются.
Например, GH101 ожидает, что все ваши файлы действий получит хорошее name: поле. Если вы довольны именами на основе файлов, которые вы видите в CI, вы должны просто игнорировать эту проверку (просто визуально игнорируйте его на данный момент, способ указать игнорируемые проверки, вероятно, будет добавлен в конечном итоге).
Все чеки упоминаются, по крайней мере, в некотором смысле в Руководстве по развитию научного питона. Сначала вы должны прочитать это - если вы не пытаетесь следовать за ними, некоторые проверки могут не сработать. Например, руководящие принципы указывают, что конфигурация Pytest будет размещена в pyproject.toml . Если вы разместите его в другом месте, то все проверки Pytest будут пропущены.
Первоначально это было разработано для Scikit-HEP, прежде чем переехать на научный питон.
Вы также можете использовать действия GitHub:
- uses : scientific-python/cookie@<version>Или предварительная коммерция:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review Если вы используете additional_dependencies для добавления большего количества плагинов, таких как validate-pyproject , вы также должны включить "repo-review[cli]" , чтобы обеспечить включение требований CLI.
PY001 : имеет pyproject.tomlPY002 : имеет файл readme. (Md | rst)PY003 : имеет лицензию* файлPY004 : есть папка документовPY005 : имеет папку тестовPY006 : имеет предварительную конфигурациюPY007 : поддерживает простой задачу (NOX, Tox, Pixi и т. Д.)PP002 : имеет правильную таблицу строительных системPP003 : не перечисляет колесо как DEP-DEPPP004 : не требует верхней крышки PythonPP301 : имеет pytest в pyprojectPP302 : устанавливает минимальный питест как минимум 6PP303 : устанавливает пути испытанийPP304 : устанавливает уровень журнала в PytestPP305 : указывает xfail_strictPP306 : указывает строгую конфигурациюPP307 : указывает строгие маркерыPP308 : указывает полезное резюме PytestPP309 : предупреждения фильтра указаныRTD100 : использует readthedocs (конфигурация pyproject)RTD101 : вы должны установить номер версии RTD на 2RTD102 : Вы должны установить изображение RTD BuildRTD103 : Вы должны установить версию RTD PythonGH100 : имеет конфигурацию GitHub ActionsGH101 : есть хорошие именаGH102 : Авторанцел на повторных PRSGH103 : По крайней мере один рабочий процесс с ручным спусканием для отправкиGH104 : Используйте уникальные имена для загрузки-артифактаGH200 : поддерживается DevenabotGH210 : поддерживает версии Action GitHub с зависимостьюGH211 : не прижимайте основные действия как основные версииGH212 : Требуется группировка обновления GHAMY100 : использует Mypy (конфигурация pyproject)MY101 : строгий режим MypyMY102 : mypy show_error_codes устарелMY103 : Mypy Warn недоступенMY104 : Mypy позволяет игнорировать без кодаMY105 : mypy позволяет избыточно-эксплуMY106 : Mypy позволяет Prutey-BoolPC100 : имеет предварительные крючкиPC110 : использует черный или рюшаPC111 : использует Blacken-DocsPC140 : использует проверку типаPC160 : использует проверку орфографииPC170 : использует крючки Pygrep (необходимы только в первом месте)PC180 : использует форматер разметкиPC190 : использует езрокPC191 : Ruff Show Fixes, если исправления включеныPC901 : Пользовательское сообщение Pre-Commit CIRF001 : есть конфигурация рюкзаRF002 : целевая версия должна быть установленаRF003 : каталог SRC больше не нужно указать (0,6+)RF101 : Bugbear должен быть выбранRF102 : Изорт должен быть выбранRF103 : Pyupgrade должен быть выбранRF201 : избегайте использования устаревших настройки конфигурацииRF202 : используйте (новый) раздел конфигурации Lint