Установка библиотек: Python, Java и Go

На платформе Bothost боты собираются в Docker-контейнерах. Зависимости устанавливаются автоматически при сборке образа, если в репозитории есть стандартные файлы зависимостей. В этом руководстве описано, как добавить библиотеки для проектов на Python, Java и Go.

Python

Файлы зависимостей

Платформа распознаёт следующие файлы:
ФайлОписание
requirements.txtСписок пакетов pip (основной способ)
pyproject.tomlСовременный формат (PEP 518), поддерживается для определения версии Python и зависимостей

requirements.txt

Добавьте в корень репозитория файл requirements.txt. При сборке выполняется:
pip install --no-cache-dir -r requirements.txt
Пример requirements.txt:
aiogram>=3.0.0
aiohttp
python-dotenv
С указанием версий (рекомендуется для стабильной сборки):
aiogram==3.2.0
aiohttp==3.9.0
python-dotenv==1.0.0

pyproject.toml

Для проектов с pyproject.toml укажите зависимости в секции [project]:
[project]
name = "my-bot"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "aiogram>=3.0.0",
    "aiohttp",
    "python-dotenv",
]
Платформа может определять версию Python из requires-python и устанавливать пакеты через pip install . или pip install -e . при наличии соответствующего Dockerfile.

Рекомендации для Python

  • Храните requirements.txt или pyproject.toml в корне репозитория.
  • Фиксируйте версии в продакшене (package==1.2.3), чтобы сборки были воспроизводимы.
  • Не коммитьте виртуальное окружение (папки venv, .venv) в Git.

Java

Для Java-ботов зависимости задаются через Maven (pom.xml) или Gradle (build.gradle / build.gradle.kts). Сборка выполняется внутри Docker-образа.

Maven (pom.xml)

Добавьте в корень проекта файл pom.xml с зависимостями в :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.example</groupId>
    <artifactId>telegram-bot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- Telegram Bot API -->
        <dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots</artifactId>
            <version>6.8.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>ru.example.BotMain</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
При сборке образа обычно выполняется:
mvn clean package -DskipTests
Исполняемый JAR будет в target/*.jar. В Dockerfile команда запуска указывает на этот JAR.

Gradle (build.gradle)

Пример build.gradle (Kotlin DSL — build.gradle.kts):
plugins {
    id 'java'
    id 'application'
}

group = 'ru.example'
version = '1.0-SNAPSHOT'

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.telegram:telegrambots:6.8.0'
}

application {
    mainClass = 'ru.example.BotMain'
}

jar {
    manifest {
        attributes 'Main-Class': 'ru.example.BotMain'
    }
}
При сборке:
./gradlew build
# или для fat JAR:
./gradlew shadowJar   # при использовании плагина shadow

Рекомендации для Java

  • Держите pom.xml или build.gradle в корне репозитория.
  • Указывайте конкретные версии зависимостей для предсказуемых сборок.
  • В Dockerfile используйте образ с Maven или Gradle, либо многоэтапную сборку (build stage → runtime stage с JRE).

Go

Зависимости в Go описываются в go.mod (и при необходимости в go.sum). Модуль должен находиться в корне репозитория.

go.mod

Инициализация модуля (если ещё нет go.mod):
go mod init github.com/username/my-bot
Пример go.mod:
module github.com/username/telegram-bot

go 1.21

require (
    github.com/go-telegram-bot-api/telegram-bot-api/v5 v5.5.1
)
После добавления импортов в код выполните:
go mod tidy
Это обновит go.mod и создаст/обновит go.sum.

Сборка в Docker

Типичные шаги в Dockerfile для Go:
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /bot .

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=builder /bot .
CMD ["./bot"]
Платформа может определять версию Go по директиве go в go.mod и использовать её при сборке образа.

Рекомендации для Go

  • Храните go.mod и go.sum в корне репозитория и коммитьте оба файла.
  • Используйте go mod tidy перед коммитом, чтобы зависимости были согласованы.
  • Для минимального образа используйте многоэтапную сборку и статическую линковку (CGO_ENABLED=0).

Краткая сводка

ЯзыкФайл зависимостейКоманда установки / сборки
Pythonrequirements.txtpip install -r requirements.txt
Pythonpyproject.tomlЗависит от Dockerfile (pip/poetry)
Javapom.xml (Maven)mvn clean package
Javabuild.gradle (Gradle)./gradlew build
Gogo.mod + go.sumgo mod download && go build
Убедитесь, что выбранный файл зависимостей лежит в корне репозитория и закоммичен в Git — тогда при деплое на Bothost зависимости будут установлены или собраны в рамках сборки Docker-образа.

См. также