@ -1,7 +1,7 @@
.. _tutorial-setuptools :
.. _tutorial-packaging :
Step 3: Installing flaskr with setuptools
Step 3: Installing flaskr as a Package
=========================================
======================================
Flask is now shipped with built-in support for `Click`_ . Click provides
Flask is now shipped with built-in support for `Click`_ . Click provides
Flask with enhanced and extensible command line utilities. Later in this
Flask with enhanced and extensible command line utilities. Later in this
@ -9,17 +9,21 @@ tutorial you will see exactly how to extend the ``flask`` command line
interface (CLI).
interface (CLI).
A useful pattern to manage a Flask application is to install your app
A useful pattern to manage a Flask application is to install your app
using `setuptools`_ . This involves creating a :file: `setup.py`
following the `Python Packaging Guide`_ . Presently this involves
in the projects root directory. You also need to add an empty
creating two new files; :file: `setup.py` and :file: `MANIFEST.in` in the
:file: `__init__.py` file to make the :file: `flaskr/flaskr` directory
projects root directory. You also need to add an :file: `__init__.py`
a package. The code structure at this point should be::
file to make the :file: `flaskr/flaskr` directory a package. After these
changes, your code structure should be::
/flaskr
/flaskr
/flaskr
/flaskr
__init__.py
__init__.py
/static
/static
/templates
/templates
flaskr.py
schema.sql
setup.py
setup.py
MANIFEST.in
The content of the `` setup.py `` file for `` flaskr `` is:
The content of the `` setup.py `` file for `` flaskr `` is:
@ -46,22 +50,37 @@ following lines::
graft flaskr/static
graft flaskr/static
include flaskr/schema.sql
include flaskr/schema.sql
To simplify locating the application, add the following import statement
into this file, :file: `flaskr/__init__.py` :
.. sourcecode :: python
from flaskr import app
This import statement brings the application instance into the top-level
of the application package. When it is time to run the application, the
Flask development server needs the location of the app instance. This
import statement simplifies the location process. Without it the export
statement a few steps below would need to be
`` export FLASK_APP=flaskr.flaskr `` .
At this point you should be able to install the application. As usual, it
At this point you should be able to install the application. As usual, it
is recommended to install your Flask application within a `virtualenv`_ .
is recommended to install your Flask application within a `virtualenv`_ .
With that said, go ahead and install the application with::
With that said, go ahead and install the application with::
pip install --editable .
pip install --editable .
.. note :: The above installation command assumes that it is run within the
The above installation command assumes that it is run within the projects
projects root directory, `flaskr/` . Also, the `editable` flag allows
root directory, `flaskr/` . The `editable` flag allows editing
editing source code without having to reinstall the Flask app each time
source code without having to reinstall the Flask app each time you make
you make changes.
changes. The flaskr app is now installed in your virtualenv (see output
of `` pip freeze `` ).
With that out of the way, you should be able to start up the application.
With that out of the way, you should be able to start up the application.
Do this with the following commands::
Do this with the following commands::
export FLASK_APP=flaskr.flaskr
export FLASK_APP=flaskr
export FLASK_DEBUG=1
export FLASK_DEBUG=true
flask run
flask run
(In case you are on Windows you need to use `set` instead of `export` ).
(In case you are on Windows you need to use `set` instead of `export` ).
@ -85,5 +104,5 @@ but first, you should get the database working.
Continue with :ref: `tutorial-dbcon` .
Continue with :ref: `tutorial-dbcon` .
.. _Click: http://click.pocoo.org
.. _Click: http://click.pocoo.org
.. _setuptools: https://setuptools.readthedocs.io
.. _Python Packaging Guide: https://packaging.python.org
.. _virtualenv: https://virtualenv.pypa.io
.. _virtualenv: https://virtualenv.pypa.io