Skip to main content
Glama

Python Dependency Manager Companion

by KemingHe
import.md7.47 kB
In this tutorial we will show you how to import existing environments into a Pixi workspace. In case some words used in the tutorial don't make sense to you, you may get value from first reading some of our other tutorials, like [our first workspace walthrough](../first_workspace.md) and [our guide to multi-environment workspaces](./multi_environment.md). ## `pixi import` Within any Pixi workspace, you can use [`pixi import`](https://pixi.sh/latest/reference/cli/pixi/import/) to import an environment from a given file. At the time of writing, we support two import file formats: `conda-env` and `pypi-txt`. Running `pixi import` without providing a `format` will try each format in turn until one succeeds, or return an error if all formats fail. If you don't already have a Pixi workspace, you can create one with [`pixi init`](https://pixi.sh/latest/reference/cli/pixi/init/). ### `conda-env` format The `conda-env` format is for files in the conda ecosystem (typically called `environment.yml`) following [the syntax specified in the conda docs](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#create-env-file-manually). Suppose our environment to import is specified in this file: ```yaml title="environment.yml" name: simple-env channels: ["conda-forge"] dependencies: - python - pip: - httpx ``` We can then run `pixi import --format=conda-env environment.yml` to import the environment into our workspace. By default, since our `environment.yml` has a `name` field, this creates a `feature` of the same name (or uses the feature of that name if it already exists), and creates an `environment` containing that feature (with [`no-default-feature`](https://pixi.sh/latest/reference/pixi_manifest/#the-environments-table) set): ```toml title="pixi.toml" [feature.simple-env] channels = ["conda-forge"] [feature.simple-env.dependencies] python = "*" [feature.simple-env.pypi-dependencies] httpx = "*" [environments] simple-env = { features = ["simple-env"], no-default-feature = true } ``` It is then possible to define tasks for that environment, run commands in that environment, and launch a [`pixi shell`](https://pixi.sh/latest/reference/cli/pixi/shell) in that environment — see the [getting started guide](../getting_started.md) for links to start learning about these topics! For files without a `name` field, or to override the default behaviour, you can specify custom `--feature` and `--environment` names. This also allows importing into existing features and environments (including the `default` feature and environment). For example, given this other environment file to import: ```yaml title="env2.yml" channels: ["conda-forge"] dependencies: - numpy ``` Running `pixi import --format=conda-env --feature=numpy --environment=simple-env env2.yml` will import the environment into a new feature called "numpy", and include that feature in the existing `simple-env` environment (effectively merging the environments from our two input files): ```toml title="pixi.toml" [feature.simple-env] channels = ["conda-forge"] [feature.simple-env.dependencies] python = "*" [feature.simple-env.pypi-dependencies] httpx = "*" [feature.numpy] channels = ["conda-forge"] [feature.numpy.dependencies] numpy = "*" [environments] simple-env = { features = ["simple-env", "numpy"], no-default-feature = true } ``` It is also possible to specify platforms for the feature via the `--platform` argument. For example, `pixi import --format=conda-env --feature=unix --platform=linux-64 --platform=osx-arm64 environment.yml` adds the following to our workspace manifest: ```toml title="pixi.toml" [feature.unix] platforms = ["linux-64", "osx-arm64"] channels = ["conda-forge"] [feature.unix.target.linux-64.dependencies] python = "*" [feature.unix.target.osx-arm64.dependencies] python = "*" [environments] unix = { features = ["unix"], no-default-feature = true } ``` ### `pypi-txt` format The `pypi-txt` format is for files in the PyPI ecosystem following [the requirements file format specification in the `pip` docs](https://pip.pypa.io/en/stable/reference/requirements-file-format/). Suppose our environment to import is specified in this file: ```yaml title="requirements.txt" cowpy array-api-extra>=0.8 ``` We can then run `pixi import --format=pypi-txt --feature=my-feature1 requirements.txt` to import the environment into our workspace. It is necessary to specify a `feature` or `environment` name (or both) via the arguments of the same names. If only one of these names is provided, a matching name is used for the other field. Hence, the following lines are added to our workspace manifest: ```toml title="pixi.toml" [feature.my-feature1.pypi-dependencies] cowpy = "*" array-api-extra = ">=0.8" [environments] my-feature1 = { features = ["my-feature1"], no-default-feature = true } ``` Any dependencies listed in the file are added as [`pypi-dependencies`](https://pixi.sh/latest/reference/pixi_manifest/#pypi-dependencies). An environment will be created with [`no-default-feature`](https://pixi.sh/latest/reference/pixi_manifest/#the-environments-table) set if the given environment name does not already exist. It is then possible to define tasks for that environment, run commands in that environment, and launch a [`pixi shell`](https://pixi.sh/latest/reference/cli/pixi/shell) in that environment — see the [getting started guide](../getting_started.md) for links to start learning about these topics! Just like the `conda-env` format, it is possible to import into existing features/environments (including the `default` feature/environment), and set specific platforms for the feature. See the previous section for details. ## `pixi init --import` It is also possible to combine the steps of `pixi init` and `pixi import` into one, via [`pixi init --import`](https://pixi.sh/latest/reference/cli/pixi/init/#arg---import). For example, `pixi init --import environment.yml` (using the same file from our example above) produces a manifest which looks like this: ```toml title="pixi.toml" [workspace] authors = ["Lucas Colley <lucas.colley8@gmail.com>"] channels = ["conda-forge"] name = "simple-env" platforms = ["osx-arm64"] version = "0.1.0" [tasks] [dependencies] python = "*" [pypi-dependencies] httpx = "*" ``` Unlike `pixi import`, this by default uses the `default` feature and environment. Thus, it achieves a very similar workspace to that obtained by running `pixi init ` and `pixi import --feature=default environment.yml`. One difference is that `pixi init --import` will by default inherit its name from the given import file (if the file specifies the `name` field), rather than from its working directory. !!! note "Supported formats" At the time of writing, only the `conda-env` format is supported by `pixi init --import`. ## Conclusion For further details, please see the CLI reference documentation for [`pixi import`](https://pixi.sh/latest/reference/cli/pixi/import/) and [`pixi init --import`](https://pixi.sh/latest/reference/cli/pixi/init/#arg---import). If there are any questions, or you know how to improve this tutorial, feel free to reach out to us on [GitHub](https://github.com/prefix-dev/pixi). At the time of writing, there are plans for many potential extensions to our import capabilities — you can follow along with that work at the `import` [roadmap issue on GitHub](https://github.com/prefix-dev/pixi/issues/4192).

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