How to Package Python Code

By | August 5, 2015

With Python distributions such as Enthought and Anaconda, its never been easier to create and install python packages. In this post I show you how to build your own python packages and publish them on the PyPI python package index.

Step 1. Create PyPI Account

Before we can upload our package to the Python Package Index PyPI we must first create an account.

Go to the PyPI website and set up an account. Remember your user name and password as you will need these later to upload your files.

Step 2. Prepare your files

Before we build and upload your module, we need to organise our files in a particular way.

For this basic example we’re assuming your project code is in a single python file “module_file.py”. You will also need to create a file “setup.py” and “__init__.py”.

Create the folder structure like this:

project_directory/
     setup.py
     module_name/
          __init__.py
          module_file.py

Everything in the directory ‘module_name’ will be packaged and uploaded to PyPI.

__init__.py

The file “__init.py__” tells Python that the folder it is in is a module folder. For now we’ll just leave the file blank.

setup.py

The file “setup.py” is a setup script that defines important information and metadata for your project.

For our simple example we’ll just include some basic information about the package and its author:

from setuptools import setup

setup(name='texlog',
      version='0.2.0',
      description='Log the wordcount of tex files',
      url='https://github.com/deparkes/texlog',
      author='deparkes',
      author_email='deparkes@deparkes.co.uk',
      license='GPL',
      packages=['texlog'])

Have a look at the setuptools documentation orĀ  other python projects on github to see what else you might include in setup.py.

Step 3. Build and Upload Your Package To PyPI

Having sorted out your project files and organisation, the next step is to build your package and upload it to PyPi.

We do this by running a series of commands from ‘project_directory’.

1. setup.py register

Running the command

setup.py register

registers your project on PyPI. Running this command will give you these options:

running register
We need to know who you are, so please choose either:
    1. use your existing login,
    2. register as a new user,
    3. have the server generate a new password for you (and email it to you), or
    4. quit
Your selection [default 1]:

At which point you can login using your PyPI username and password.

You will be given the option to save your username and password as a plaintext file on your computer. Since this is just an unsecure plaintext file you may wish to not do this – it just means you’ll have to enter your login details each time you register or upload a package.

2. setup.py sdist

This is the step that actually builds your package. For now the default options will be enough, which should create a zip-file package in a directory “dist”

sdist refers to a “source distribution”. You can find out more about different distribution types here.

3. twine upload dist\*

Now we get to the stage of uploading our package to PyPI.

To upload all of the packaged files in the directory ‘dist’ run:

twine upload dist\*

If you didn’t save your username and password for PyPI when you ran “setup.py register” you’ll need to use the username and password flags:

twine -u USERNAME -p PASSWORD upload dist\*

Note: If you don’t have twine you’ll need to run

pip install twine

Install your package

With your project packaged and uploaded to PyPi you and others can now easily install it using the “pip install” command:

pip install jobid