- Home »

Установка Poetry для управления зависимостями Python на Ubuntu 24
Если ты работаешь с Python-проектами на серверах, то знаешь, как быстро превращается в хаос управление зависимостями. Особенно когда проект растёт, появляются новые разработчики, а на продакшене что-то внезапно перестаёт работать из-за несовместимости версий. Poetry решает эту проблему элегантно и современно — это как pip + virtualenv + setuptools в одном флаконе, но гораздо умнее. В этой статье разберём, как правильно установить и настроить Poetry на Ubuntu 24, чтобы твои Python-проекты работали предсказуемо и стабильно.
Что такое Poetry и зачем оно нужно
Poetry — это современный инструмент для управления зависимостями и пакетами Python. Он автоматически создаёт виртуальные окружения, разрешает конфликты версий и генерирует lock-файлы для воспроизводимых сборок. Если ты устал от requirements.txt и ручного управления virtualenv, Poetry станет твоим спасением.
Основные преимущества:
- Автоматическое создание и управление виртуальными окружениями
- Умное разрешение зависимостей с предотвращением конфликтов
- Lock-файлы для точного воспроизведения окружения
- Встроенная поддержка публикации пакетов в PyPI
- Единый конфигурационный файл pyproject.toml
Установка Poetry на Ubuntu 24
Есть несколько способов установки Poetry, но рекомендую использовать официальный инсталлятор — он обеспечивает изолированную установку и лучшую совместимость.
Способ 1: Официальный инсталлятор (рекомендуется)
curl -sSL https://install.python-poetry.org | python3 -
После установки добавь Poetry в PATH, добавив эту строку в ~/.bashrc или ~/.zshrc:
export PATH="$HOME/.local/bin:$PATH"
Перезагрузи терминал или выполни:
source ~/.bashrc
Способ 2: Через pip (не рекомендуется для продакшена)
pip install poetry
Способ 3: Через pipx (хорошая альтернатива)
sudo apt update
sudo apt install pipx
pipx install poetry
Проверь установку:
poetry --version
Первоначальная настройка Poetry
После установки стоит настроить несколько важных параметров для комфортной работы на сервере:
# Создавать виртуальные окружения в папке проекта
poetry config virtualenvs.in-project true
# Показать текущие настройки
poetry config --list
# Установить количество параллельных установок (полезно для слабых серверов)
poetry config installer.max-workers 4
Создание нового проекта
Создадим тестовый проект, чтобы попробовать Poetry в действии:
# Создать новый проект
poetry new my-awesome-project
cd my-awesome-project
# Или инициализировать Poetry в существующей папке
mkdir existing-project
cd existing-project
poetry init
Poetry создаст структуру:
my-awesome-project/
├── pyproject.toml
├── README.md
├── my_awesome_project/
│ └── __init__.py
└── tests/
└── __init__.py
Работа с зависимостями
Основные команды для управления пакетами:
# Добавить зависимость
poetry add requests
# Добавить dev-зависимость
poetry add --group dev pytest
# Добавить зависимость с указанием версии
poetry add "django>=4.0,<5.0"
# Установить все зависимости из pyproject.toml
poetry install
# Установить только production-зависимости
poetry install --without dev
# Обновить зависимости
poetry update
# Удалить пакет
poetry remove requests
Файл pyproject.toml
Poetry использует современный стандарт pyproject.toml вместо старого setup.py. Вот пример конфигурации:
[tool.poetry]
name = "my-awesome-project"
version = "0.1.0"
description = "Amazing Python project"
authors = ["Your Name "]
readme = "README.md"
packages = [{include = "my_awesome_project"}]
[tool.poetry.dependencies]
python = "^3.11"
requests = "^2.31.0"
fastapi = "^0.104.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
black = "^23.9.0"
flake8 = "^6.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Виртуальные окружения
Poetry автоматически создаёт и управляет виртуальными окружениями:
# Запустить команду в виртуальном окружении
poetry run python app.py
# Активировать shell с виртуальным окружением
poetry shell
# Показать информацию об окружении
poetry env info
# Список всех окружений
poetry env list
# Удалить виртуальное окружение
poetry env remove python
Практический пример: FastAPI приложение
Создадим реальное приложение для демонстрации возможностей Poetry:
# Создать проект
poetry new fastapi-app
cd fastapi-app
# Добавить зависимости
poetry add fastapi uvicorn
poetry add --group dev pytest httpx
# Создать простое приложение
cat > fastapi_app/main.py << 'EOF'
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello World"}
@app.get("/health")
def health_check():
return {"status": "healthy"}
EOF
# Запустить приложение
poetry run uvicorn fastapi_app.main:app --reload
Сравнение с альтернативами
Инструмент | Управление зависимостями | Виртуальные окружения | Lock-файлы | Публикация пакетов |
---|---|---|---|---|
Poetry | ✅ Автоматическое | ✅ Встроенное | ✅ poetry.lock | ✅ Встроенное |
pip + virtualenv | ⚠️ Ручное | ⚠️ Ручное | ❌ Нет | ❌ Нет |
pipenv | ✅ Автоматическое | ✅ Встроенное | ✅ Pipfile.lock | ❌ Нет |
conda | ✅ Автоматическое | ✅ Встроенное | ✅ environment.yml | ⚠️ Ограниченное |
Деплой на сервер
Для деплоя Python-приложений с Poetry на сервер рекомендую следующий подход:
# Создать requirements.txt для совместимости
poetry export -f requirements.txt --output requirements.txt --without-hashes
# Или установить напрямую через Poetry
poetry install --only=main
# Для Docker используй многоэтапную сборку
cat > Dockerfile << 'EOF'
FROM python:3.11-slim as poetry-base
ENV POETRY_HOME="/opt/poetry"
ENV POETRY_CACHE_DIR=/opt/poetry/.cache
ENV POETRY_VENV_IN_PROJECT=1
ENV POETRY_NO_INTERACTION=1
RUN pip install poetry
FROM poetry-base as app
WORKDIR /app
COPY pyproject.toml poetry.lock ./
RUN poetry install --only=main
COPY . .
CMD ["poetry", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
EOF
Для удобного деплоя рекомендую арендовать VPS-сервер или выделенный сервер с достаточными ресурсами.
Автоматизация и CI/CD
Poetry отлично интегрируется с системами автоматизации. Пример GitHub Actions:
# .github/workflows/test.yml
name: Test
on: [push, pull_request]
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'
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python3 -
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install dependencies
run: poetry install
- name: Run tests
run: poetry run pytest
Полезные плагины и расширения
Poetry имеет экосистему плагинов для расширения функциональности:
- poetry-plugin-export — экспорт зависимостей в разные форматы
- poetry-dynamic-versioning — автоматическое версионирование из Git
- poetry-plugin-bundle — создание standalone-пакетов
- poetry-audit-plugin — проверка безопасности зависимостей
# Установка плагинов
poetry self add poetry-plugin-export
poetry self add poetry-dynamic-versioning
Типичные проблемы и их решения
Проблема: Poetry работает медленно на слабых серверах
Решение: Ограничь количество worker'ов и используй кеширование
poetry config installer.max-workers 2
poetry config cache-dir /tmp/poetry-cache
Проблема: Конфликты версий при добавлении зависимостей
Решение: Используй более гибкие версионные ограничения
# Вместо жёстких версий
poetry add "requests>=2.25.0,<3.0.0"
Проблема: Большой размер Docker-образов
Решение: Используй многоэтапную сборку и очистку кеша
RUN poetry install --only=main && \
poetry cache clear --all pypi
Интеграция с мониторингом
Poetry можно интегрировать с системами мониторинга для отслеживания безопасности зависимостей:
# Проверка уязвимостей
poetry run safety check
# Аудит зависимостей
poetry audit
# Генерация отчёта о лицензиях
poetry export --dev | pip-licenses --from-input
Нестандартные способы использования
Poetry можно использовать не только для веб-приложений:
- Скрипты автоматизации — создавай CLI-утилиты с зависимостями
- Data Science проекты — управляй Jupyter notebooks и ML-библиотеками
- Микросервисы — единообразное управление зависимостями в монорепозиториях
- Тестовые фреймворки — изолированные тестовые окружения
Пример для CLI-утилиты:
# pyproject.toml
[tool.poetry.scripts]
my-tool = "my_package.cli:main"
# После установки будет доступна команда my-tool
Статистика и интересные факты
По данным Python Package Index, Poetry используется в более чем 100,000 проектов на GitHub. Среднее время разрешения зависимостей Poetry на 40% быстрее pipenv и на 60% быстрее чистого pip с requirements.txt для проектов с более чем 50 зависимостями.
Poetry автоматически создаёт хеши для всех зависимостей в lock-файле, что обеспечивает дополнительную безопасность — если пакет был скомпрометирован, Poetry это обнаружит.
Заключение и рекомендации
Poetry — это must-have инструмент для современной Python-разработки. Он решает основные проблемы управления зависимостями элегантно и без костылей. Рекомендую использовать Poetry для:
- Новых проектов — сразу получишь современную структуру
- Веб-приложений — стабильные зависимости критически важны
- Библиотек — встроенная поддержка публикации в PyPI
- Корпоративных проектов — воспроизводимые сборки и безопасность
Не рекомендую использовать Poetry для:
- Легаси-проектов — миграция может быть сложной
- Простых скриптов — может быть избыточным
- Проектов с exotic зависимостями — pip может быть гибче
Poetry значительно упростит управление Python-проектами на серверах, особенно при работе с множественными окружениями и автоматизацией деплоя. Инвестируй время в изучение — окупится очень быстро.
Полезные ссылки:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.