Python Package Repository

Host your private libraries, internal tools and ML models in a PyPI index of your own.

Compatible with pip, poetry, and pipenv
Connect to python-packages: the repository URL for pip, uv and twine.
~/.netrc
machine your-org.mycloudrepo.io
login you@example.com
password YOUR_REPOSITORY_TOKEN
Publish and install
export TWINE_USERNAME=you@example.com TWINE_PASSWORD="$CLOUDREPO_TOKEN"
twine upload --repository-url https://your-org.mycloudrepo.io/repositories/your-repo dist/*
pip install --index-url https://your-org.mycloudrepo.io/repositories/your-repo/simple/ my-package

What you get

A private PyPI index for pip, Poetry and uv, with no server to run.

PyPI Compatible
Full compatibility with pip, poetry, and other Python package managers.
Private Package Index
Host proprietary Python packages securely with access control.
Unlimited Packages
Upload as many Python packages as you like. Plans are priced by storage and transfer.
Version Management
Publish as many versions as you like. pip, Poetry and uv install the one your build asks for.
Simple Integration
Works with your existing Python workflow and CI/CD pipelines.
Enterprise Security
API tokens, team management, and team-based access controls.

Quick Setup Guide

Start hosting Python packages in minutes with our simple setup process.

1

Configure pip for CloudRepo

Set up pip to use your private CloudRepo Python repository. A global index sends every install to that repository, and a hosted repository holds only what you uploaded, so pip install requests fails with No matching distribution found. Use a proxy repository as the global index for public packages, and install your private packages in a step of their own with --index-url.

Terminal
# Credentials go in ~/.netrc, not in the index URL. The login is the email
# address of the account that created the token.
# The subshell's umask keeps the file private from the moment it is created;
# >> adds the entry without replacing an existing ~/.netrc.
(umask 077 && printf 'machine your-org.mycloudrepo.io\nlogin you@example.com\npassword %s\n' \
  "$CLOUDREPO_TOKEN" >> ~/.netrc)
chmod 600 ~/.netrc

# Install from CloudRepo. pip reads the login for the host from ~/.netrc
pip install my-package \
  --index-url https://your-org.mycloudrepo.io/repositories/your-repo/simple/

# Or configure pip globally
pip config set global.index-url \
  https://your-org.mycloudrepo.io/repositories/your-repo/simple/
2

Configure Package Upload

Set up ~/.pypirc for uploading packages with twine.

~/.pypirc
[distutils]
index-servers =
    cloudrepo

[cloudrepo]
repository = https://your-org.mycloudrepo.io/repositories/your-repo
username = you@example.com
password = YOUR_REPOSITORY_TOKEN
3

Upload Your Packages

Build and upload your Python packages to CloudRepo.

Terminal
# Install build tools
pip install build twine

# Build your package
python -m build

# Upload to CloudRepo
twine upload --repository cloudrepo dist/*

Who uses it

For Data Science Teams

Share ML models, custom libraries, and data processing tools securely across your organization.

For Web Development

Host internal Django apps, Flask extensions, and shared utilities with version control.

For DevOps

Distribute automation scripts, deployment tools, and infrastructure packages company-wide.

For Enterprises

Keep proprietary code private, and choose who can read and write each repository.

Works with pip, Poetry, uv and Pixi

Use the Python tools your team already runs.

Poetry

Add CloudRepo as a source in pyproject.toml to install from it, and publish with poetry publish --repository cloudrepo.

Learn about Poetry integration →

uv

Astral's fast installer, written in Rust. Point uv at your CloudRepo index and it installs your private packages like any other.

Explore UV integration →

Pixi

Pixi takes conda packages from conda-forge and your private Python packages from your CloudRepo index.

Discover Pixi support →

Traditional pip & setuptools

pip and twine work the way they do with PyPI.

View documentation →

See our complete documentation for setup guides, CI/CD integration, and best practices for all Python package managers.

Comparing vendors? See our Artifactory alternatives comparison and our rundown of Nexus alternatives.

Moving Python packages from Nexus or Artifactory?

Install the migration tool with one line. Run it with --dry-run first: a dry run lists what would move and uploads nothing.

Terminal
pipx install cloudrepo-migrate

No pipx? In a virtual environment, run pip install cloudrepo-migrate.

Follow the guide for your server

Start hosting Python packages today

14-day free trial. No credit card required. Setup in minutes.