pixi-ros 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pixi_ros-0.1.0/.gitattributes +2 -0
- pixi_ros-0.1.0/.github/workflows/ci.yml +23 -0
- pixi_ros-0.1.0/.github/workflows/publish-pypi.yml +27 -0
- pixi_ros-0.1.0/.gitignore +13 -0
- pixi_ros-0.1.0/PKG-INFO +212 -0
- pixi_ros-0.1.0/README.md +195 -0
- pixi_ros-0.1.0/pixi.lock +1672 -0
- pixi_ros-0.1.0/pixi.toml +22 -0
- pixi_ros-0.1.0/pyproject.toml +64 -0
- pixi_ros-0.1.0/src/pixi_ros/__init__.py +3 -0
- pixi_ros-0.1.0/src/pixi_ros/cli.py +77 -0
- pixi_ros-0.1.0/src/pixi_ros/config.py +34 -0
- pixi_ros-0.1.0/src/pixi_ros/data/README.md +56 -0
- pixi_ros-0.1.0/src/pixi_ros/data/README_PIXI.md.template +125 -0
- pixi_ros-0.1.0/src/pixi_ros/data/conda-forge.yaml +1049 -0
- pixi_ros-0.1.0/src/pixi_ros/init.py +548 -0
- pixi_ros-0.1.0/src/pixi_ros/mappings.py +298 -0
- pixi_ros-0.1.0/src/pixi_ros/package_xml.py +183 -0
- pixi_ros-0.1.0/src/pixi_ros/utils.py +80 -0
- pixi_ros-0.1.0/src/pixi_ros/workspace.py +213 -0
- pixi_ros-0.1.0/tests/examples/ws1/pixi.lock +6499 -0
- pixi_ros-0.1.0/tests/examples/ws1/pixi.toml +39 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-a/CMakeLists.txt +26 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-a/LICENSE +17 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-a/package.xml +18 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/package-b/__init__.py +0 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/package.xml +20 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/setup.cfg +4 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/setup.py +29 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/test/test_copyright.py +25 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/test/test_flake8.py +25 -0
- pixi_ros-0.1.0/tests/examples/ws1/src/package-b/test/test_pep257.py +23 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/README.md +41 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/legacy_pkg/package.xml +23 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_cpp_pkg/CMakeLists.txt +19 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_cpp_pkg/package.xml +27 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_mixed_pkg/package.xml +40 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_python_pkg/package.xml +23 -0
- pixi_ros-0.1.0/tests/fixtures/mock_workspace/src/my_python_pkg/setup.py +15 -0
- pixi_ros-0.1.0/tests/test_cli.py +32 -0
- pixi_ros-0.1.0/tests/test_config.py +41 -0
- pixi_ros-0.1.0/tests/test_gateway_availability.py +53 -0
- pixi_ros-0.1.0/tests/test_init.py +144 -0
- pixi_ros-0.1.0/tests/test_mappings.py +287 -0
- pixi_ros-0.1.0/tests/test_package_xml.py +238 -0
- pixi_ros-0.1.0/tests/test_utils.py +26 -0
- pixi_ros-0.1.0/tests/test_workspace.py +182 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
on:
|
|
2
|
+
push:
|
|
3
|
+
pull_request:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
test:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- name: Checkout repository
|
|
11
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
|
|
12
|
+
|
|
13
|
+
- uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
14
|
+
|
|
15
|
+
- name: Format
|
|
16
|
+
run: pixi run format --check
|
|
17
|
+
- name: Lint
|
|
18
|
+
run: pixi run lint
|
|
19
|
+
- name: Test
|
|
20
|
+
run: pixi run test
|
|
21
|
+
- name: Build
|
|
22
|
+
run: pixi build
|
|
23
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: "Publish"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
# Publish on any tag starting with a `v`, e.g., v0.1.0
|
|
7
|
+
- v*
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
run:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
environment:
|
|
13
|
+
name: pypi
|
|
14
|
+
permissions:
|
|
15
|
+
id-token: write
|
|
16
|
+
contents: read
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout
|
|
19
|
+
uses: actions/checkout@v6
|
|
20
|
+
- name: Install uv
|
|
21
|
+
uses: astral-sh/setup-uv@v7
|
|
22
|
+
- name: Install Python 3.13
|
|
23
|
+
run: uv python install 3.13
|
|
24
|
+
- name: Build
|
|
25
|
+
run: uv build
|
|
26
|
+
- name: Publish
|
|
27
|
+
run: uv publish
|
pixi_ros-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pixi-ros
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Pixi extension for ROS package management
|
|
5
|
+
Project-URL: Homepage, https://github.com/ruben-arts/pixi-ros
|
|
6
|
+
Project-URL: Repository, https://github.com/ruben-arts/pixi-ros
|
|
7
|
+
Author-email: Ruben Arts <ruben@prefix.dev>
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Requires-Dist: lxml>=5.0.0
|
|
10
|
+
Requires-Dist: pathspec>=0.11.0
|
|
11
|
+
Requires-Dist: py-rattler>=0.6.0
|
|
12
|
+
Requires-Dist: pyyaml>=6.0
|
|
13
|
+
Requires-Dist: rich>=13.0.0
|
|
14
|
+
Requires-Dist: tomlkit>=0.12.0
|
|
15
|
+
Requires-Dist: typer>=0.12.0
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# pixi-ros
|
|
19
|
+
|
|
20
|
+
**Bridge your ROS workspace to the modern conda/Pixi ecosystem**
|
|
21
|
+
|
|
22
|
+
pixi-ros helps ROS developers transition from `rosdep` to [Pixi](https://pixi.sh) for package management.
|
|
23
|
+
It automatically reads your ROS workspace's `package.xml` files and generates a `pixi.toml` manifest with all dependencies resolved from conda channels (primarily [robostack](https://robostack.org/)).
|
|
24
|
+
|
|
25
|
+
## Why pixi-ros?
|
|
26
|
+
|
|
27
|
+
If you're a ROS developer, you're probably familiar with `rosdep` managing dependencies.
|
|
28
|
+
`pixi-ros` gives you access to a more modern package management ecosystem:
|
|
29
|
+
|
|
30
|
+
- **Reproducible environments**: Lock files ensure everyone on your team has identical dependencies
|
|
31
|
+
- **Cross-platform**: Works seamlessly on Linux, macOS, and Windows
|
|
32
|
+
- **Fast and reliable**: Uses rattler (Rust implementation of conda) for speed
|
|
33
|
+
- **No system dependencies**: Everything isolated in project environments
|
|
34
|
+
|
|
35
|
+
## Quick Start
|
|
36
|
+
|
|
37
|
+
### Installation
|
|
38
|
+
|
|
39
|
+
Install pixi first if you haven't already:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
curl -fsSL https://pixi.sh/install.sh | bash
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Or follow instructions at https://pixi.sh/latest/installation/
|
|
46
|
+
|
|
47
|
+
Install pixi-ros globally using pixi:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pixi global install pixi-ros
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Initialize Your ROS Workspace
|
|
54
|
+
|
|
55
|
+
Navigate to your ROS workspace and run:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pixi-ros init --distro humble
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This will:
|
|
62
|
+
1. Discover all ROS packages in your workspace (by finding `package.xml` files)
|
|
63
|
+
2. Read dependencies from each `package.xml`
|
|
64
|
+
3. Map ROS package names to conda packages
|
|
65
|
+
4. Generate/update `pixi.toml` with proper channels and dependencies
|
|
66
|
+
5. Check package availability and warn about missing packages
|
|
67
|
+
6. Create helpful build/test/clean tasks
|
|
68
|
+
|
|
69
|
+
### Install and Build
|
|
70
|
+
|
|
71
|
+
After initialization, use standard pixi commands:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Install all dependencies
|
|
75
|
+
pixi install
|
|
76
|
+
|
|
77
|
+
# Build your workspace
|
|
78
|
+
pixi run build
|
|
79
|
+
|
|
80
|
+
# Run tests
|
|
81
|
+
pixi run test
|
|
82
|
+
|
|
83
|
+
# Activate environment for direct ROS commands
|
|
84
|
+
pixi shell
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## How It Works
|
|
88
|
+
|
|
89
|
+
### Dependency Mapping
|
|
90
|
+
|
|
91
|
+
`pixi-ros` reads all dependency types from `package.xml` files.
|
|
92
|
+
It then does a best effort mapping of ROS package names to conda packages.
|
|
93
|
+
|
|
94
|
+
- **ROS packages**: `ros-{distro}-{package}` from robostack channels (e.g., `ros-humble-rclcpp`)
|
|
95
|
+
- **System packages**: Mapped to conda-forge equivalents (e.g., `cmake`, `eigen`)
|
|
96
|
+
|
|
97
|
+
After the mapping, it validates package availability in the configured channels. This starts a connection with `https://prefix.dev` to check if packages exist.
|
|
98
|
+
|
|
99
|
+
### Example
|
|
100
|
+
|
|
101
|
+
Given a `package.xml` with:
|
|
102
|
+
|
|
103
|
+
```xml
|
|
104
|
+
<depend>rclcpp</depend>
|
|
105
|
+
<build_depend>ament_cmake</build_depend>
|
|
106
|
+
<exec_depend>std_msgs</exec_depend>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`pixi-ros init --distro humble` generates a `pixi.toml` with:
|
|
110
|
+
|
|
111
|
+
```toml
|
|
112
|
+
[dependencies]
|
|
113
|
+
ros-humble-ament-cmake = "*"
|
|
114
|
+
ros-humble-rclcpp = "*"
|
|
115
|
+
ros-humble-std-msgs = "*"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Supported ROS Distributions
|
|
119
|
+
|
|
120
|
+
- ROS 2 Humble: https://prefix.dev/robostack-humble
|
|
121
|
+
- ROS 2 Iron: https://prefix.dev/robostack-iron
|
|
122
|
+
- ROS 2 Jazzy: https://prefix.dev/robostack-jazzy
|
|
123
|
+
- ROS 2 Rolling: https://prefix.dev/robostack-rolling
|
|
124
|
+
|
|
125
|
+
## Command Reference
|
|
126
|
+
|
|
127
|
+
### `pixi-ros init`
|
|
128
|
+
|
|
129
|
+
Initialize or update a ROS workspace's `pixi.toml`.
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
pixi-ros init --distro <ros_distro>
|
|
133
|
+
pixi-ros init
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Options:**
|
|
137
|
+
- `--distro`, `-d`: ROS distribution (optional)
|
|
138
|
+
|
|
139
|
+
**What it does:**
|
|
140
|
+
- Scans workspace for `package.xml` files
|
|
141
|
+
- Reads all dependency types (build, exec, test)
|
|
142
|
+
- Maps ROS dependencies to conda packages
|
|
143
|
+
- Configures robostack channels
|
|
144
|
+
- Checks package availability
|
|
145
|
+
- Creates build tasks using colcon
|
|
146
|
+
- Generates helpful `README_PIXI.md`
|
|
147
|
+
|
|
148
|
+
**Running multiple times:**
|
|
149
|
+
The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
|
|
150
|
+
|
|
151
|
+
## Philosophy
|
|
152
|
+
|
|
153
|
+
`pixi-ros` aims to be a quick **gateway drug**. It:
|
|
154
|
+
|
|
155
|
+
- Respects existing ROS conventions (package.xml as source of truth)
|
|
156
|
+
- Uses standard ROS build tools (colcon)
|
|
157
|
+
- Focuses only on dependency management and environment setup
|
|
158
|
+
- Doesn't replace `ros2` CLI or other ROS tooling
|
|
159
|
+
- Should eventually become unnecessary as the ecosystem matures
|
|
160
|
+
|
|
161
|
+
Think of it as a "gateway" to help ROS developers benefit from modern package management while keeping familiar workflows.
|
|
162
|
+
|
|
163
|
+
## Project Structure
|
|
164
|
+
|
|
165
|
+
After initialization, your workspace will have:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
workspace/
|
|
169
|
+
├── src/ # Your ROS packages
|
|
170
|
+
│ └── my_package/
|
|
171
|
+
│ ├── package.xml # ROS package manifest (source of truth)
|
|
172
|
+
│ └── ...
|
|
173
|
+
├── pixi.toml # Generated pixi manifest
|
|
174
|
+
├── pixi.lock # Locked dependencies (commit this!)
|
|
175
|
+
└── README_PIXI.md # Generated usage guide
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Troubleshooting
|
|
179
|
+
|
|
180
|
+
### Package Not Found
|
|
181
|
+
|
|
182
|
+
If pixi-ros marks packages as "NOT FOUND":
|
|
183
|
+
|
|
184
|
+
1. Check if the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
|
|
185
|
+
2. Check for typos in `package.xml`
|
|
186
|
+
3. Some packages may have different names - check mapping files
|
|
187
|
+
4. Consider adding the package to your workspace instead of depending on it
|
|
188
|
+
|
|
189
|
+
### Different Package Names
|
|
190
|
+
|
|
191
|
+
pixi-ros includes mapping files for system packages (e.g., `cmake` → `cmake`, `eigen` → `eigen`). You can override mappings by creating `pixi-ros/*.yaml` files in your workspace or `~/.pixi-ros/`.
|
|
192
|
+
|
|
193
|
+
### Platform-Specific Issues
|
|
194
|
+
|
|
195
|
+
Some packages have platform-specific mappings. pixi-ros handles this automatically, but you can test different platforms using the internal API with `platform_override`.
|
|
196
|
+
|
|
197
|
+
## Contributing
|
|
198
|
+
|
|
199
|
+
Contributions welcome! Feel free to open issues or PRs on GitHub.
|
|
200
|
+
|
|
201
|
+
## Learn More
|
|
202
|
+
|
|
203
|
+
- **Pixi**: https://pixi.sh
|
|
204
|
+
- **RoboStack**: https://robostack.org/
|
|
205
|
+
- **Conda**: https://docs.conda.io/
|
|
206
|
+
- **ROS 2**: https://docs.ros.org/
|
|
207
|
+
|
|
208
|
+
## Disclaimer
|
|
209
|
+
|
|
210
|
+
This tool is build with heavy use of AI assistance and is under active development. Please report issues or contribute on GitHub!
|
|
211
|
+
|
|
212
|
+
I (Ruben) hope `pixi-ros` can die ASAP, as all of the workflows this tool provides should ideally be native to Pixi itself. But until then, I hope this initialization tool helps you get started!
|
pixi_ros-0.1.0/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# pixi-ros
|
|
2
|
+
|
|
3
|
+
**Bridge your ROS workspace to the modern conda/Pixi ecosystem**
|
|
4
|
+
|
|
5
|
+
pixi-ros helps ROS developers transition from `rosdep` to [Pixi](https://pixi.sh) for package management.
|
|
6
|
+
It automatically reads your ROS workspace's `package.xml` files and generates a `pixi.toml` manifest with all dependencies resolved from conda channels (primarily [robostack](https://robostack.org/)).
|
|
7
|
+
|
|
8
|
+
## Why pixi-ros?
|
|
9
|
+
|
|
10
|
+
If you're a ROS developer, you're probably familiar with `rosdep` managing dependencies.
|
|
11
|
+
`pixi-ros` gives you access to a more modern package management ecosystem:
|
|
12
|
+
|
|
13
|
+
- **Reproducible environments**: Lock files ensure everyone on your team has identical dependencies
|
|
14
|
+
- **Cross-platform**: Works seamlessly on Linux, macOS, and Windows
|
|
15
|
+
- **Fast and reliable**: Uses rattler (Rust implementation of conda) for speed
|
|
16
|
+
- **No system dependencies**: Everything isolated in project environments
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
### Installation
|
|
21
|
+
|
|
22
|
+
Install pixi first if you haven't already:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
curl -fsSL https://pixi.sh/install.sh | bash
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Or follow instructions at https://pixi.sh/latest/installation/
|
|
29
|
+
|
|
30
|
+
Install pixi-ros globally using pixi:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pixi global install pixi-ros
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Initialize Your ROS Workspace
|
|
37
|
+
|
|
38
|
+
Navigate to your ROS workspace and run:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pixi-ros init --distro humble
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This will:
|
|
45
|
+
1. Discover all ROS packages in your workspace (by finding `package.xml` files)
|
|
46
|
+
2. Read dependencies from each `package.xml`
|
|
47
|
+
3. Map ROS package names to conda packages
|
|
48
|
+
4. Generate/update `pixi.toml` with proper channels and dependencies
|
|
49
|
+
5. Check package availability and warn about missing packages
|
|
50
|
+
6. Create helpful build/test/clean tasks
|
|
51
|
+
|
|
52
|
+
### Install and Build
|
|
53
|
+
|
|
54
|
+
After initialization, use standard pixi commands:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Install all dependencies
|
|
58
|
+
pixi install
|
|
59
|
+
|
|
60
|
+
# Build your workspace
|
|
61
|
+
pixi run build
|
|
62
|
+
|
|
63
|
+
# Run tests
|
|
64
|
+
pixi run test
|
|
65
|
+
|
|
66
|
+
# Activate environment for direct ROS commands
|
|
67
|
+
pixi shell
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## How It Works
|
|
71
|
+
|
|
72
|
+
### Dependency Mapping
|
|
73
|
+
|
|
74
|
+
`pixi-ros` reads all dependency types from `package.xml` files.
|
|
75
|
+
It then does a best effort mapping of ROS package names to conda packages.
|
|
76
|
+
|
|
77
|
+
- **ROS packages**: `ros-{distro}-{package}` from robostack channels (e.g., `ros-humble-rclcpp`)
|
|
78
|
+
- **System packages**: Mapped to conda-forge equivalents (e.g., `cmake`, `eigen`)
|
|
79
|
+
|
|
80
|
+
After the mapping, it validates package availability in the configured channels. This starts a connection with `https://prefix.dev` to check if packages exist.
|
|
81
|
+
|
|
82
|
+
### Example
|
|
83
|
+
|
|
84
|
+
Given a `package.xml` with:
|
|
85
|
+
|
|
86
|
+
```xml
|
|
87
|
+
<depend>rclcpp</depend>
|
|
88
|
+
<build_depend>ament_cmake</build_depend>
|
|
89
|
+
<exec_depend>std_msgs</exec_depend>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`pixi-ros init --distro humble` generates a `pixi.toml` with:
|
|
93
|
+
|
|
94
|
+
```toml
|
|
95
|
+
[dependencies]
|
|
96
|
+
ros-humble-ament-cmake = "*"
|
|
97
|
+
ros-humble-rclcpp = "*"
|
|
98
|
+
ros-humble-std-msgs = "*"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Supported ROS Distributions
|
|
102
|
+
|
|
103
|
+
- ROS 2 Humble: https://prefix.dev/robostack-humble
|
|
104
|
+
- ROS 2 Iron: https://prefix.dev/robostack-iron
|
|
105
|
+
- ROS 2 Jazzy: https://prefix.dev/robostack-jazzy
|
|
106
|
+
- ROS 2 Rolling: https://prefix.dev/robostack-rolling
|
|
107
|
+
|
|
108
|
+
## Command Reference
|
|
109
|
+
|
|
110
|
+
### `pixi-ros init`
|
|
111
|
+
|
|
112
|
+
Initialize or update a ROS workspace's `pixi.toml`.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
pixi-ros init --distro <ros_distro>
|
|
116
|
+
pixi-ros init
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Options:**
|
|
120
|
+
- `--distro`, `-d`: ROS distribution (optional)
|
|
121
|
+
|
|
122
|
+
**What it does:**
|
|
123
|
+
- Scans workspace for `package.xml` files
|
|
124
|
+
- Reads all dependency types (build, exec, test)
|
|
125
|
+
- Maps ROS dependencies to conda packages
|
|
126
|
+
- Configures robostack channels
|
|
127
|
+
- Checks package availability
|
|
128
|
+
- Creates build tasks using colcon
|
|
129
|
+
- Generates helpful `README_PIXI.md`
|
|
130
|
+
|
|
131
|
+
**Running multiple times:**
|
|
132
|
+
The command is idempotent - you can run it multiple times to update dependencies as your workspace changes.
|
|
133
|
+
|
|
134
|
+
## Philosophy
|
|
135
|
+
|
|
136
|
+
`pixi-ros` aims to be a quick **gateway drug**. It:
|
|
137
|
+
|
|
138
|
+
- Respects existing ROS conventions (package.xml as source of truth)
|
|
139
|
+
- Uses standard ROS build tools (colcon)
|
|
140
|
+
- Focuses only on dependency management and environment setup
|
|
141
|
+
- Doesn't replace `ros2` CLI or other ROS tooling
|
|
142
|
+
- Should eventually become unnecessary as the ecosystem matures
|
|
143
|
+
|
|
144
|
+
Think of it as a "gateway" to help ROS developers benefit from modern package management while keeping familiar workflows.
|
|
145
|
+
|
|
146
|
+
## Project Structure
|
|
147
|
+
|
|
148
|
+
After initialization, your workspace will have:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
workspace/
|
|
152
|
+
├── src/ # Your ROS packages
|
|
153
|
+
│ └── my_package/
|
|
154
|
+
│ ├── package.xml # ROS package manifest (source of truth)
|
|
155
|
+
│ └── ...
|
|
156
|
+
├── pixi.toml # Generated pixi manifest
|
|
157
|
+
├── pixi.lock # Locked dependencies (commit this!)
|
|
158
|
+
└── README_PIXI.md # Generated usage guide
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Troubleshooting
|
|
162
|
+
|
|
163
|
+
### Package Not Found
|
|
164
|
+
|
|
165
|
+
If pixi-ros marks packages as "NOT FOUND":
|
|
166
|
+
|
|
167
|
+
1. Check if the package exists in robostack: https://prefix.dev/channels/robostack-{distro}
|
|
168
|
+
2. Check for typos in `package.xml`
|
|
169
|
+
3. Some packages may have different names - check mapping files
|
|
170
|
+
4. Consider adding the package to your workspace instead of depending on it
|
|
171
|
+
|
|
172
|
+
### Different Package Names
|
|
173
|
+
|
|
174
|
+
pixi-ros includes mapping files for system packages (e.g., `cmake` → `cmake`, `eigen` → `eigen`). You can override mappings by creating `pixi-ros/*.yaml` files in your workspace or `~/.pixi-ros/`.
|
|
175
|
+
|
|
176
|
+
### Platform-Specific Issues
|
|
177
|
+
|
|
178
|
+
Some packages have platform-specific mappings. pixi-ros handles this automatically, but you can test different platforms using the internal API with `platform_override`.
|
|
179
|
+
|
|
180
|
+
## Contributing
|
|
181
|
+
|
|
182
|
+
Contributions welcome! Feel free to open issues or PRs on GitHub.
|
|
183
|
+
|
|
184
|
+
## Learn More
|
|
185
|
+
|
|
186
|
+
- **Pixi**: https://pixi.sh
|
|
187
|
+
- **RoboStack**: https://robostack.org/
|
|
188
|
+
- **Conda**: https://docs.conda.io/
|
|
189
|
+
- **ROS 2**: https://docs.ros.org/
|
|
190
|
+
|
|
191
|
+
## Disclaimer
|
|
192
|
+
|
|
193
|
+
This tool is build with heavy use of AI assistance and is under active development. Please report issues or contribute on GitHub!
|
|
194
|
+
|
|
195
|
+
I (Ruben) hope `pixi-ros` can die ASAP, as all of the workflows this tool provides should ideally be native to Pixi itself. But until then, I hope this initialization tool helps you get started!
|