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!