Мой рабочий процесс
Я создал Python Package CookieCutter, демонстрирующий два файла рабочего процесса GitHub, которые я видел, и успешно использовал для тестирования и публикации пакета Python в PYPI с использованием действий GitHub.
Подробное объяснение и обертка Python CookieCutter – это новые дополнения. 🎉 Мне было трудно просто осмотреть работу проектов с открытым исходным кодом и собрать кусочки вместе.
Поэтому я надеюсь, что это поможет вам (независимо от вашего предыдущего опыта).
Пожалуйста, дайте мне знать, что не ясно!
Начало работы с этим шаблоном
Есть два файла рабочего процесса, каждый с их названной целью:
- Тест
- Публиковать
Если у вас есть существующий проект Python или вы запускаете новый, вы можете использовать свое имя пользователя GitHub и название своего проекта в качестве входных данных в мой шаблон кулинарного летательного аппарата!
Во -первых, что такое CookieCutter?
CookieCutter
CookieCutter/CookieCutter
Утилита командной строки, которая создает проекты из CookieCutters (шаблоны проекта), например, Python Package Projects, Vuejs Projects.
Утилита командной строки, которая создает проекты из CookieCutters (Шаблоны проекта), например, Создание проекта Python Package из шаблона проекта Python Package.
- Документация: https://cookiecutter.readthedocs.io
- GitHub: https://github.com/cookiecutter/cookiecutter
- Pypi: https://pypi.org/project/cookiecutter/
- Бесплатное и открытое программное обеспечение: Лицензия BSD
Мы гордимся тем, что являемся спонсором с открытым исходным кодом Pycon 2016 Анкет
Функции
Кто -то сказал функции?
- Кроссплатформные: Windows, Mac и Linux официально поддерживаются.
- Вам не нужно знать/писать код Python, чтобы использовать CookieCutter.
- Работает с Python 3.6, 3.7, 3.8, 3.9 и PYPY3.
- Шаблоны проекта могут находиться в любом языке программирования или формате разметки Python, JavaScript, Ruby, CoffeeScript, RST, Markdown, CSS, HTML, вы называете его, вы можете использовать несколько языков в одном шаблоне проекта.
- Простое использование командной строки:
# Create project from the cookiecutter-pypackage.git repo template # You'll be prompted to enter values. # Then it'll create your Python package in the current working directory, # based on those values. $
Убедитесь, что у вас есть Python3 установлены!
Инструкции по использованию iancleary/pypackage
python3 -m pip install cookiecutter # you can add the flag `--user` if you'd like $ cookiecutter https://github.com/iancleary/pypackage # For the sake of brevity, repos on GitHub can just use the 'gh' prefix $ cookiecutter gh:iancleary/pypackage
Функции
- Поэзия (виртуальная среда и публиковать в PYPI, все с одним инструментом)
- Черный (лининг/форматер)
- Автофляк (удаление неиспользованных пакетов)
- Изорт (организация зависимости)
- Mypy (проверка статического типа)
- Pytest (включая тестовое покрытие)
- Предварительный Коммит (крючки на коммите)
- Действия GitHub для CI/CD
- MKDOCS для документации (с материальной темой)
Только Python 3.6+ поддерживается по мере того, как требуется черные, пиджанские пакеты
Категория представления: Содействие обязательно сдерживает
Ямл файл или ссылка на код
Янлери/Пипакей
Пакет CookieCutter Python с использованием поэзии, Mypy, Black, Isort, Autoflake, Pytest, Mkdocs и Github Action
Я больше не могу поддерживать этот кулинарный, см. Br3ndonland/Template-Python шаблон. Хотя это и не кулинарная пьеса на момент написания этой статьи, у него есть инструмент, на который я собирался:)
Настройка пакета Phyd Python с современными Венвами, зависимостями, тестированием, документами и CI
Основная мысль
Это шаблонный модуль, собирающий множество утилит, которые мне нравились в других проектах, чтобы служить личной ссылкой.
Начало работы с этим шаблоном
pip install --user cookiecutter $ cookiecutter https://github.com/iancleary/pypackage # For the sake of brevity, repos on GitHub can just use the 'gh' prefix $ cookiecutter gh:iancleary/pypackage
Функции
- Поэзия (виртуальная среда и публиковать в PYPI, все с одним инструментом)
- Черный (лининг/форматер)
- Автофляк (удаление неиспользованных пакетов)
- Изорт (организация зависимости)
- Mypy (проверка статического типа)
- Pytest (включая тестовое покрытие)
- Предварительный Коммит (крючки на коммите)
- Действия GitHub для CI/CD
- MKDOCS для документации (с материальной темой)
Только Python 3.6+ поддерживается как…
Тест
name: Test on: push: pull_request: types: [opened, synchronize] jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: [3.6, 3.7, 3.8] fail-fast: false steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 with: python-version: ${{ matrix.python-version }} - name: Get full python version id: full-python-version run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") - name: Install poetry run: | curl -fsS -o get-poetry.py https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py python get-poetry.py -y echo "::set-env name=PATH::$HOME/.poetry/bin:$PATH" - name: Configure poetry run: poetry config virtualenvs.in-project true - name: Set up cache uses: actions/cache@v1 id: cache with: path: .venv key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - name: Ensure cache is healthy if: steps.cache.outputs.cache-hit == 'true' run: poetry run pip --version >/dev/null 2>&1 || rm -rf .venv - name: Install Dependencies run: poetry install - name: Test run: poetry run bash scripts/test.sh - name: Upload coverage uses: codecov/codecov-action@v1
Публиковать
Репо секреты
Перейдите в настройки репо и добавьте Pypi_token
переменная среды:
name: Publish on: release: types: - created jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v1 with: python-version: "3.7" - name: Install poetry run: | curl -fsS -o get-poetry.py https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py python get-poetry.py -y echo "::set-env name=PATH::$HOME/.poetry/bin:$PATH" - name: Configure poetry run: poetry config virtualenvs.in-project true - name: Set up cache uses: actions/cache@v1 id: cache with: path: .venv key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} - name: Ensure cache is healthy if: steps.cache.outputs.cache-hit == 'true' run: poetry run pip --version >/dev/null 2>&1 || rm -rf .venv - name: Install Dependencies run: poetry install - name: Publish env: PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} run: | poetry config pypi-token.pypi $PYPI_TOKEN bash scripts/publish.sh
Вот и все!
Когда вы выпустите релиз на GitHub, Publish Workflow будет работать и развернуться в PYPI! 🚀🎉😎
Дополнительные ресурсы/информация
Я успешно использовал кусочек в своем проекте Fastrf
Янлери/Фастрф
RF Design Server
Fastrf – это приложение для создания и отслеживания ключевых метрик системы
Основная мысль
Fastrf – это веб -сервер, который позволяет легко создавать радиочастотные (РЧ)
Этот проект будет стоять на плечах некоторых гигантов:
- https://github.com/tiangolo/fastapi/
- https://github.com/samuelcolvin/pydantic/
- https://github.com/scikit-rf/scikit-rf
Установка FASTRF
Установите последний релиз:
pip install fastrf
Документация
Документация размещена в fastrf.org Анкет
Зависимости
pyproject.toml
Файл используется Поэзия установить зависимости в виртуальную среду.
Поэзия командная строка интерфейс Documnetation: https://python-poetry.org/docs/cli/
Только Python 3.6+ поддерживается по мере того, как требуется черные, Fastapi, Pydantic Packages
Этот пакет был создан с iAncleary/pypackage CookieCutter.
Ссылка источника для значения баннера: https://medium.com/swlh/automate-python-testing-with-github-actions-7926b5d8a865
Оригинал: “https://dev.to/iancleary/test-and-publish-a-python-package-to-pypi-using-poetry-and-github-actions-186a”