Форум программистов, компьютерный форум, киберфорум
py-thonny
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Управление зависимостями в Python с Poetry

Запись от py-thonny размещена 04.04.2025 в 18:02
Показов 3429 Комментарии 0

Нажмите на изображение для увеличения
Название: ca930498-a647-4538-83e6-130f95178dc0.jpg
Просмотров: 106
Размер:	147.8 Кб
ID:	10524
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные проекты требуют разных версий одной и той же библиотеки? Или когда библиотека A требует версию 1.0 пакета C, а библиотека B - версию 2.0 того же пакета? Ситуация усложняется многократно, когда речь идёт о командной разработке, где каждый участник должен воспроизвести идентичное окружение. Традиционно мы обходили эти сложности с помощью виртуальных окружений и файлов requirements.txt. Но этот подход имеет свои минусы: requirements.txt часто содержит нелогичный список всех установленных пакетов, без разделения на прямые и транзитивные зависимости. Кроме того, такой файл не хранит информацию о допустимых диапазонах версий, что затрудняет обновление пакетов без риска сломать проект. Не меньшую проблему представляет и сам процесс создания пакетов Python. Исторически для этого использовались файлы setup.py, работа с которыми требовала знания различных нюансов системы распространения пакетов. Простая задача публикации собственного пакета превращалась в квест по настройке множества параметров.

В попытках решить эти проблемы появлялись различные инструменты: virtualenv, pipenv, conda и другие. Каждый из них решал часть проблем, но ни один не предлагал комплексного подхода к управлению зависимостями и упаковке проектов.

Появившись относительно недавно, Poetry быстро завоевал популярность благодаря элегантному подходу к управлению зависимостями. Он объединяет лучшие практики из мира Node.js (npm, yarn) и Ruby (bundler), адаптируя их под особенности экосистемы Python. Философия Poetry заключается в том, чтобы сделать управление зависимостями в Python таким же простым и предсказуемым, каким оно должно быть. Вместо множества разрозненных инструментов Poetry предлагает единое решение для создания проектов, управления зависимостями, сборки и публикации пакетов. При этом все конфигурации хранятся в едином файле pyproject.toml, что соответствует современным стандартам Python (PEP 518, PEP 621). Ключевая особенность Poetry - его система разрешения зависимостей. В отличие от pip, который может устанавливать несовместимые версии пакетов, Poetry анализирует все зависимости, включая транзитивные, и находит комбинацию версий, удовлетворяющую всем требованиям. Эта информация фиксируется в файле poetry.lock, гарантируя, что все разработчики используют идентичные версии всех пакетов.

Установка и настройка Poetry



Прежде чем погрузиться в мир Poetry, необходимо правильно установить и настроить этот инструмент. В отличие от большинства Python-пакетов, Poetry не рекомендуется устанавливать с помощью pip непосредственно в окружение проекта. Причина проста: Poetry сам управляет зависимостями проекта, и установка его в то же окружение может привести к конфликтам.

Существует несколько способов установки Poetry, каждый из которых имеет свои преимущества:

1. Официальный установщик - наиболее рекомендуемый способ. Для Windows можно использовать PowerShell:

PowerShell
1
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
Для Linux и macOS подойдет curl:

Bash
1
curl -sSL https://install.python-poetry.org | python3 -
2. Установка через pipx - отличная альтернатива, особенно для тех, кто уже использует pipx для изолированной установки Python-приложений:

Bash
1
pipx install poetry
3. Системные пакеты - для пользователей некоторых дистрибутивов Linux, например Ubuntu:

Bash
1
sudo apt install python3-poetry
Стоит отметить, что системные пакеты могут содержать не самые последние версии Poetry, а также тянуть за собой множество зависимостей, поэтому этот способ менее предпочтителен. После установки убедитесь, что Poetry доступен в системе:

Bash
1
poetry --version
Если команда выполнена успешно, вы увидите версию установленного Poetry, например: Poetry (version 1.7.1).

Для обеспечения изоляции Poetry от системного Python и предотвращения конфликтов зависимостей, инструмент по умолчанию создает виртуальные окружения в отдельном каталоге. Местоположение этого каталога зависит от операционной системы:

Windows: C:\Users\<username>\AppData\Local\pypoetry\Cache
macOS: /Users/<username>/Library/Caches/pypoetry
Linux: /home/<username>/.cache/pypoetry

Можно изменить это поведение с помощью конфигурации. Poetry предлагает гибкие возможности настройки через команду poetry config. Например, чтобы увидеть текущие настройки:

Bash
1
poetry config --list
Одна из важных настроек - расположение виртуальных окружений. По умолчанию они создаются в централизованном месте, но можно настроить создание окружений непосредственно в директории проекта:

Bash
1
poetry config virtualenvs.in-project true
Это полезно, если вы хотите держать все файлы проекта вместе или если используете системы контроля версий, которые ожидают определенную структуру проекта. Другие полезные настройки включают:

virtualenvs.path - изменяет местоположение папки с виртуальными окружениями,
cache-dir - указывает директорию для кэширования пакетов,
repositories - позволяет добавлять пользовательские репозитории пакетов.

Для работы в корпоративной среде с приватными репозиториями можно настроить Poetry на использование внутренних источников пакетов:

Bash
1
2
poetry config repositories.my-repo https://example.com/simple/
poetry config http-basic.my-repo username password
Poetry хранит свои настройки в конфигурационном файле, обычно расположенном в ~/.config/pypoetry/config.toml (на Unix-системах) или %APPDATA%\pypoetry\config.toml (на Windows). Этот файл использует формат TOML, который значительно улучшает читаемость по сравнению с традиционными форматами конфигурации.
При обновлении Poetry важно учитывать совместимость с существующими проектами. Наиболее безопасный способ обновления зависит от того, как был установлен инструмент:

Bash
1
2
3
4
5
6
7
8
9
10
11
# Для официального установщика
poetry self update
 
# Для pipx
pipx upgrade poetry
 
# Для pip
pip install -U poetry
 
# Для системных пакетов
sudo apt upgrade python3-poetry
При выборе способа установки Poetry необходимо учитывать особенности рабочего процесса. Если вы работаете в команде, где все используют разные операционные системы, стоит договориться об унифицированном подходе к установке и конфигурации Poetry. Это позволит избежать проблем с разными версиями инструмента и обеспечит идентичное поведение при работе с проектами.

Важный момент при работе с Poetry - его взаимодействие с различными версиями Python. По умолчанию Poetry использует ту версию Python, с которой он был установлен. Однако для конкретного проекта может потребоваться другая версия интерпретатора. Это легко настраивается с помощью команды:

Bash
1
poetry env use python3.9
Эта команда создаст новое виртуальное окружение с указанной версией Python. Можно также указать полный путь к интерпретатору, если в системе установлено несколько версий:

Bash
1
poetry env use /usr/local/bin/python3.9
Для просмотра информации о текущем окружении используйте:

Bash
1
poetry env info
А чтобы увидеть список всех окружений, связанных с проектом:

Bash
1
poetry env list
Иногда при работе с Poetry возникают типичные проблемы. Например, сертификационные ошибки при установке пакетов. Особенно это актуально для пользователей macOS, где может потребоваться установка корневых сертификатов для SSL-модуля Python:

Bash
1
open "/Applications/Python 3.12/Install Certificates.command"
Для пользователей Windows распространенной проблемой является отсутствие прав на запись в системные директории. В этом случае рекомендуется запускать командную строку или PowerShell с правами администратора или настроить Poetry на использование пользовательских директорий. При использовании Poetry в CI/CD системах часто требуется автоматизированная установка. Для этого можно включить официальный установщик в скрипты сборки. Например, для GitHub Actions подойдет такая конфигурация:

YAML
1
2
3
4
5
6
steps:
  - uses: actions/checkout@v3
  - name: Install Poetry
    run: curl -sSL [url]https://install.python-poetry.org[/url] | python3 -
  - name: Setup Poetry
    run: poetry config virtualenvs.in-project true
Poetry также позволяет управлять несколькими параллельными проектами с разными зависимостями без риска конфликтов. Это особенно ценно для разработчиков, работающих над несколькими проектами одновременно, поскольку устраняет печально известную проблему "работает на моей машине".

Pipenv vs Poetry vs Pyenv
Чем по функционалу эти среды отличаются друг от друга?

Распространение бинарных библиотек с зависимостями
Как правильно организовывать процесс? Вот я собрал модуль с бинарным расширением. Расширение компилируется с зависимостями от динамической...

Как сделать модель с уникальными зависимостями?
Ситауция такая. Есть несколько простых моделей: class TypeProfile(models.Model): &quot;&quot;&quot; Модель профиля &quot;&quot;&quot; title =...

Через requirements установка либы с зависимостями
Мне надо использовать django-phonenumber-field. Дока на либу: https://github.com/stefanfoulis/django-phonenumber-field Я поставил вот так: ...


Основной рабочий процесс



После успешной установки Poetry пора познакомиться с основным рабочим процессом. Создание нового проекта с Poetry существенно отличается от традиционного подхода в Python. Вместо ручного создания необходимых файлов и папок, Poetry предлагает готовые шаблоны, существенно упрощающие старт. Для создания нового проекта используется команда poetry new:

Bash
1
poetry new my-project
Эта команда создаст новый каталог с базовой структурой проекта:

Bash
1
2
3
4
5
6
7
my-project/
├── my_project/
│   └── __init__.py
├── tests/
│   └── __init__.py
├── pyproject.toml
└── README.md
Обратите внимание на автоматическое преобразование дефисов в названии проекта в подчеркивания для имени пакета, что соответствует соглашениям Python по именованию. Если вы предпочитаете альтернативную структуру проекта с исходным кодом в директории src/, можно использовать флаг --src:

Bash
1
poetry new --src my-project
Центральным элементом проекта Poetry является файл pyproject.toml. Это современная замена традиционным setup.py и requirements.txt. Базовая структура этого файла выглядит примерно так:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = ""
authors = ["Имя Автора <email@example.com>"]
readme = "README.md"
 
[tool.poetry.dependencies]
python = "^3.9"
 
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Секция [tool.poetry] содержит метаданные проекта, такие как название, версия, описание и авторы. Эта информация используется при публикации пакета в PyPI. В секции [tool.poetry.dependencies] перечисляются зависимости проекта. По умолчанию там есть только требование к версии Python, определенное на основе интерпретатора, который использовался при установке Poetry. Для добавления зависимостей используется команда poetry add:

Bash
1
poetry add requests
Эта команда выполняет сразу несколько действий:
1. Обновляет pyproject.toml, добавляя новую зависимость.
2. Анализирует совместимость с существующими зависимостями.
3. Устанавливает пакет и его зависимости в виртуальное окружение.
4. Обновляет файл poetry.lock с точными версиями всех пакетов.

В результате в pyproject.toml появится новая строка:

Code
1
2
3
[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.31.0"
Символ ^ перед версией указывает, что можно использовать любую совместимую версию, начиная с указанной и до следующей мажорной версии. Это соответствует семантическому версионированию, где изменения мажорной версии могут содержать несовместимые изменения API. Если требуется конкретная версия пакета, её можно указать:

Bash
1
poetry add requests==2.25.1
А для указания диапазона версий:

Bash
1
poetry add "requests>=2.24.0,<2.26.0"
Для удаления зависимости используется команда:

Bash
1
poetry remove requests
При этом удаляются не только сам пакет, но и его транзитивные зависимости, которые больше не требуются другим пакетам проекта.

Одним из главных преимуществ Poetry является интеллектуальное разрешение зависимостей. При добавлении нового пакета Poetry проверяет, совместимы ли его требования с уже установленными зависимостями. Если обнаружен конфликт, Poetry попытается найти набор версий, удовлетворяющий всем ограничениям, или выдаст понятную ошибку, если такого набора не существует. Результат разрешения зависимостей сохраняется в файле poetry.lock. Этот файл содержит точные версии всех пакетов, включая транзитивные зависимости, а также их контрольные суммы. Наличие lock-файла гарантирует, что все разработчики проекта получат идентичное окружение вне зависимости от того, когда и где они устанавливают зависимости.

Для установки зависимостей из существующего проекта используется команда:

Bash
1
poetry install
Если в проекте есть файл poetry.lock, то будут установлены точно те версии, которые указаны в нём. Если такого файла нет, Poetry сначала разрешит зависимости на основе pyproject.toml и создаст poetry.lock. Poetry позволяет группировать зависимости по их назначению. Например, можно выделить зависимости для разработки, тестирования или документации:

Bash
1
2
poetry add --group dev black flake8 mypy
poetry add --group test pytest pytest-cov
Эти группы будут отражены в pyproject.toml:

Code
1
2
3
4
5
6
7
8
[tool.poetry.group.dev.dependencies]
black = "^23.10.0"
flake8 = "^6.1.0"
mypy = "^1.6.1"
 
[tool.poetry.group.test.dependencies]
pytest = "^7.4.2"
pytest-cov = "^4.1.0"
По умолчанию при выполнении poetry install устанавливаются все группы зависимостей. Но можно установить только определенные группы:

Bash
1
poetry install --only main,dev
Или исключить некоторые группы:

Bash
1
poetry install --without dev,test
Группы также можно пометить как опциональные в pyproject.toml:

Code
1
2
3
4
5
[tool.poetry.group.docs]
optional = true
 
[tool.poetry.group.docs.dependencies]
sphinx = "^7.2.6"
Опциональные группы не устанавливаются автоматически, их нужно явно включить:

Bash
1
poetry install --with docs
В дополнение к группам, Poetry поддерживает концепцию "extras" - опциональных функций пакета, которые требуют дополнительных зависимостей. Например, можно определить "extra" для поддержки различных баз данных:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[tool.poetry.dependencies]
python = "^3.9"
sqlalchemy = "^2.0.21"
 
[tool.poetry.extras]
mysql = ["mysqlclient"]
postgresql = ["psycopg2-binary"]
 
[tool.poetry.dependencies.mysqlclient]
version = "^2.2.0"
optional = true
 
[tool.poetry.dependencies.psycopg2-binary]
version = "^2.9.9"
optional = true
Пользователи вашего пакета смогут устанавливать его с нужными "extras":

Bash
1
pip install my-package[mysql]
Для обновления зависимостей Poetry предоставляет команду:

Bash
1
poetry update
Эта команда обновит все пакеты до последних версий, соответствующих ограничениям в pyproject.toml, и обновит файл poetry.lock. Можно обновить только конкретные пакеты:

Bash
1
poetry update requests black
При необходимости экспортировать зависимости в формат requirements.txt, например, для CI/CD систем, не поддерживающих Poetry, можно использовать плагин export:

Bash
1
2
poetry self add poetry-plugin-export
poetry export -f requirements.txt --output requirements.txt
По умолчанию экспортируются только основные зависимости, но можно включить и группы разработки:

Bash
1
poetry export -f requirements.txt --output requirements-dev.txt --with dev
Иногда проекты могут потребовать работы с разными версиями Python. Poetry позволяет гибко управлять версиями интерпретатора для вашего проекта. В pyproject.toml версия Python обычно указывается с использованием синтаксиса ограничений:

Code
1
2
[tool.poetry.dependencies]
python = ">=3.8,<3.12"
Это ограничение определяет минимальную и максимальную поддерживаемые версии. При создании виртуального окружения Poetry попытается найти подходящую версию Python на вашем компьютере. Для явного указания версии Python, с которой должен работать проект, можно использовать команду:

Bash
1
poetry env use python3.10
Эта команда создаст новое виртуальное окружение с Python 3.10, если такая версия доступна в системе. Если у вас установлено несколько интерпретаторов, Poetry позволяет легко переключаться между ними:

Bash
1
2
poetry env list  # показать все доступные окружения
poetry env remove python3.9  # удалить окружение с Python 3.9
Полезной особенностью Poetry является возможность выполнять команды в контексте виртуального окружения без необходимости его явной активации. Для этого используется команда poetry run:

Bash
1
poetry run python -m pytest
Для интерактивной работы в активированном окружении можно использовать:

Bash
1
poetry shell
Это эквивалентно активации виртуального окружения в традиционном подходе, но работает кросс-платформенно.
При работе с существующими проектами, которые не были инициализированы с помощью Poetry, можно преобразовать их:

Bash
1
2
cd existing-project
poetry init
Poetry проведет интерактивный опрос, помогая настроить ваш pyproject.toml. После этого можно импортировать существующие зависимости из requirements.txt:

Bash
1
poetry add $(cat requirements.txt)
Правда, следует помнить, что этот подход добавит все пакеты как прямые зависимости, включая транзитивные, что не всегда желательно.
Если проект уже настроен с использованием Poetry, к нему можно легко присоединиться. Достаточно клонировать репозиторий и выполнить:

Bash
1
poetry install
При наличии файла poetry.lock будут установлены точно те же версии пакетов, что и у других участников проекта, обеспечивая полную воспроизводимость окружения.
Часто возникает необходимость выяснить, какие именно версии пакетов установлены или доступны. Poetry предоставляет команду show для изучения зависимостей:

Bash
1
2
3
4
poetry show  # список всех установленных пакетов
poetry show requests  # информация о конкретном пакете
poetry show --tree  # древовидное представление зависимостей
poetry show --latest  # проверить наличие обновлений
Эта команда особенно полезна для диагностики проблем с зависимостями и понимания структуры вашего проекта.

Одна из мощных возможностей Poetry – синхронизация окружения с зависимостями, объявленными в проекте. Со временем в виртуальном окружении могут накапливаться пакеты, которые больше не нужны. Команда:

Bash
1
poetry install --sync
Удалит все пакеты, которые не объявлены в pyproject.toml, обеспечивая чистоту окружения.

Иногда при работе с крупными проектами может потребоваться блокировка зависимостей без их установки. Это полезно в CI/CD пайплайнах или при подготовке релиза:

Bash
1
poetry lock --no-update
Эта команда проверит, что все зависимости разрешимы, и обновит poetry.lock, но не будет устанавливать пакеты.
Для тонкой настройки процесса разрешения зависимостей Poetry предлагает параметр solver-strategy в настройках, который определяет, как именно будут разрешаться конфликты версий:

Bash
1
poetry config solver.strategy=eager  # предпочитает новейшие версии
Альтернативная стратегия conservative предпочитает оставлять существующие зависимости неизменными минимизируя количество обновлений.

При создании библиотеки важно правильно определить её API. Poetry помогает в этом, позволяя указать публичные интерфейсы:

Bash
1
2
3
4
5
[tool.poetry.scripts]
my-command = "my_package.cli:main"  # консольные скрипты
 
[tool.poetry.plugins."my_package.plugins"]
plugin1 = "my_package.plugins:Plugin1"  # плагины
Секция scripts определяет консольные команды, которые будут созданы при установке пакета. Это удобный способ предоставить пользователям инструменты командной строки. Секция plugins позволяет определить [точки расширения](https://packaging.python.org/g... g-plugins/) – механизм, через который другие пакеты могут расширять функциональность вашей библиотеки.

Для проверки правильности настройки проекта Poetry предоставляет команду:

Bash
1
poetry check
Она проверяет pyproject.toml на наличие синтаксических ошибок и несоответствий.
Отдельного внимания заслуживает работа с приватными репозиториями. Если ваш проект зависит от пакетов, которые не опубликованы в публичных индексах, можно настроить дополнительные источники:

Bash
1
poetry source add private https://private.example.com/simple/
И затем указать, что некоторые пакеты должны устанавливаться из этого источника:

Code
1
2
3
4
5
6
7
8
[[tool.poetry.source]]
name = "private"
url = "https://private.example.com/simple/"
default = false
secondary = false
 
[tool.poetry.dependencies]
private-package = {version = "^1.0.0", source = "private"}
Это особенно полезно в корпоративной среде, где часто используются внутренние репозитории пакетов.

При разработке, особенно в командных проектах, крайне важно правильно управлять файлом poetry.lock. Этот файл фиксирует не только прямые зависимости, но и их транзитивные зависимости с точными версиями и хешами. Вопрос о том, следует ли добавлять этот файл в систему контроля версий, зависит от типа вашего проекта. Для приложений настоятельно рекомендуется фиксировать poetry.lock в репозитории. Это гарантирует, что все разработчики и среды развертывания будут использовать идентичные версии зависимостей, что снижает риск проблемы "у меня работает, а у тебя нет". Для библиотек ситуация иная. Поскольку библиотеки должны быть совместимы с различными окружениями, жесткая фиксация версий может создать проблемы. Обычно для библиотек рекомендуется добавлять poetry.lock в .gitignore.

При работе с ограничениями версий в pyproject.toml полезно понимать синтаксис Poetry:

^1.2.3 – совместимо с >=1.2.3,<2.0.0 (обновления в рамках мажорной версии),
~1.2.3 – совместимо с >=1.2.3,<1.3.0 (обновления только в патч-версии),
>=1.2.3,<1.5 – явный диапазон версий,
* – любая версия,
1.2.3 или ==1.2.3 – только конкретная версия.

Указание слишком строгих ограничений может привести к "dependency hell" (аду зависимостей), когда разные пакеты требуют несовместимые версии одной библиотеки. С другой стороны, слишком свободные ограничения могут привести к непредсказуемым поломкам при появлении новых версий. Золотое правило – указывать минимально необходимую версию и максимальную проверенную:

Code
1
2
[tool.poetry.dependencies]
requests = ">=2.25.0,<3.0.0"
При работе с локальными пакетами, например, в монорепозитории, Poetry позволяет добавлять зависимости прямо из файловой системы:

Bash
1
poetry add ../my-other-package/
Или с помощью прямой ссылки в pyproject.toml:

Code
1
2
[tool.poetry.dependencies]
my-package = {path = "../my-package/", develop = true}
Флаг develop = true устанавливает пакет в режиме разработки (как pip install -e), что позволяет изменениям в исходном коде немедленно отражаться без переустановки.

Для пакетов, находящихся в разработке или не опубликованных в PyPI, можно использовать Git-репозитории:

Code
1
2
[tool.poetry.dependencies]
my-package = {git = "https://github.com/username/my-package.git", rev = "main"}
Часто при разработке возникает необходимость временно переключиться на форк библиотеки или экспериментальную ветку. Poetry справляется с этим без необходимости вручную редактировать конфигурацию:

Bash
1
poetry add git+https://github.com/fork-username/package.git#branch_name
При выполнении команды poetry add используется алгоритм, который учитывает все ограничения версий и находит оптимальный набор пакетов. Этот процесс может занять некоторое время для сложных проектов с большим количеством зависимостей, но результат стоит ожидания – надежная и воспроизводимая среда разработки.

Продвинутые возможности



Poetry не ограничивается базовым управлением зависимостями — это многогранный инструмент с богатым набором продвинутых функций. Когда вы освоите основы, стоит погрузиться глубже, чтобы раскрыть полный потенциал этого инструмента.

Работа с виртуальными окружениями



Хотя мы уже затрагивали тему виртуальных окружений, стоит глубже рассмотреть их особенности в Poetry. По умолчанию Poetry создаёт виртуальные окружения в системном кэше, но существуют дополнительные возможности управления:

Bash
1
2
3
4
5
6
7
8
# Создание нового окружения с конкретной версией Python
poetry env use python3.8
 
# Просмотр информации о текущем окружении
poetry env info --path
 
# Удаление всех окружений проекта
poetry env remove --all
Poetry также может обнаруживать и использовать существующие виртуальные окружения. Если вы активировали окружение перед запуском команд Poetry, инструмент будет использовать это окружение вместо создания нового. Интересная особенность — создание нескольких окружений для одного проекта с разными версиями Python для тестирования совместимости:

Bash
1
2
3
4
5
6
7
8
9
# Создаём окружение для Python 3.8
poetry env use python3.8
poetry install
poetry run pytest
 
# Переключаемся на Python 3.11
poetry env use python3.11
poetry install
poetry run pytest

Публикация пакетов



Poetry значительно упрощает публикацию пакетов в PyPI или других репозиториях. Базовый процесс выглядит так:

Bash
1
2
3
4
5
# Сборка пакета
poetry build
 
# Публикация
poetry publish
Команда build создаёт дистрибутивы пакета в формате wheel и tar.gz в директории dist/. Команда publish отправляет эти дистрибутивы в репозиторий пакетов.
Если вам нужно опубликовать пакет в тестовом PyPI или приватном репозитории:

Bash
1
poetry publish --repository test-pypi
Для настройки репозитория:

Bash
1
2
poetry config repositories.test-pypi https://test.pypi.org/simple/
poetry config http-basic.test-pypi username password
Процесс публикации можно автоматизировать в CI/CD, используя токены API вместо паролей:

Bash
1
2
poetry config pypi-token.pypi my-token
poetry publish

Кэширование зависимостей и оптимизация сборки



Poetry кэширует установленные пакеты, что значительно ускоряет повторные установки. По умолчанию кэш находится в системной директории, но его местоположение можно изменить:

Bash
1
poetry config cache-dir /path/to/custom/cache
Для очистки кэша и освобождения места:

Bash
1
poetry cache clear --all pypi
Поддержка хэширования зависимостей — ещё одна мощная возможность Poetry. Хэши записываются в файл poetry.lock, что гарантирует целостность устанавливаемых пакетов:

Code
1
2
3
4
5
6
7
8
9
10
11
[[package]]
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
]
Для проектов с большим количеством зависимостей можно использовать ключ --no-dev при установке в продакшн-окружении, чтобы пропустить зависимости разработки:

Bash
1
poetry install --without dev

Стратегии оптимизации времени установки зависимостей



Решение задачи удовлетворения всех зависимостей иногда может занимать много времени, особенно в крупных проектах. Существуют стратегии оптимизации:

1. Предварительное разрешение зависимостей: Выполните poetry lock на мощной машине и зафиксируйте poetry.lock в репозитории.

2. Параллельная установка: Используйте флаг --parallel для одновременной установки нескольких пакетов:

Bash
1
poetry install --parallel
3. Использование оптимизированных образов: При работе в Docker создавайте многослойные образы с предустановленными зависимостями.

4. Избегайте избыточности: Регулярно проверяйте и чистите неиспользуемые зависимости:

Bash
1
poetry show --no-dev

Использование Poetry в контейнерах Docker



Интеграция Poetry в Docker-образы требует особого подхода. Вот оптимальный шаблон Dockerfile:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FROM python:3.11-slim as builder
 
RUN pip install poetry==1.7.1
 
WORKDIR /app
COPY pyproject.toml poetry.lock* ./
 
# Отключаем создание виртуального окружения внутри контейнера
RUN poetry config virtualenvs.create false \
    && poetry install --no-dev --no-interaction --no-ansi
 
FROM python:3.11-slim
 
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY . .
 
CMD ["python", "my_project/main.py"]
Этот подход использует многоэтапную сборку, минимизируя размер итогового образа. Флаг virtualenvs.create false отключает создание виртуального окружения, поскольку Docker-контейнер уже обеспечивает изоляцию.
Для оптимизации кэширования слоёв Docker, разделите копирование файлов:

Bash
1
2
3
4
5
6
# Копируем только файлы для установки зависимостей
COPY pyproject.toml poetry.lock* ./
RUN poetry install --no-dev
 
# Затем копируем код приложения
COPY . .
Это позволяет Docker кэшировать слой с установленными зависимостями, если изменился только код приложения, но не зависимости.

Интеграция с CI/CD



Poetry прекрасно подходит для использования в непрерывной интеграции. Пример конфигурации для GitHub Actions:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
          cache: 'pip'
      - name: Install Poetry
        run: |
          curl -sSL [url]https://install.python-poetry.org[/url] | python3 -
          echo "$HOME/.local/bin" >> $GITHUB_PATH
      - name: Cache Poetry dependencies
        uses: actions/cache@v3
        with:
          path: .venv
          key: poetry-${{ hashFiles('**/poetry.lock') }}
      - name: Install dependencies
        run: |
          poetry config virtualenvs.in-project true
          poetry install
      - name: Run tests
        run: poetry run pytest
Эта конфигурация включает кэширование как самого Poetry, так и установленных зависимостей, что значительно ускоряет выполнение CI.

Для GitLab CI/CD можно использовать похожий подход:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
test:
  image: python:3.11
  before_script:
    - pip install poetry
    - poetry config virtualenvs.in-project true
    - poetry install
  script:
    - poetry run pytest
  cache:
    key: poetry-$CI_COMMIT_REF_SLUG
    paths:
      - .venv
      - .cache/pip
Важно правильно настроить кэширование, чтобы не переустанавливать зависимости при каждом запуске CI.

Расширение функциональности Poetry через плагины



Начиная с версии 1.2.0, Poetry поддерживает систему плагинов, позволяющую расширять его функциональность. Некоторые полезные плагины:

1. poetry-plugin-export: Экспорт зависимостей в формат requirements.txt:

Bash
1
2
poetry self add poetry-plugin-export
poetry export -f requirements.txt -o requirements.txt
2. poetry-plugin-up: Улучшенное обновление зависимостей:

Bash
1
2
poetry self add poetry-plugin-up
poetry up
3. poetry-dynamic-versioning: Автоматическое управление версиями на основе тегов Git:

Bash
1
poetry self add poetry-dynamic-versioning
Затем в pyproject.toml:

Code
1
2
3
4
[tool.poetry-dynamic-versioning]
enable = true
vcs = "git"
style = "semver"
Вы также можете создавать собственные плагины, используя официальное API Poetry.

Использование Poetry с монорепозиториями



Монорепозитории, содержащие несколько связанных проектов, становятся все более популярными. Poetry предлагает несколько подходов к работе с ними:

1. Ссылки на локальные пакеты:

Code
1
2
[tool.poetry.dependencies]
my-internal-lib = {path = "../libs/my-internal-lib", develop = true}
Флаг develop = true означает, что пакет будет установлен в режиме разработки, и изменения в исходном коде будут сразу видны без переустановки.

2. Использование инструментов управления монорепозиториями таких как Pants, Bazel или Nx вместе с Poetry для каждого подпроекта.

3. Создание метапакета для управления всеми подпроектами:

Code
1
2
3
4
5
6
7
8
my-monorepo/
├── pyproject.toml  # метапакет
├── project-a/
│   └── pyproject.toml
├── project-b/
│   └── pyproject.toml
└── shared-lib/
    └── pyproject.toml
В метапакете:

Code
1
2
3
4
[tool.poetry.dependencies]
project-a = {path = "./project-a", develop = true}
project-b = {path = "./project-b", develop = true}
shared-lib = {path = "./shared-lib", develop = true}
Помимо перечисленных подходов к работе с монорепозиториями, существует еще одна интересная стратегия — использование Poetry Workspace. Хотя официально эта возможность пока не включена в стабильную версию Poetry, ведется активная работа над её реализацией. Она позволит объявлять подпроекты как части единого рабочего пространства, упрощая управление зависимостями между ними.

Продвинутое управление версиями



При работе над библиотекой важно правильно управлять версиями. Poetry предоставляет команду version, которая помогает автоматизировать этот процесс:

Bash
1
2
3
4
5
6
7
8
9
10
11
# Увеличение патч-версии (1.0.0 -> 1.0.1)
poetry version patch
 
# Увеличение минорной версии (1.0.0 -> 1.1.0)
poetry version minor
 
# Увеличение мажорной версии (1.0.0 -> 2.0.0)
poetry version major
 
# Установка конкретной версии
poetry version 1.5.2
В сочетании с упомянутым ранее плагином dynamic-versioning это создает мощную систему управления версиями, особенно при интеграции с Git-тегами.

Тонкая настройка виртуальных окружений



Хотя основы работы с виртуальными окружениями были рассмотрены, есть несколько дополнительных параметров конфигурации:

Bash
1
2
3
4
5
6
7
8
# Изменение пути хранения окружений
poetry config virtualenvs.path /custom/path
 
# Отображение пути к активированному окружению
poetry env info --path
 
# Запрет создания виртуальных окружений
poetry config virtualenvs.create false
Для разработчиков, использующих нестандартные интерпретаторы Python (например, PyPy или специализированные сборки), Poetry позволяет явно указать путь к исполняемому файлу:

Bash
1
poetry env use /path/to/custom/python

Безопасность зависимостей



С ростом числа атак на цепочки поставок программного обеспечения, безопасность зависимостей становится критически важной. Poetry предлагает несколько механизмов для минимизации рисков:

1. Верификация хэшей: Poetry автоматически проверяет хэши загруженных пакетов против значений в poetry.lock, что защищает от подмены пакетов.

2. Интеграция с инструментами аудита безопасности: Можно использовать инструменты вроде Safety или Snyk в сочетании с Poetry:

Bash
1
poetry export -f requirements.txt | safety check --stdin
3. Использование приватных индексов: Для корпоративных проектов рекомендуется настроить зеркало PyPI или приватный индекс с проверенными пакетами.

4. Ограничение транзитивных зависимостей: Можно использовать технику "dependency pinning" для явного контроля над всеми зависимостями:

Code
1
2
3
4
5
6
[tool.poetry.dependencies]
requests = {version = "^2.31.0", extras = ["security"]}
 
# Явно указываем версии транзитивных зависимостей
urllib3 = "^2.0.0"
certifi = "^2023.7.22"
Важно регулярно обновлять зависимости для устранения известных уязвимостей, но делать это контролируемым образом. Инструмент poetry audit (через плагин) помогает выявлять проблемные зависимости.

Отладка проблем с зависимостями



При возникновении проблем с разрешением зависимостей Poetry предлагает несколько инструментов для диагностики:

Bash
1
2
3
4
5
# Получение подробной информации
poetry install -v
 
# Вывод максимально детальной информации
poetry install -vvv
Флаг -v (verbose) показывает больше информации о процессе установки, а -vvv выводит максимально детальные логи, включая информацию о процессе разрешения зависимостей.

Если возникают конфликты, которые Poetry не может разрешить автоматически, команда show поможет понять, какие пакеты их вызывают:

Bash
1
poetry show --tree
Иногда может потребоваться сбросить кэш Poetry для устранения проблем:

Bash
1
poetry cache clear --all pypi

Обработка данных и ресурсов проекта



При создании пакетов часто требуется включать неисполняемые файлы — конфигурации, шаблоны, данные. Poetry позволяет указать включаемые файлы в pyproject.toml:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
[tool.poetry]
name = "my-package"
version = "1.0.0"
[H2]...[/H2]
 
include = [
  "data/*.json",
  "templates/**/*.html",
]
exclude = [
  "tests/",
  "docs/",
]
Для динамического доступа к этим ресурсам в коде можно использовать importlib.resources (в Python 3.7+) или пакет importlib_resources для более ранних версий.

Поддержка Jupyter Notebooks



Для проектов с Jupyter Notebooks Poetry также предлагает удобные возможности. После установки зависимостей можно зарегистрировать виртуальное окружение как ядро Jupyter:

Bash
1
2
poetry add jupyter ipykernel
poetry run python -m ipykernel install --user --name=my-project
После этого виртуальное окружение Poetry будет доступно как отдельное ядро в Jupyter, что обеспечит доступ ко всем установленным зависимостям проекта.
Для упрощения запуска Jupyter из окружения Poetry можно добавить скрипт в секцию [tool.poetry.scripts]:

Code
1
2
3
[tool.poetry.scripts]
notebook = "jupyter:notebook"
lab = "jupyter:lab"
Теперь можно запускать Jupyter простой командой:

Bash
1
poetry run notebook

Сравнение с альтернативами



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

Poetry vs Pip



Pip — стандартный и наиболее распространённый инструмент для установки пакетов в Python. Сравнивая его с Poetry, можно выделить ключевые различия:

Разрешение зависимостей: Pip устанавливает пакеты последовательно, не учитывая потенциальные конфликты, возникающие между транзитивными зависимостями. Poetry анализирует весь граф зависимостей и находит комбинацию версий, удовлетворяющую всем ограничениям.

Версионирование: Pip работает с явно указанными версиями в requirements.txt, но не имеет встроенного механизма для работы с семантическим версионированием. Poetry позволяет указывать диапазоны совместимых версий.

Виртуальные окружения: Pip требует отдельного инструмента для создания виртуальных окружений (venv, virtualenv), тогда как Poetry управляет ими автоматически.

Метаданные проекта: При использовании pip требуется отдельно настраивать setup.py и requirements.txt, в то время как Poetry объединяет всё в pyproject.toml.

Типичный рабочий процесс с pip выглядит так:

Bash
1
2
3
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
В то время как с Poetry достаточно:

Bash
1
poetry install

Poetry vs Pipenv



Pipenv был создан с той же целью, что и Poetry — объединить управление виртуальными окружениями и зависимостями. Основные отличия:

Формат файлов: Pipenv использует Pipfile и Pipfile.lock, которые менее гибкие по сравнению с поддерживаемым PEP 518 pyproject.toml в Poetry.

Публикация пакетов: Poetry предлагает встроенные команды для сборки и публикации пакетов, чего нет в Pipenv.

Производительность: Многие пользователи отмечают, что Poetry работает быстрее при разрешении зависимостей, особенно в проектах с большим количеством библиотек.

Группы зависимостей: Poetry позволяет определять произвольные группы зависимостей, в то время как Pipenv ограничен разделением на основные и разработческие зависимости.

Poetry vs Conda



Conda — мощная система управления пакетами и окружениями, популярная в мире науки о данных. В отличие от Poetry, Conda:

Управляет не только Python-пакетами, но и библиотеками на C/C++, R-пакетами и другими системными зависимостями. Это делает её незаменимой для проектов, требующих сложных научных библиотек.

Использует собственный формат пакетов вместо wheel/sdist, что обеспечивает более предсказуемую работу на разных платформах.

Управляет самой Python-средой, позволяя легко переключаться между различными версиями интерпретатора без необходимости их отдельной установки.

При этом Poetry выигрывает в:
  • Интеграции с экосистемой PyPI.
  • Упрощённом рабочем процессе для стандартных Python-проектов.
  • Соответствии современным стандартам упаковки Python.

Сравнение производительности



При сравнении скорости работы различных инструментов управления зависимостями, производительность может существенно отличаться в зависимости от сценария:

Первоначальная установка: Conda обычно работает медленнее из-за необходимости разрешать зависимости для бинарных пакетов, в то время как Poetry и pip с предварительно запиненными версиями работают быстрее.

Разрешение зависимостей: Poetry использует более эффективный алгоритм разрешения, чем Pipenv, что заметно на проектах с большим количеством зависимостей.

Кэширование: Все инструменты используют кэширование, но Poetry и Conda обеспечивают более эффективное повторное использование кэша.

Когда Poetry может не подойти



Несмотря на все преимущества, Poetry не является универсальным решением. Вот некоторые случаи, когда стоит рассмотреть альтернативы:

Научные проекты с нестандартными зависимостями: Если ваш проект требует сложных нативных библиотек или зависимостей за пределами PyPI, Conda может быть более подходящим выбором.

Корпоративная среда с устоявшимися процессами: В организациях с существующими пайплайнами CI/CD и процессами, основанными на pip и requirements.txt, переход на Poetry может создать дополнительную сложность.

Простые скрипты или прототипы: Для небольших проектов или быстрых экспериментов Poetry может оказаться излишне сложным.

Проекты с экзотическими системами сборки: Если ваш проект использует кастомные шаги сборки или редко встречающиеся инструменты, интеграция с Poetry может потребовать дополнительных усилий.

Каждый инструмент имеет свою нишу, и выбор между ними должен основываться на конкретных требованиях проекта, предпочтениях команды и уже существующих рабочих процессах. Poetry отлично подходит для большинства стандартных Python-проектов, предлагая современный и удобный подход к управлению зависимостями, но в некоторых специфических случаях другие инструменты могут оказаться более подходящими.

Практические рекомендации и хитрости



Работая с Poetry в повседневных проектах, разработчики сталкиваются с различными ситуациями, требующими нестандартных решений. Рассмотрим несколько практических советов, которые помогут избежать типичных проблем и расширят возможности использования этого инструмента.

Решение типичных проблем



Конфликты зависимостей

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

Bash
1
poetry show --tree
Эта команда показывает древовидную структуру зависимостей, что помогает выявить конфликтующие пакеты. После обнаружения проблемы можно:

1. Скорректировать ограничения версий в pyproject.toml.
2. Временно ослабить ограничения одной из зависимостей.
3. Найти альтернативные пакеты с более совместимыми требованиями.

Проблемы с кэшем Poetry

Сбои в кэше могут вызывать странные ошибки при установке пакетов. Если вы столкнулись с необъяснимыми проблемами, попробуйте очистить кэш:

Bash
1
poetry cache clear --all pypi
Ошибки при использовании приватных репозиториев

При работе с приватными источниками пакетов иногда возникают проблемы аутентификации. Убедитесь, что правильно настроили учетные данные:

Bash
1
poetry config http-basic.my-repo username password
Для более безопасного хранения учетных данных используйте переменные окружения:

Bash
1
2
export POETRY_HTTP_BASIC_MY_REPO_USERNAME=username
export POETRY_HTTP_BASIC_MY_REPO_PASSWORD=password

Нестандартные сценарии использования



Работа с локальными зависимостями в разработке

Для библиотек, над которыми вы активно работаете, удобно использовать локальные пути вместо версий из PyPI:

Code
1
2
[tool.poetry.dependencies]
my-package = {path = "../my-package/", develop = true}
Параметр develop = true устанавливает пакет в режиме разработки, что позволяет изменениям сразу же отражаться без переустановки.

Временная замена зависимости форком

Иногда требуется использовать форк библиотеки с исправлением, которое еще не попало в основную версию:

Bash
1
poetry add git+https://github.com/user/forked-package.git#branch-with-fix
Когда исправление войдет в официальный релиз, можно вернуться к версии из PyPI:

Bash
1
poetry add forked-package --source pypi
Создание пользовательских скриптов

Poetry позволяет определять команды, которые будут доступны после установки пакета:

Code
1
2
3
[tool.poetry.scripts]
start-app = "my_package.cli:main"
db-migrate = "my_package.db:migrate"
Такие скрипты могут быть вызваны как во время разработки через poetry run start-app, так и после установки пакета простым start-app.

Миграция существующих проектов на Poetry



Перевод существующего проекта на Poetry может значительно упростить управление зависимостями. Вот пошаговая стратегия:

1. Инициализация Poetry в существующем проекте:

Bash
1
2
cd my-existing-project
poetry init
2. Конвертация requirements.txt в зависимости Poetry:

Для простого импорта всех зависимостей:

Bash
1
poetry add $(cat requirements.txt)
Но это добавит все пакеты как прямые зависимости, включая транзитивные. Более правильный подход — анализировать фактические импорты в коде и добавлять только прямые зависимости.

3. Разделение зависимостей по группам:

Проанализируйте требования и разделите их на логические группы:

Bash
1
2
poetry add requests pandas  # основные зависимости
poetry add --group dev black pytest  # инструменты разработки
4. Тестирование окружения:

Bash
1
2
poetry install
poetry run pytest
Важно проверить, что все тесты проходят в новом окружении, управляемом Poetry.

Интеграция с IDE и редакторами



Visual Studio Code

VS Code хорошо работает с Poetry через расширение Python. Чтобы использовать окружение Poetry:

1. Создайте проект и установите зависимости: poetry install,
2. Получите путь к окружению: poetry env info --path,
3. В VS Code: Command Palette → Python: Select Interpreter → Enter interpreter path → Укажите путь /.../bin/python из предыдущего шага.

Альтернативно настройте Poetry для создания окружений внутри проекта:

Bash
1
poetry config virtualenvs.in-project true
После этого VS Code автоматически обнаружит виртуальное окружение в папке .venv.

PyCharm

PyCharm Professional имеет встроенную поддержку Poetry:

1. Settings → Project → Python Interpreter → Add → Poetry Environment
2. Выберите существующее окружение или создайте новое

В PyCharm Community Edition потребуется ручная настройка:

1. Получите путь к интерпретатору: poetry env info --path
2. Settings → Project → Python Interpreter → Add → Existing Environment
3. Укажите путь к интерпретатору из первого шага

Neovim/Vim

Для интеграции с Neovim можно использовать plugins вроде pyright или coc.nvim:

1. Настройте Poetry для создания окружений в проекте: poetry config virtualenvs.in-project true,
2. Создайте окружение: poetry install,
3. Плагины автоматически обнаружат .venv директорию.

Отладка и диагностика



При возникновении сложных проблем с зависимостями, Poetry предлагает несколько инструментов диагностики:

Bash
1
2
3
4
5
6
7
8
# Подробный вывод при установке
poetry install -vvv
 
# Проверка наличия проблем в pyproject.toml
poetry check
 
# Визуализация графа зависимостей
poetry show --tree
Для эффективной работы с Poetry в крупных проектах полезно настроить пре-коммит хуки, проверяющие актуальность зависимостей:

Bash
1
2
3
4
5
6
# В .pre-commit-config.yaml
repo: https://github.com/python-poetry/poetry
  rev: '1.7.1'
  hooks:
    - id: poetry-check
    - id: poetry-lock
Это поможет обнаружить несоответствия между pyproject.toml и poetry.lock до коммита.

Автоматизация версионирования



Для автоматического увеличения версии проекта можно использовать Git хуки. Например, в хуке pre-push:

Bash
1
2
3
4
5
#!/bin/bash
# Увеличение патч-версии при каждом пуше
poetry version patch
git add pyproject.toml
git commit -m "Bump version"

Организация монорепозитория с Poetry



При работе с монорепозиторием полезный паттерн — создание метапакета с общими инструментами:

Bash
1
2
3
4
5
6
7
8
# shared/pyproject.toml
[tool.poetry.dependencies]
python = "^3.10"
shared-utils = {path = "../shared-utils", develop = true}
 
[tool.poetry.dev-dependencies]
black = "^23.10.0"
flake8 = "^6.1.0"
Затем в каждом проекте можно ссылаться на этот мета-пакет:

Bash
1
2
3
4
# project-a/pyproject.toml
[tool.poetry.dependencies]
python = "^3.10"
shared = {path = "../shared", develop = true}

Работа с Poetry в Docker



При создании многослойных Docker-образов используйте раздельное копирование зависимостей:

Bash
1
2
3
4
5
6
# Сначала копируем и устанавливаем зависимости
COPY pyproject.toml poetry.lock ./
RUN poetry export -f requirements.txt | pip install -r /dev/stdin
 
# Затем копируем код
COPY . .
Это позволит кэшировать слой с зависимостями, если изменился только код приложения.

Поддержка разных версий Python



Для проектов, которые должны поддерживать несколько версий Python, используйте GitHub Actions для тестирования:

YAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11"]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install poetry
      - run: poetry install
      - run: poetry run pytest
Этот подход гарантирует совместимость с указанными версиями Python и позволяет своевременно выявлять проблемы.

Перенос проекта на Github вместе со всеми зависимостями
Создаю проект на питоне, для работы нужна библиотека X. pip install X Проект работат, проходит время и библиотека Х перестает поддерживаться и не...

Распознавание лиц: Python + Arduino (Управление Servo+Arduino из Python+OpenCV)
Приветствую всех ГУРУ и тех кому не безразлична данная тема. Пытаюсь сделать трекер лица Python+OpenCV --&gt; Arduino+Servo Для Ардуино...

Управление приложениями через Python
здравствуйте. каким образом можно управлять различными программами через питон. хочу написать программу для смарта для удаленного управления...

Python daemon управление GPIO
Делаю робота на базе одноплатника NanoPi2, опарационка Debian Примеров довольно мало поэтому приходится колхозить. Требуется сделать программный...

Управление потоками в Python
С использованием многопоточности для заданного значения найти сумму ряда с точностью члена ряда по абсолютному значению ε= 10^-7 и...

Управление потоками в Python
С использованием многопоточности для заданного значения найти сумму ряда с точностью члена ряда по абсолютному значению ε= 10^-7 и произвести...

Управление потоками в Python(2)
С использованием многопоточности для заданного значения найти сумму ряда с точностью члена ряда по абсолютному значению ε= 10^-7 и произвести...

Управление музыкой Windows через Python
Пишу утилиту управления музыкой, которая работает на Python. Подскажите пожалуйста, как возможно поставить на паузу? Включить воспроизведение? На...

Управление несколькими версиями Python
Доброго дня. Есть сервер Debian 5.10.46-5 На него поставил python3.11. При создание виртуального окружения появляются проблемы ...

Управление python приложением через сайт
Здравствуйте, тут вроде как и python, так и серверная часть, поэтому не знал точно в какой теме задавать вопрос. Появилась идея сделать один проект....

Как из Python скрипта выполнить другой python скрипт?
Как из Python скрипта выполнить другой python скрипт? Если он находится в той же папке но нужно передать еще передать скрипту аргументы.

Почему синтаксис Python 2.* и Python 3.* так отличается?
Привет! Решил на досуге заняться изучением Python'a. Читаю книгу по второму питону, а пользуюсь третьим. Некоторые вещи приходится гуглить, потому...

Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru