Skip to main content
Glama

Python Dependency Manager Companion

by KemingHe
rust.md6.43 kB
In this tutorial, we will show you how to develop a Rust package using `pixi`. The tutorial is written to be executed from top to bottom, missing steps might result in errors. The audience for this tutorial is developers who are familiar with Rust and `cargo` and how are interested to try Pixi for their development workflow. The benefit would be within a rust workflow that you lock both rust and the C/System dependencies your project might be using. For example tokio users might depend on `openssl` for linux. ## Prerequisites - You need to have `pixi` installed. If you haven't installed it yet, you can follow the instructions in the [installation guide](../index.md). The crux of this tutorial is to show you only need pixi! ## Create a Pixi workspace ```shell pixi init my_rust_project cd my_rust_project ``` It should have created a directory structure like this: ```shell my_rust_project ├── .gitattributes ├── .gitignore └── pixi.toml ``` The `pixi.toml` file is the manifest file for your workspace. It should look like this: ```toml title="pixi.toml" [workspace] name = "my_rust_project" version = "0.1.0" description = "Add a short description here" authors = ["User Name <user.name@email.url>"] channels = ["conda-forge"] platforms = ["linux-64"] # (1)! [tasks] [dependencies] ``` 1. The `platforms` is set to your system's platform by default. You can change it to any platform you want to support. e.g. `["linux-64", "osx-64", "osx-arm64", "win-64"]`. ## Add Rust dependencies To use a Pixi workspace you don't need any dependencies on your system, all the dependencies you need should be added through pixi, so other users can use your workspace without any issues. ```shell pixi add rust ``` This will add the `rust` package to your `pixi.toml` file under `[dependencies]`. Which includes the `rust` toolchain, and `cargo`. ## Add a `cargo` project Now that you have rust installed, you can create a `cargo` project in your `pixi` workspace. ```shell pixi run cargo init ``` `pixi run` is pixi's way to run commands in the `pixi` environment, it will make sure that the environment is set up correctly for the command to run. It runs its own cross-platform shell, if you want more information checkout the [`tasks` documentation](../workspace/advanced_tasks.md). You can also activate the environment in your own shell by running `pixi shell`, after that you don't need `pixi run ...` anymore. Now we can build a `cargo` project using `pixi`. ```shell pixi run cargo build ``` To simplify the build process, you can add a `build` task to your `pixi.toml` file using the following command: ```shell pixi task add build "cargo build" ``` Which creates this field in the `pixi.toml` file: ```toml title="pixi.toml" [tasks] build = "cargo build" ``` And now you can build your project using: ```shell pixi run build ``` You can also run your project using: ```shell pixi run cargo run ``` Which you can simplify with a task again. ```shell pixi task add start "cargo run" ``` So you should get the following output: ```shell pixi run start Hello, world! ``` Congratulations, you have a Rust project running on your machine with pixi! ## Next steps, why is this useful when there is `rustup`? Cargo is not a binary package manager, but a source-based package manager. This means that you need to have the Rust compiler installed on your system to use it. And possibly other dependencies that are not included in the `cargo` package manager. For example, you might need to install `openssl` or `libssl-dev` on your system to build a package. This is the case for `pixi` as well, but `pixi` will install these dependencies in your workspace folder, so you don't have to worry about them. Add the following dependencies to your cargo project: ```shell pixi run cargo add git2 ``` If your system is not preconfigured to build C and have the `libssl-dev` package installed you will not be able to build the project: ```shell pixi run build ... Could not find directory of OpenSSL installation, and this `-sys` crate cannot proceed without this knowledge. If OpenSSL is installed and this crate had trouble finding it, you can set the `OPENSSL_DIR` environment variable for the compilation process. Make sure you also have the development packages of openssl installed. For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora. If you are in a situation where you think the directory *should* be found automatically, please open a bug at https://github.com/sfackler/rust-openssl and include information about your system as well as this message. $HOST = x86_64-unknown-linux-gnu $TARGET = x86_64-unknown-linux-gnu openssl-sys = 0.9.102 It looks like you are compiling on Linux and also targeting Linux. Currently this requires the `pkg-config` utility to find OpenSSL but unfortunately `pkg-config` could not be found. If you have OpenSSL installed you can likely fix this by installing `pkg-config`. ... ``` You can fix this, by adding the necessary dependencies for building git2, with pixi: ```shell pixi add openssl pkg-config compilers ``` Now you should be able to build your project again: ```shell pixi run build ... Compiling git2 v0.18.3 Compiling my_rust_project v0.1.0 (/my_rust_project) Finished dev [unoptimized + debuginfo] target(s) in 7.44s Running `target/debug/my_rust_project` ``` ## Extra: Add more tasks You can add more tasks to your `pixi.toml` file to simplify your workflow. For example, you can add a `test` task to run your tests: ```shell pixi task add test "cargo test" ``` And you can add a `clean` task to clean your project: ```shell pixi task add clean "cargo clean" ``` You can add a formatting task to your project: ```shell pixi task add fmt "cargo fmt" ``` You can extend these tasks to run multiple commands with the use of the `depends-on` field. ```shell pixi task add lint "cargo clippy" --depends-on fmt ``` ## Conclusion In this tutorial, we showed you how to create a Rust project using `pixi`. We also showed you how to **add dependencies** to your project using `pixi`. This way you can make sure that your project is **reproducible** on **any system** that has `pixi` installed. ## Show Off Your Work! Finished with your project? We'd love to see what you've created! Share your work on social media using the hashtag #pixi and tag us @prefix_dev. Let's inspire the community together!

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/KemingHe/python-dependency-manager-companion-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server