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#
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 uploadfail fast instead of attempting to connect. Defined here rather than through the shared config flags becauseUploadOptsalready 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.tomlis 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.tomlis 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:
Authentication#
For most server types, authentication can be provided in multiple ways:
-
Keychain / auth-file: Use
pixi auth loginto store credentials -
Environment variables: Each server type supports specific environment variables
PREFIX_API_KEYfor prefix.devANACONDA_API_KEYfor Anaconda.orgQUETZ_API_KEYfor QuetzARTIFACTORY_TOKENfor ArtifactoryS3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEYfor S3
-
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.