Skip to main contentIBM Quantum Documentation Preview

Best practices for your project

If you have an idea for a Qiskit-based project, you'll often want to share it with the community. Putting your code online is a good start, but if a user can't work out how to install or use your project, they'll give up and move on. This page covers licensing, packaging, testing, and documenting your project, all of which improve your users' experience. If you're releasing research code, following best practices will also help others reproduce your results.

Once you've put the finishing touches on it, consider adding your project to the Qiskit ecosystem.


GitHub

Most Qiskit projects are hosted on GitHub, a source-code hosting platform. GitHub is based on Git, a version control system. It provides a large set of tools to collaborate and maintain high quality. See Github skills to get up to speed on GitHub quickly.

Some key features are:

  • Issues and pull requests

    Users can use GitHub to report bugs in your project or request changes to it. Your team and external contributors can use pull requests to propose and review changes to your project's code.

    If you want to accept contributions from others, make sure to add a contributing guide and a code of conduct.

  • GitHub actions

    This feature runs scripts in the cloud when certain events happen in your GitHub repo. For example, you can run your test suite when you push new code or automatically publish your package when you tag a commit.

    Use GitHub actions for continuous integration (CI) and continuous deployment (CD) of your project.

  • Security features

    GitHub supports features to keep your projects secure. These include:

    • Dependabot – a tool to automatically update your dependencies.
    • Trusted publishing to PyPI – to reduce the risk of a malicious actor gaining control of your package.
    • Branch protection – to make sure code meets some criteria before being pushed to certain branches.

The rest of this page will assume you have your project hosted on GitHub, although you are welcome to other providers like GitLab.


Choose a license

If you want others to use your project, you must choose an appropriate license. Otherwise, your grant no permission for others to use it. Most projects in the Qiskit ecosystem use the Apache 2.0 or MIT licenses. Visit GitHub's choosealicense.com to decide which license is best for you, and consider seeking legal help.

Add your license to the top level of your repository in a text file named LICENSE. When you create a new repository, GitHub will give you the option to automatically add a standard license.


Dependency management

Most projects depend on other projects, such as Qiskit or NumPy. If you don't clearly specify your project's dependencies, users (including your future self) will struggle to install and use it.

The simplest way to list your requirements is to put the Python version you're using in your README and include a requirements.txt file in your repository. You may also see requirements-dev.txt for dependencies only used for contributing to the project, such as linters or test runners. You must manually identify your requirements and keep requirements files up to date.

Tools such as Poetry manage dependencies for you and keep track of everything you've installed. Installing a dependency through Poetry will add it to a "lockfile", which stores the exact versions of each package needed to replicate your environment. Without a lockfile, future users may try to run your project with more recent versions of your dependencies, with which it might not work correctly.

See Poetry: Basic usage to set up your project with Poetry.


Package your project

Consider packaging your Python project to make it easy for others to install and use. You should also consider uploading your package to PyPI so it can be installed through pip.

If your project is a transpiler plugin, see Create a transpiler plugin to integrate correctly with Qiskit's transpiler. This makes it easy for users to incorporate your plugin into their Qiskit code.


Test your project

Tests are small functions you'll write to make sure your code is working correctly. A good test suite makes working on your code easier; if the tests pass, your code works. This means you can be confident you haven't broken anything when refactoring or adding new features. Seeing tests in a project's repository gives users more confidence in the stability of the project.

The two most popular testing frameworks in Python are:

You can also consider using tox to test your project against different versions of Python. Tox is compatible with Poetry.


Code quality tools

A linter is a tool that detects (and sometimes corrects) common problems in your code. Formatters will auto-format your code to use a consistent style.

A popular linter for Python is ruff, which also includes a formatter (based on the popular tool Black). Other popular tools include mypy for type-checking, and bandit for security scanning.

Once you've set up your tools, you can use a GitHub action to make sure all code pushed to your repository has been linted.

Document how to run the linters and formatters in your README.md or CONTRIBUTOR.md.