I was recently asked if I could run a PIP server on Cloud Foundry. After a quick Google search I found PyPICloud and discovered that this is possible!

Deploying PyPI to Cloud Foundry

Start by cloning this repo:

git clone https://github.com/mathcamp/pypicloud
cd pypicloud

There is a pending pull request here for one of the missing components (waitress). For now there is a workaround by modifying setup.py and adding waitress

diff --git a/setup.py b/setup.py
index ae2568a..39d5db7 100644
--- a/setup.py
+++ b/setup.py
@@ -27,6 +27,7 @@ REQUIREMENTS = [
     'pyramid_tm',
     'six',
     'transaction',
+    'waitress',
     'zope.sqlalchemy',
 ]

Next we need to install PIP tools to run setup:

pip install pypicloud
pypicloud-make-config -t server.ini

You will be prompted for the admin user and S3 bucket to store the Python packages. While it is possible to store these files in the local operating system instead of S3, you risk losing these files if the PyPI server is redeployed on Cloud Foundry.

Note: Storing the Python packages to the file system is a terrible idea, you will lose your package. Only use S3 to store the package files.

The port which PyPI server listens on needs to be configured for Cloud Foundry. In the server.ini that is created the following lines need to be changed from:

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543

to:

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = %(http_port)s

Finally we need to create a Procfile:

web: pserve server.ini http_port=$PORT

Now all we need to do is push to Cloud Foundry:

cf push pypicloud

That's it!