summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki2/installation.rst
diff options
context:
space:
mode:
authorChristoph Zwerschke <cito@online.de>2016-04-19 20:07:12 +0200
committerChristoph Zwerschke <cito@online.de>2016-04-19 20:07:12 +0200
commit3629c49e46207ff5162a82883c14937e6ef4c186 (patch)
tree1306181202cb8313f16080789f5b9ab1eeb61d53 /docs/tutorials/wiki2/installation.rst
parent804ba0b2f434781e77d2b5191f1cd76a490f6610 (diff)
parent6c16fb020027fac47e4d2e335cd9e264dba8aa3b (diff)
downloadpyramid-3629c49e46207ff5162a82883c14937e6ef4c186.tar.gz
pyramid-3629c49e46207ff5162a82883c14937e6ef4c186.tar.bz2
pyramid-3629c49e46207ff5162a82883c14937e6ef4c186.zip
Merge remote-tracking branch 'refs/remotes/Pylons/master'
Diffstat (limited to 'docs/tutorials/wiki2/installation.rst')
-rw-r--r--docs/tutorials/wiki2/installation.rst555
1 files changed, 418 insertions, 137 deletions
diff --git a/docs/tutorials/wiki2/installation.rst b/docs/tutorials/wiki2/installation.rst
index bd597b5df..f4676345e 100644
--- a/docs/tutorials/wiki2/installation.rst
+++ b/docs/tutorials/wiki2/installation.rst
@@ -1,240 +1,521 @@
+.. _wiki2_installation:
+
============
Installation
============
-This tutorial assumes that Python and virtualenv are already installed
-and working in your system. If you need help setting this up, you should
-refer to the chapters on :ref:`installing_chapter`.
+Before you begin
+----------------
+
+This tutorial assumes that you have already followed the steps in
+:ref:`installing_chapter`, except **do not create a virtual environment or
+install Pyramid**. Thereby you will satisfy the following requirements.
+
+* A Python interpreter is installed on your operating system.
+* You've satisfied the :ref:`requirements-for-installing-packages`.
+
+
+Create directory to contain the project
+---------------------------------------
+
+We need a workspace for our project files.
+
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
+
+ $ mkdir ~/pyramidtut
+
+On Windows
+^^^^^^^^^^
+
+.. code-block:: doscon
+
+ c:\> mkdir pyramidtut
+
+
+Create and use a virtual Python environment
+-------------------------------------------
+
+Next let's create a virtual environment workspace for our project. We will use
+the ``VENV`` environment variable instead of the absolute path of the virtual
+environment.
+
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
+
+ $ export VENV=~/pyramidtut
+ $ python3 -m venv $VENV
+
+On Windows
+^^^^^^^^^^
+
+.. code-block:: doscon
+
+ c:\> set VENV=c:\pyramidtut
+
+Each version of Python uses different paths, so you will need to adjust the
+path to the command for your Python version.
+
+Python 2.7:
+
+.. code-block:: doscon
+
+ c:\> c:\Python27\Scripts\virtualenv %VENV%
-Preparation
-===========
+Python 3.5:
-Please take the following steps to prepare for the tutorial. The
-steps are slightly different depending on whether you're using UNIX or
-Windows.
+.. code-block:: doscon
-Preparation, UNIX
------------------
+ c:\> c:\Python35\Scripts\python -m venv %VENV%
-#. Install SQLite3 and its development packages if you don't already
- have them installed. Usually this is via your system's package
- manager. For example, on a Debian Linux system, do ``sudo apt-get
- install libsqlite3-dev``.
-#. Use your Python's virtualenv to make a workspace:
+Upgrade ``pip`` and ``setuptools`` in the virtual environment
+-------------------------------------------------------------
- .. code-block:: text
+On UNIX
+^^^^^^^
- $ path/to/my/Python-2.6/bin/virtualenv --no-site-packages pyramidtut
+.. code-block:: bash
-#. Switch to the ``pyramidtut`` directory:
+ $ $VENV/bin/pip install --upgrade pip setuptools
- .. code-block:: text
+On Windows
+^^^^^^^^^^
- $ cd pyramidtut
+.. code-block:: doscon
-#. Use ``easy_install`` to get :app:`Pyramid` and its direct
- dependencies installed:
+ c:\> %VENV%\Scripts\pip install --upgrade pip setuptools
- .. code-block:: text
- $ bin/easy_install pyramid
+Install Pyramid into the virtual Python environment
+---------------------------------------------------
-#. Use ``easy_install`` to install various packages from PyPI.
+On UNIX
+^^^^^^^
- .. code-block:: text
+.. code-block:: bash
- $ bin/easy_install docutils nose coverage zope.sqlalchemy \
- SQLAlchemy repoze.tm2
+ $ $VENV/bin/pip install pyramid
-Preparation, Windows
---------------------
+On Windows
+^^^^^^^^^^
-#. Use your Python's virtualenv to make a workspace:
+.. code-block:: doscon
- .. code-block:: text
+ c:\> %VENV%\Scripts\pip install pyramid
- c:\> c:\Python26\Scripts\virtualenv --no-site-packages pyramidtut
-#. Switch to the ``pyramidtut`` directory:
+Install SQLite3 and its development packages
+--------------------------------------------
- .. code-block:: text
+If you used a package manager to install your Python or if you compiled
+your Python from source, then you must install SQLite3 and its
+development packages. If you downloaded your Python as an installer
+from https://www.python.org, then you already have it installed and can skip
+this step.
- c:\> cd pyramidtut
+If you need to install the SQLite3 packages, then, for example, using
+the Debian system and ``apt-get``, the command would be the following:
-#. Use ``easy_install`` to get :app:`Pyramid` and its direct
- dependencies installed:
+.. code-block:: bash
- .. code-block:: text
+ $ sudo apt-get install libsqlite3-dev
- c:\pyramidtut> Scripts\easy_install pyramid
-#. Use ``easy_install`` to install various packages from PyPI.
+Change directory to your virtual Python environment
+---------------------------------------------------
- .. code-block:: text
+Change directory to the ``pyramidtut`` directory, which is both your workspace
+and your virtual environment.
- c:\pyramidtut> Scripts\easy_install docutils ^
- nose coverage zope.sqlalchemy SQLAlchemy repoze.tm2
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
+
+ $ cd pyramidtut
+
+On Windows
+^^^^^^^^^^
+
+.. code-block:: doscon
+
+ c:\> cd pyramidtut
.. _sql_making_a_project:
-Making a Project
-================
+Making a project
+----------------
-Your next step is to create a project. :app:`Pyramid` supplies a
-variety of scaffolds to generate sample projects. We will use the
-``pyramid_routesalchemy`` scaffold, which generates an application
+Your next step is to create a project. For this tutorial we will use
+the :term:`scaffold` named ``alchemy`` which generates an application
that uses :term:`SQLAlchemy` and :term:`URL dispatch`.
-The below instructions assume your current working directory is the
-"virtualenv" named "pyramidtut".
+:app:`Pyramid` supplies a variety of scaffolds to generate sample projects. We
+will use ``pcreate``, a script that comes with Pyramid, to create our project
+using a scaffold.
+
+By passing ``alchemy`` into the ``pcreate`` command, the script creates the
+files needed to use SQLAlchemy. By passing in our application name
+``tutorial``, the script inserts that application name into all the required
+files. For example, ``pcreate`` creates the ``initialize_tutorial_db`` in the
+``pyramidtut/bin`` directory.
-On UNIX:
+The below instructions assume your current working directory is "pyramidtut".
-.. code-block:: text
+On UNIX
+^^^^^^^
- $ bin/paster create -t pyramid_routesalchemy tutorial
+.. code-block:: bash
-On Windows:
+ $ $VENV/bin/pcreate -s alchemy tutorial
-.. code-block:: text
+On Windows
+^^^^^^^^^^
- c:\pyramidtut> Scripts\paster create -t pyramid_routesalchemy tutorial
+.. code-block:: doscon
-.. note:: If you are using Windows, the ``pyramid_routesalchemy``
- scaffold may not deal gracefully with installation into a
- location that contains spaces in the path. If you experience
- startup problems, try putting both the virtualenv and the project
- into directories that do not contain spaces in their paths.
+ c:\pyramidtut> %VENV%\Scripts\pcreate -s alchemy tutorial
-Installing the Project in "Development Mode"
-============================================
+.. note:: If you are using Windows, the ``alchemy`` scaffold may not deal
+ gracefully with installation into a location that contains spaces in the
+ path. If you experience startup problems, try putting both the virtual
+ environment and the project into directories that do not contain spaces in
+ their paths.
-In order to do development on the project easily, you must "register"
-the project as a development egg in your workspace using the
-``setup.py develop`` command. In order to do so, cd to the "tutorial"
-directory you created in :ref:`sql_making_a_project`, and run the
-"setup.py develop" command using virtualenv Python interpreter.
-On UNIX:
+.. _installing_project_in_dev_mode:
-.. code-block:: text
+Installing the project in development mode
+------------------------------------------
+
+In order to do development on the project easily, you must "register" the
+project as a development egg in your workspace using the ``pip install -e .``
+command. In order to do so, change directory to the ``tutorial`` directory that
+you created in :ref:`sql_making_a_project`, and run the ``pip install -e .``
+command using the virtual environment Python interpreter.
+
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
$ cd tutorial
- $ ../bin/python setup.py develop
+ $ $VENV/bin/pip install -e .
-On Windows:
+On Windows
+^^^^^^^^^^
-.. code-block:: text
+.. code-block:: doscon
c:\pyramidtut> cd tutorial
- c:\pyramidtut\tutorial> ..\Scripts\python setup.py develop
+ c:\pyramidtut\tutorial> %VENV%\Scripts\pip install -e .
-.. _sql_running_tests:
+The console will show ``pip`` checking for packages and installing missing
+packages. Success executing this command will show a line like the following:
-Running the Tests
-=================
+.. code-block:: bash
-After you've installed the project in development mode, you may run
-the tests for the project.
+ Successfully installed Chameleon-2.24 Mako-1.0.4 MarkupSafe-0.23 \
+ Pygments-2.1.3 SQLAlchemy-1.0.12 pyramid-chameleon-0.3 \
+ pyramid-debugtoolbar-2.4.2 pyramid-mako-1.0.2 pyramid-tm-0.12.1 \
+ transaction-1.4.4 tutorial waitress-0.8.10 zope.sqlalchemy-0.7.6
-On UNIX:
-.. code-block:: text
+.. _install-testing-requirements:
- $ ../bin/python setup.py test -q
+Install testing requirements
+----------------------------
-On Windows:
+In order to run tests, we need to install the testing requirements. This is
+done through our project's ``setup.py`` file, in the ``tests_require`` and
+``extras_require`` stanzas, and by issuing the command below for your
+operating system.
-.. code-block:: text
+.. literalinclude:: src/installation/setup.py
+ :language: python
+ :linenos:
+ :lineno-start: 22
+ :lines: 22-26
- c:\pyramidtut\tutorial> ..\Scripts\python setup.py test -q
+.. literalinclude:: src/installation/setup.py
+ :language: python
+ :linenos:
+ :lineno-start: 45
+ :lines: 45-47
-Starting the Application
-========================
+On UNIX
+^^^^^^^
-Start the application.
+.. code-block:: bash
+
+ $ $VENV/bin/pip install -e ".[testing]"
+
+On Windows
+^^^^^^^^^^
+
+.. code-block:: doscon
+
+ c:\pyramidtut\tutorial> %VENV%\Scripts\pip install -e ".[testing]"
+
+
+.. _sql_running_tests:
+
+Run the tests
+-------------
+
+After you've installed the project in development mode as well as the testing
+requirements, you may run the tests for the project.
+
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
+
+ $ $VENV/bin/py.test tutorial/tests.py -q
+
+On Windows
+^^^^^^^^^^
-On UNIX:
+.. code-block:: doscon
-.. code-block:: text
+ c:\pyramidtut\tutorial> %VENV%\Scripts\py.test tutorial\tests.py -q
- $ ../bin/paster serve development.ini --reload
+For a successful test run, you should see output that ends like this:
-On Windows:
+.. code-block:: bash
-.. code-block:: text
+ ..
+ 2 passed in 0.44 seconds
- c:\pyramidtut\tutorial> ..\Scripts\paster serve development.ini --reload
-Exposing Test Coverage Information
-==================================
+Expose test coverage information
+--------------------------------
-You can run the ``nosetests`` command to see test coverage
-information. This runs the tests in the same way that ``setup.py
-test`` does but provides additional "coverage" information, exposing
-which lines of your project are "covered" (or not covered) by the
+You can run the ``py.test`` command to see test coverage information. This
+runs the tests in the same way that ``py.test`` does, but provides additional
+"coverage" information, exposing which lines of your project are covered by the
tests.
-To get this functionality working, we'll need to install a couple of
-other packages into our ``virtualenv``: ``nose`` and ``coverage``:
+We've already installed the ``pytest-cov`` package into our virtual
+environment, so we can run the tests with coverage.
-On UNIX:
+On UNIX
+^^^^^^^
-.. code-block:: text
+.. code-block:: bash
- $ ../bin/easy_install nose coverage
+ $ $VENV/bin/py.test --cov=tutorial --cov-report=term-missing tutorial/tests.py
-On Windows:
+On Windows
+^^^^^^^^^^
-.. code-block:: text
+.. code-block:: doscon
- c:\pyramidtut\tutorial> ..\Scripts\easy_install nose coverage
+ c:\pyramidtut\tutorial> %VENV%\Scripts\py.test --cov=tutorial \
+ --cov-report=term-missing tutorial\tests.py
-Once ``nose`` and ``coverage`` are installed, we can actually run the
-coverage tests.
+If successful, you will see output something like this:
-On UNIX:
+.. code-block:: bash
-.. code-block:: text
+ ======================== test session starts ========================
+ platform Python 3.5.1, pytest-2.9.1, py-1.4.31, pluggy-0.3.1
+ rootdir: /Users/stevepiercy/projects/pyramidtut/tutorial, inifile:
+ plugins: cov-2.2.1
+ collected 2 items
- $ ../bin/nosetests --cover-package=tutorial --cover-erase --with-coverage
+ tutorial/tests.py ..
+ ------------------ coverage: platform Python 3.5.1 ------------------
+ Name Stmts Miss Cover Missing
+ ----------------------------------------------------------------
+ tutorial/__init__.py 8 6 25% 7-12
+ tutorial/models/__init__.py 22 0 100%
+ tutorial/models/meta.py 5 0 100%
+ tutorial/models/mymodel.py 8 0 100%
+ tutorial/routes.py 3 3 0% 1-3
+ tutorial/scripts/__init__.py 0 0 100%
+ tutorial/scripts/initializedb.py 26 26 0% 1-45
+ tutorial/tests.py 39 0 100%
+ tutorial/views/__init__.py 0 0 100%
+ tutorial/views/default.py 12 0 100%
+ tutorial/views/notfound.py 4 4 0% 1-7
+ ----------------------------------------------------------------
+ TOTAL 127 39 69%
-On Windows:
+ ===================== 2 passed in 0.57 seconds ======================
-.. code-block:: text
+Our package doesn't quite have 100% test coverage.
- c:\pyramidtut\tutorial> ..\Scripts\nosetests --cover-package=tutorial ^
- --cover-erase --with-coverage
-Looks like our package's ``models`` module doesn't quite have 100%
-test coverage.
+.. _initialize_db_wiki2:
-Visit the Application in a Browser
-==================================
+Initializing the database
+-------------------------
-In a browser, visit ``http://localhost:6543/``. You will see the
-generated application's default page.
+We need to use the ``initialize_tutorial_db`` :term:`console script` to
+initialize our database.
-Decisions the ``pyramid_routesalchemy`` Scaffold Has Made For You
-=================================================================
+.. note::
+
+ The ``initialize_tutorial_db`` command does not perform a migration, but
+ rather it simply creates missing tables and adds some dummy data. If you
+ already have a database, you should delete it before running
+ ``initialize_tutorial_db`` again.
+
+.. note::
+
+ The ``initialize_tutorial_db`` command is not performing a migration but
+ rather simply creating missing tables and adding some dummy data. If you
+ already have a database, you should delete it before running
+ ``initialize_tutorial_db`` again.
+
+Type the following command, making sure you are still in the ``tutorial``
+directory (the directory with a ``development.ini`` in it):
+
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
+
+ $ $VENV/bin/initialize_tutorial_db development.ini
+
+On Windows
+^^^^^^^^^^
+
+.. code-block:: doscon
+
+ c:\pyramidtut\tutorial> %VENV%\Scripts\initialize_tutorial_db development.ini
+
+The output to your console should be something like this:
+
+.. code-block:: bash
+
+ 2016-04-09 00:53:37,801 INFO [sqlalchemy.engine.base.Engine:1192][MainThread] SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
+ 2016-04-09 00:53:37,801 INFO [sqlalchemy.engine.base.Engine:1193][MainThread] ()
+ 2016-04-09 00:53:37,802 INFO [sqlalchemy.engine.base.Engine:1192][MainThread] SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
+ 2016-04-09 00:53:37,802 INFO [sqlalchemy.engine.base.Engine:1193][MainThread] ()
+ 2016-04-09 00:53:37,802 INFO [sqlalchemy.engine.base.Engine:1097][MainThread] PRAGMA table_info("models")
+ 2016-04-09 00:53:37,803 INFO [sqlalchemy.engine.base.Engine:1100][MainThread] ()
+ 2016-04-09 00:53:37,803 INFO [sqlalchemy.engine.base.Engine:1097][MainThread]
+ CREATE TABLE models (
+ id INTEGER NOT NULL,
+ name TEXT,
+ value INTEGER,
+ CONSTRAINT pk_models PRIMARY KEY (id)
+ )
+
+
+ 2016-04-09 00:53:37,803 INFO [sqlalchemy.engine.base.Engine:1100][MainThread] ()
+ 2016-04-09 00:53:37,804 INFO [sqlalchemy.engine.base.Engine:686][MainThread] COMMIT
+ 2016-04-09 00:53:37,805 INFO [sqlalchemy.engine.base.Engine:1097][MainThread] CREATE UNIQUE INDEX my_index ON models (name)
+ 2016-04-09 00:53:37,805 INFO [sqlalchemy.engine.base.Engine:1100][MainThread] ()
+ 2016-04-09 00:53:37,806 INFO [sqlalchemy.engine.base.Engine:686][MainThread] COMMIT
+ 2016-04-09 00:53:37,807 INFO [sqlalchemy.engine.base.Engine:646][MainThread] BEGIN (implicit)
+ 2016-04-09 00:53:37,808 INFO [sqlalchemy.engine.base.Engine:1097][MainThread] INSERT INTO models (name, value) VALUES (?, ?)
+ 2016-04-09 00:53:37,808 INFO [sqlalchemy.engine.base.Engine:1100][MainThread] ('one', 1)
+ 2016-04-09 00:53:37,809 INFO [sqlalchemy.engine.base.Engine:686][MainThread] COMMIT
+
+Success! You should now have a ``tutorial.sqlite`` file in your current
+working directory. This is an SQLite database with a single table defined in it
+(``models``).
+
+.. _wiki2-start-the-application:
+
+Start the application
+---------------------
+
+Start the application.
+
+On UNIX
+^^^^^^^
+
+.. code-block:: bash
-Creating a project using the ``pyramid_routesalchemy`` scaffold makes
-the following assumptions:
+ $ $VENV/bin/pserve development.ini --reload
-- you are willing to use :term:`SQLAlchemy` as a database access tool
+On Windows
+^^^^^^^^^^
-- you are willing to use :term:`url dispatch` to map URLs to code.
+.. code-block:: doscon
-- you want to configure your application *imperatively* (no
- :term:`declarative configuration` such as ZCML).
+ c:\pyramidtut\tutorial> %VENV%\Scripts\pserve development.ini --reload
.. note::
- :app:`Pyramid` supports any persistent storage mechanism (e.g. object
- database or filesystem files, etc). It also supports an additional
- mechanism to map URLs to code (:term:`traversal`). However, for the
- purposes of this tutorial, we'll only be using url dispatch and
- SQLAlchemy.
+ Your OS firewall, if any, may pop up a dialog asking for authorization
+ to allow python to accept incoming network connections.
+
+If successful, you will see something like this on your console::
+
+ Starting subprocess with file monitor
+ Starting server in PID 82349.
+ serving on http://127.0.0.1:6543
+
+This means the server is ready to accept requests.
+
+
+Visit the application in a browser
+----------------------------------
+
+In a browser, visit http://localhost:6543/. You will see the generated
+application's default page.
+
+One thing you'll notice is the "debug toolbar" icon on right hand side of the
+page. You can read more about the purpose of the icon at
+:ref:`debug_toolbar`. It allows you to get information about your
+application while you develop.
+
+
+Decisions the ``alchemy`` scaffold has made for you
+---------------------------------------------------
+
+Creating a project using the ``alchemy`` scaffold makes the following
+assumptions:
+
+- You are willing to use :term:`SQLAlchemy` as a database access tool.
+
+- You are willing to use :term:`URL dispatch` to map URLs to code.
+
+- You want to use zope.sqlalchemy_, pyramid_tm_, and the transaction_ packages
+ to scope sessions to requests.
+
+- You want to use pyramid_jinja2_ to render your templates. Different
+ templating engines can be used, but we had to choose one to make this
+ tutorial. See :ref:`available_template_system_bindings` for some options.
+
+.. note::
+
+ :app:`Pyramid` supports any persistent storage mechanism (e.g., object
+ database or filesystem files). It also supports an additional mechanism to
+ map URLs to code (:term:`traversal`). However, for the purposes of this
+ tutorial, we'll only be using URL dispatch and SQLAlchemy.
+
+.. _pyramid_jinja2:
+ http://docs.pylonsproject.org/projects/pyramid-jinja2/en/latest/
+
+.. _pyramid_tm:
+ http://docs.pylonsproject.org/projects/pyramid-tm/en/latest/
+
+.. _zope.sqlalchemy:
+ https://pypi.python.org/pypi/zope.sqlalchemy
+
+.. _transaction:
+ http://zodb.readthedocs.org/en/latest/transactions.html
+
+.. _pyramid_jinja2:
+ http://docs.pylonsproject.org/projects/pyramid-jinja2/en/latest/
+
+.. _pyramid_tm:
+ http://docs.pylonsproject.org/projects/pyramid-tm/en/latest/
+
+.. _zope.sqlalchemy:
+ https://pypi.python.org/pypi/zope.sqlalchemy
+.. _transaction:
+ http://zodb.readthedocs.org/en/latest/transactions.html