Git Product home page Git Product logo

python_packages's Introduction

Creating a Python Package

Introduction

After writing some useful Python code you may wish to share this code with other members of the Python community. Or you may wish to package some useful functions together for use within another repository or in a Jupyter Notebook. There are many reasons why you might wish to create a Python package.

In this repository I will explore how to create a simple Python package. I will create a Python package of the Flask application which was defined previously in the docker_flask_app repository.

Creating a Python Package

The structure of this repository is a common structure that is employed with creating a Python package. This structure involves a flask_application folder containing the main python script which in this case is called flask_application.py. It is also required that the flask_application folder contains a __init__.py script.

Next, we will add the setup.py script which enables the creation of your Python package. The setup.py script will have the following general format:

# import setuptools
from setuptools import find_packages, setup

# identify the third party packages used by your package
with open("requirements.txt") as stream:
    REQUIREMENTS = stream.read().splitlines()

# define the longer description as the readme 
with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

# define your python package
setup(
    name="my_flask_app",
    version="0.0.1",
    author="David Quinlan",
    author_email="[email protected]",
    description="Flask application which sums a list of numbers contained in the body "
                "of a POST request",
    long_description=long_description,
    long_description_content_type="text/markdown",
    # url="https://github.com/pypa/sampleproject",
    install_requires=REQUIREMENTS,
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.6',
)

In the above Python script one can define the name and version of their Python package in addition to adding their contact details and a short/long description of their package. The long description is defined as the README.md associated with the package repository. A url to the git repository associated with the Python package can also be supplied. The install_requires argument defines any additional Python packages that are required for the building of this package. Finally, the minimum required version of Python can also be defined.

If uploading your package to pip then it is important to include a LICENSE file to define how this package should be used.

Building and installation of a Python package

Is is recommended that one create a virtual environment for the development of this Python package. Do so using your favorite virtual environment tool.

After the creation and activation of a virtual environment, install wheel using the following command:

pip install wheel

Now install your Python package locally using the following command from the root of your repository:

pip install .

Use the pip freeze command to confirm that the Python package has been installed. In this case the name of your Python package will be the name defined in the setup.py script.

Use your package locally

In this section we will explore how to use your Python package locally within a Jupyter Notebook. In a Jupyter notebook use the following commands to import your Python package:

# import my flask app and the json library
from flask_application.flask_application import app
import json

It is important to note that in this case the flask_application is named differently than the installed package name. Also in this case the we are installing the app Flask class instance contained in the flask_application.py script within the flask_application folder. Finally, for completeness the command listed below demonstrates how to use the imported Flask app.

# POST a request containing a list of numbers to my flask app 
response = app.test_client().post(
        "/my_sum",
        data=json.dumps({"data": ["1", "2", "3"]}),
        content_type="application/json",
        )

# examine the output
response

Making changes to your Python package

It might occur that the package you created needs to be updated on a regular basis. It can be a pain to constantly upgrade your package manually. In this case it is possible to enable the package to update automatically once changes have been made to its code base.

The command:

pip install -e /path/to/repo

overwrites the directory in the site-packages with a symbolic link to the package you wish to make changes to. Thus, any changes made to this package will be automatically added and identified. The symbolic link looks at the current files in the directory, meaning you can switch branches to see changes or try different things. This is a much nicer and simpler method than repeatedly reinstalling the package.

Conclusion

This repository contains all the details required to create, install and use locally your very own Python package.

python_packages's People

Contributors

davidjohnquinlan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.