Skip to content

pixi upload#

Upload conda packages to various channels

The pixi upload command supports uploading conda packages to various server types:

Server Type Description
prefix Upload to prefix.dev or self-hosted instances
anaconda Upload to Anaconda.org
quetz Upload to a Quetz server
artifactory Upload to JFrog Artifactory
s3 Upload to S3-compatible object storage

Usage#

pixi upload [OPTIONS] [PACKAGE_FILES]... <COMMAND>

Subcommands#

Command Description
quetz Upload to a Quetz server. Authentication is used from the keychain / auth-file
artifactory Options for uploading to an Artifactory channel
prefix Options for uploading to a prefix.dev server. Authentication is used from the keychain / auth-file
anaconda Options for uploading to a Anaconda.org server
cloudsmith Options for uploading to a Cloudsmith repository. Authentication is used from the keychain / auth-file
s3 Options for uploading to S3

Arguments#

  • <PACKAGE_FILES>
    The package file to upload
    May be provided more than once.

Options#

  • --offline=<OFFLINE>
    Run without network access. Uploading always requires the network, so this makes pixi upload fail fast instead of attempting to connect. Defined here rather than through the shared config flags because UploadOpts already owns --auth-file
    env: PIXI_OFFLINE
    options: y, yes, t, true, on, 1, n, no, f, false, off, 0
  • --allow-insecure-host <ALLOW_INSECURE_HOST>
    List of hosts for which SSL certificate verification should be skipped
    May be provided more than once.

Config Options#

  • --no-config
    Don't read system or user-level configuration files. Project-local <project>/.pixi/config.toml is still loaded
    env: PIXI_NO_CONFIG
    default: false
  • --config-file <PATH>
    Load configuration from this file instead of searching system and user-level paths. Project-local <project>/.pixi/config.toml is still merged on top
    env: PIXI_CONFIG_FILE

Description#

Upload conda packages to various channels

Supported server types: prefix, anaconda, quetz, artifactory, s3, conda-forge

Use pixi auth login to authenticate with the server.

Examples#

Uploading to prefix.dev#

# Upload a package to a channel on prefix.dev
pixi upload prefix --channel my-channel my_package-1.0.0-h123abc_0.conda

# Upload with an explicit API key
pixi upload prefix --channel my-channel --api-key $PREFIX_API_KEY my_package.conda

# Skip upload if package already exists
pixi upload prefix --channel my-channel --skip-existing my_package.conda

Uploading to Anaconda.org#

# Upload to your personal channel
pixi upload anaconda --owner my-username my_package.conda

# Upload to a specific label/channel
pixi upload anaconda --owner my-username --channel dev my_package.conda

# Force replace existing package
pixi upload anaconda --owner my-username --force my_package.conda

Uploading to S3#

# Upload to an S3 bucket (using AWS credentials from environment)
pixi upload s3 --channel s3://my-bucket/my-channel my_package.conda

# Upload with explicit credentials
pixi upload s3 \
    --channel s3://my-bucket/my-channel \
    --region us-east-1 \
    --access-key-id $AWS_ACCESS_KEY_ID \
    --secret-access-key $AWS_SECRET_ACCESS_KEY \
    my_package.conda

# Upload to S3-compatible storage (MinIO, Cloudflare R2, etc.)
pixi upload s3 \
    --channel s3://my-bucket/my-channel \
    --endpoint-url https://minio.example.com \
    --region us-east-1 \
    --addressing-style path \
    my_package.conda

# Force replace existing package
pixi upload s3 --channel s3://my-bucket/my-channel --force my_package.conda

Uploading to Quetz#

# Upload to a Quetz server
pixi upload quetz \
    --url https://my-quetz-server.com \
    --channel my-channel \
    my_package.conda

# Upload with explicit API key
pixi upload quetz \
    --url https://my-quetz-server.com \
    --channel my-channel \
    --api-key $QUETZ_API_KEY \
    my_package.conda

Uploading to Artifactory#

# Upload to Artifactory
pixi upload artifactory \
    --url https://my-artifactory.com \
    --channel conda-local \
    my_package.conda

# Upload with explicit token
pixi upload artifactory \
    --url https://my-artifactory.com \
    --channel conda-local \
    --token $ARTIFACTORY_TOKEN \
    my_package.conda

Uploading Multiple Packages#

All server types support uploading multiple packages at once:

pixi upload prefix --channel my-channel package1.conda package2.conda package3.conda

Authentication#

For most server types, authentication can be provided in multiple ways:

  1. Keychain / auth-file: Use pixi auth login to store credentials

    pixi auth login https://prefix.dev --token $MY_TOKEN
    pixi upload prefix --channel my-channel my_package.conda
    

  2. Environment variables: Each server type supports specific environment variables

    • PREFIX_API_KEY for prefix.dev
    • ANACONDA_API_KEY for Anaconda.org
    • QUETZ_API_KEY for Quetz
    • ARTIFACTORY_TOKEN for Artifactory
    • S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY for S3
  3. Command-line arguments: Pass credentials directly via --api-key, --token, etc.

S3 Re-indexing#

When uploading packages to S3, the repodata.json file needs to be updated manually since S3 is just storage, not a package server. Use rattler-index to re-index your S3 bucket after uploading:

pixi exec rattler-index s3 s3://my-bucket/my-channel \
    --endpoint-url https://my-s3-host \
    --region us-east-1

See the S3 deployment documentation for more details.