Setting up a custom PyPi server

Problem statement: You have created a proprietary Python module that you would like to release only to folks within your group/company. If you release it to Python PyPi server it will be available to everyone.

Solution: Stand up your own PyPi server. Note: I am using virtualenvwrapper commands below.

  1. Setup your virtualenv: mkvirtualenv pypi
  2. Pip install the package: pip install pypiserver
  3. Create the packages dir: mkdir -p ~/pypi/packages
  4. Verify that the server starts up: pypi-server -p 7001 ~/pypi/packages (or if you want to start the server in the background: nohup pypi-server -p 7001 ~/pypi/packages &

That's it. That's the base.

Start and stop PyPi server via supervisord:

The way I have my PyPi server running is via supervisord. Supervisord is an awesome service that provides you a simple way to daemonize your process and also provides straightforward commands to start and stop your process (see below).

[program:pypi-server]
command=python /home/spiderman/.virtualenvs/pypi/bin/pypi-server -p 8080 packages  
directory=/root  
autostart=true  
startretries=3  
redirect_stderr=true  
stdout_logfile=/var/log/supervisor/pypiserver.log  

Start the supervisord in daemon mode: supervisord -c supervisord.conf. And start and stop your pypi-server process via supervisorctl like so:

Start PyPi server: supervisorctl start pypi-server
Stop PyPi server: supervisorctl stop pypi-server

In my next post, I show how to reference your pypi server to install your python modules.