Python Package Repository
Host your private libraries, internal tools and ML models in a PyPI index of your own.
machine your-org.mycloudrepo.io
login you@example.com
password YOUR_REPOSITORY_TOKEN 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.
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.
# 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/ Configure Package Upload
Set up ~/.pypirc for uploading packages with twine.
[distutils]
index-servers =
cloudrepo
[cloudrepo]
repository = https://your-org.mycloudrepo.io/repositories/your-repo
username = you@example.com
password = YOUR_REPOSITORY_TOKEN Upload Your Packages
Build and upload your Python packages to CloudRepo.
# 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 →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.
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.