Loading
Melvin Strobl

Doctoral Researcher

Electrical Engineer

Software Engineer

Climber

Melvin Strobl

Doctoral Researcher

Electrical Engineer

Software Engineer

Climber

Setting up a PyPi using DevPi

Setup

Assuming you are in your desired folder and have activated a virtual environment

  • pip install devpi-server devpi-web devpi-client
  • devpi-init
  • devpi-gen-config --port 8080
  • supervisord -c gen-config/supervisord.conf

After that, devpi should be up and running under localhost:8080.

Before we're doing any further steps regarding network setup, let's do a minimal configuration.

  • devpi use http://localhost:8080
  • devpi login root --password ''
  • devpi user -m root password=123
  • devpi logoff

After we changed the root password, let's create a user

  • devpi user -c alice password=456 email=alice@example.com
  • devpi login alice --password=456

Now, we're ready to create an index (e.g. foo) for this specific user

  • devpi index -c foo bases=root/pypi

Security

After following the above steps, we're done. You can proceed with the following steps by either having all locally installed or initiating an SSH tunnel.
However, if you're running on a server and want to make the package index public available, follow the next steps to add at least some security.
For simplicity, the other setup steps will assume having everything on localhost nevertheless.

On a production setup, you should use a configuration file for devpi and a reverse proxy such as nginx.

  • after running devpi-init, head to .devpi/server and create a file server.conf
  • paste the following into the file:
    devpi-server:
        serverdir: /home/devpi/.devpi/server
        secretfile: /home/devpi/.devpi/secret/.secret
        host: localhost
        port: 8080
  • run devpi-gen-config -c /home/devpi/devpi/server/server.conf
  • copy the nginx configuration to the sites-available folder and proceed with [[certbot]]
  • run devpi-server -c /home/devpi/devpi/server/server.conf to check if everything's running well
  • create a systemd file as follows:

    [Unit]
    Description=devpi
    Requires=network-online.target
    After=network-online.target
    
    [Service]
    User=devpi
    Group=devpi
    WorkingDirectory=/home/devpi/.devpi/server
    Restart=on-success
    ExecStart=/home/devpi/.venv/bin/devpi-server -c /home/devpi/.devpi/server/server.conf
    
    [Install]
    WantedBy=multi-user.target
  • head back to the previous section and set root password accordingly, then enable and start the service

Publishing

Assuming you have Poetry installed

  • poetry new bar
  • implement your module
  • poetry add devpi-client -G dev
  • poetry run devpi use http://localhost:8080
  • poetry run devpi login alice --password=456
  • poetry run devpi use alice/foo
  • poetry config repositories.foo http://localhost:8080/alice/foo
  • poetry config http-basic.foo alice 456
  • poetry publish -r foo

Installation

Assuming you have Poetry installed

  • poetry source add --priority=supplemental foo http://localhost:8080/alice/foo/+simple/
  • poetry add --source foo bar