# setup.cfg

В ROS2 и Python-пакетах файлы **`package.xml`** и **`setup.cfg`** играют ключевую роль в настройке, сборке и управлении зависимостями. Разберем их назначение подробно.

***

#### **1. `package.xml`**

Это основной файл метаданных для пакета ROS2. Он содержит информацию о пакете, его зависимостях и условиях использования.\
**Для чего нужен**:

**a. Идентификация пакета**

* Указывает **название**, **версию**, **автора**, **описание** и **лицензию**:

  ```xml
  <name>my_package</name>
  <version>1.0.0</version>
  <description>Мой пакет для работы с ROS2</description>
  <maintainer email="you@email.com">Your Name</maintainer>
  <license>Apache-2.0</license>
  ```

**b. Управление зависимостями**

* Задает зависимости для **сборки** (`<build_depend>`) и **запуска** (`<exec_depend>`).\
  Пример для ROS2 Python-пакета:

  ```xml
  <depend>rclpy</depend>          <!-- Зависимость для работы с ROS2 на Python -->
  <depend>std_msgs</depend>       <!-- Для использования стандартных сообщений -->
  <exec_depend>ament_python</exec_depend>  <!-- Для сборки Python-пакетов -->
  ```

**c. Интеграция с ROS2**

* Помогает инструментам вроде `colcon` и `rosdep`:
  * `rosdep` использует `package.xml`, чтобы автоматически устанавливать системные зависимости.
  * `colcon` анализирует зависимости между пакетами для правильного порядка сборки.

**d. Лицензирование и документация**

* Указывает лицензию, чтобы пользователи знали условия использования кода.
* Может включать ссылки на документацию или репозиторий.

***

#### **2. `setup.cfg`**

Это файл конфигурации для **setuptools** — инструмента для сборки и установки Python-пакетов.\
**Для чего нужен**:

**a. Настройка путей установки**

В ROS2 структура установки пакетов отличается от стандартной Python. Файл `setup.cfg` гарантирует, что:

* Исполняемые файлы (entry points) помещаются в `/install/lib/<package_name>`.
* Ресурсы (например, launch-файлы) копируются в `/install/share/<package_name>`.

Пример содержимого:

```ini
[develop]
script_dir=$base/lib/python3.8/site-packages  # Пути для разработки
[install]
install_scripts=$base/lib/python3.8/site-packages  # Пути для установки
```

**b. Совместимость с ROS2**

* Без `setup.cfg` entry points (ROS2 узлы) могут устанавливаться в неправильные директории, что сделает их недоступными для `ros2 run`.

**c. Работа с `colcon`**

* `colcon` использует `setup.cfg`, чтобы корректно генерировать симлинки (при `--symlink-install`) и управлять путями.

***

#### **3. Как они взаимодействуют с `setup.py`**

* **`package.xml`**:
  * Читается `colcon` для разрешения зависимостей.
  * Не влияет напрямую на установку Python-кода, но критичен для ROS2-инфраструктуры.
* **`setup.cfg`**:
  * Настраивает `setuptools` (используется в `setup.py`), чтобы ROS2-пакеты устанавливались в правильные директории.
  * Без него entry points могут "потеряться".
* **`setup.py`**:
  * Определяет, какие файлы включать в пакет.
  * Регистрирует entry points (исполняемые узлы) через `console_scripts`.

***

#### **4. Пример для ROS2 Python-пакета**

Предположим, у вас есть пакет `my_robot_controller`.

**`package.xml`:**

```xml
<?xml version="1.0"?>
<package format="3">
  <name>my_robot_controller</name>
  <version>0.1.0</version>
  <description>Контроллер для робота на ROS2</description>
  <maintainer email="you@email.com">Your Name</maintainer>
  <license>Apache-2.0</license>

  <depend>rclpy</depend>
  <depend>geometry_msgs</depend>
  <exec_depend>ament_python</exec_depend>
</package>
```

**`setup.cfg`:**

```ini
[develop]
script_dir=$base/lib/python3.8/site-packages
[install]
install_scripts=$base/lib/python3.8/site-packages
```

***

#### **5. Что будет, если их не использовать?**

* **Без `package.xml`**:
  * `colcon` не распознает пакет как ROS2-пакет.
  * `rosdep` не сможет установить зависимости.
  * Пакет не будет интегрирован в ROS2-окружение.
* **Без `setup.cfg`**:
  * Исполняемые скрипты (узлы ROS2) установятся в `/usr/local/bin`, что нарушит структуру ROS2.
  * Команда `ros2 run` не найдет ваши узлы.

***

#### **Итог**

* **`package.xml`** — это "паспорт" пакета, который необходим для интеграции с ROS2.
* **`setup.cfg`** — технический файл, который гарантирует, что Python-пакет устанавливается в правильные директории ROS2.

Оба файла критичны для работы ROS2-пакетов. Если их не добавить, пакет не будет правильно собран, установлен или запущен!


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://alice-and-alex-docs.gitbook.io/alice_and_alex_docs/ros2-development/setup.cfg.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
