<commit_before>.. _sec-development-environment:

Setting up a Development environment
====================================

.. _sec-development-environment-source:

Obtaining, building and running the source
------------------------------------------

This describes the general steps in obtaining, building and running. OS specific instructions can be found
below.

  * Prerequisites:

    * `Python 2.7 <https://python.org>`_ including ``pip``, ``setuptools`` and ``virtualenv``
    * `Git <https://git-scm.com>`_

  * Checkout the OctoPrint sources from their Git repository: ``git clone https://github.com/foosel/OctoPrint.git``
  * Enter the checked out source folder: ``cd OctoPrint``
  * Create a virtual environment in the checked out source folder to use for installing and running OctoPrint and its
    dependencies (this avoids potential versioning issues for the dependencies with system wide installed
    instances): ``virtualenv venv``
  * Activate the virtual environment: ``source venv/bin/activate`` (Linux, MacOS) or
    ``source venv/Scripts/activate`` (Git Bash under Windows, see below)
  * Update ``pip`` in the virtual environment: ``pip install --upgrade pip``
  * Install OctoPrint in `"editable" mode <https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs>`_,
    including its regular *and* development and plugin development dependencies: ``pip install -e .[develop,plugins]``

When the virtual environment is activated you can then:

  * run the OctoPrint server via ``octoprint serve``
  * run the test suite from the checked out source folder via ``nosetests --with-doctest``
  * build the documentation from the ``docs`` sub folder of the checked out sources via ``sphinx-build -b html . _build``

.. _sec-development-environment-source-linux:

Linux
.....

This assumes you'll host your OctoPrint development checkout at ``~/devel/OctoPrint``. If you want to use a different
location, please substitute accordingly.

First make sure you have python including its header files, pip, setuptools, virtualenv, git and some build requirements
installed:

  * On apt based distributions (e.g. Debian, Ubuntu, ...):

    .. code-block:: none

       sudo apt-get install python python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential

  * On zypper based distributions (example below for SLES 12 SP2):

    .. code-block:: none

       sudo zypper ar https://download.opensuse.org/repositories/devel:/languages:/python/SLE_12_SP2/ python_devel
       sudo zypper ref
       sudo zypper in python python-pip python-devel python-setuptools python-virtualenv git libyaml-devel
       sudo zypper in -t pattern Basis-Devel

.. todo::

   Using a Linux distribution that doesn't use ``apt`` or ``zypper``? Please send a
   `Pull Request <https://github.com/foosel/OctoPrint/blob/master/CONTRIBUTING.md#pull-requests>`_ to get the necessary
   steps into this guide!

Then:

.. code-block:: none

   cd ~/devel
   git clone https://github.com/foosel/OctoPrint.git
   cd OctoPrint
   virtualenv venv
   source ./venv/bin/activate
   pip install --upgrade pip
   pip install -e .[develop,plugins]

You can then start OctoPrint via ``~/devel/OctoPrint/venv/bin/octoprint`` or just ``octoprint`` if you activated the virtual
environment.

.. _sec-development-environment-windows:

Windows
.......

This assumes you'll host your OctoPrint development checkout at ``C:\Devel\OctoPrint``. If you want to use a different
location, please substitute accordingly.

First download & install:

  * `Python 2.7.12 Windows x86 MSI installer <https://www.python.org/downloads/release/python-2712/>`_

    * make sure to have the installer add Python to the ``PATH`` and have it install ``pip`` too

  * `Microsoft Visual C++ Compiler for Python 2.7 <http://www.microsoft.com/en-us/download/details.aspx?id=44266>`_
  * `Git for Windows <https://git-for-windows.github.io/>`_

Open the Git Bash you just installed and in that:

.. code-block:: none

   pip install virtualenv
   cd /c/Devel
   git clone https://github.com/foosel/OctoPrint.git
   cd OctoPrint
   virtualenv venv
   source ./venv/Scripts/activate
   pip install --upgrade pip
   pip install -e .[develop,plugins]

.. _sec-development-environment-mac:

Mac OS X
........

.. note::

   This guide is based on the `Setup Guide for Mac OS X on OctoPrint's wiki <https://github.com/foosel/OctoPrint/wiki/Setup-on-Mac/>`_.
   Please report back if it works for you, due to lack of access to a Mac I cannot test it myself. Thanks.

This assumes you'll host your OctoPrint development checkout at ``~/devel/OctoPrint``. If you want to use a different
location, please substitute accordingly.

You'll need a user account with administrator privileges.

  * Install the latest version of Xcode suitable for your OS. For example, OS X 10.11 (El Capitan) requires Xcode 7.
  * Install Xcode's command line tools:

    * ``xcode-select --install``
    * ``sudo xcodebuild`` (ensure the license was accepted)
    * If you have more than one Xcode installed: ``sudo xcode-select -s /Applications/Xcode.app/Contents/Developer``

  * Install Homebrew and use that to install Python:

    * ``ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"``
    * ``brew install python``

  * Install `virtualenv <https://virtualenv.pypa.io/>`_

    * ``pip install virtualenv``

  * Install OctoPrint

    .. code-block:: none

       cd ~/devel
       git clone https://github.com/foosel/OctoPrint.git
       cd OctoPrint
       virtualenv venv
       source venv/bin/activate
       pip install --upgrade pip
       pip install -e .[develop,plugins]

.. _sec-development-environment-ides:

IDE Setup
---------

.. todo::

   Using another IDE than the ones below? Please send a
   `Pull Request <https://github.com/foosel/OctoPrint/blob/master/CONTRIBUTING.md#pull-requests>`_ to get the necessary
   steps into this guide!

.. _sec-development-environment-ides-pycharm:

PyCharm
.......

  - "File" > "Open ...", select OctoPrint checkout folder (e.g. ``~/devel/OctoPrint`` or ``C:\Devel\OctoPrint``)
  - "File" > "Settings ..." > "Project: OctoPrint" > "Project Interpreter" > "Add local ...", select OctoPrint venv
    folder (e.g. ``~/devel/OctoPrint/venv`` or ``C:\Devel\OctoPrint\venv``)
  - Right click "src" in project tree, mark as source folder
  - Add Run/Debug Configuration, select "Python":

    * Name: OctoPrint server
    * Script: path to ``run`` in the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint/run`` or ``C:\Devel\OctoPrint\run``)
    * Script parameters: ``serve --debug``
    * Project: ``OctoPrint``
    * Python interpreter: the ``venv`` local virtual environment
    * Working directory: the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint`` or ``C:\Devel\OctoPrint``)
    * If you want dependencies to auto-update on run if necessary: "Before Launch" > "+" > "Run external tool" > "+"

      * Name: Update OctoPrint dependencies
      * Program: ``$PyInterpreterDirectory$/pip`` (or ``$PyInterpreterDirectory$/pip.exe`` on Windows)
      * Parameters: ``install -e .[develop,plugins]``
      * Working directory: ``$ProjectFileDir$``

  - Add Run/Debug Configuration, select "Python tests" and therein "Nosetests":

    * Name: OctoPrint nosetests
    * Target: Path, ``.``
    * Project: ``OctoPrint``
    * Python interpreter: the ``venv`` local virtual environment
    * Working directory: the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint`` or ``C:\Devel\OctoPrint``)
    * Just like with the run configuration for the server you can also have the dependencies auto-update on run of
      the tests, see above on how to set this up.

  - Add Run/Debug Configuration, select "Python docs" and therein "Sphinx task"

    * Name: OctoPrint docs
    * Command: ``html``
    * Input: the ``docs`` folder in the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint/docs`` or
      ``C:\Devel\OctoPrint\docs``)
    * Output: the ``docs/_build`` folder in the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint/docs/_build`` or
      ``C:\Devel\OctoPrint\docs\_build``)
    * Project: ``OctoPrint``
    * Python interpreter: the ``venv`` local virtual environment
    * Just like with the run configuration for the server you can also have the dependencies auto-update when building
      the documentation, see above on how to set this up.

.. note::

   Make sure you are running a PyCharm version of 2016.1 or later, or manually fix
   `a debugger bug contained in earlier versions <https://youtrack.jetbrains.com/issue/PY-18365>`_ or plugin management
   will not work in your developer install when running OctoPrint from PyCharm in debug mode.
<commit_msg>commands to be able to develop for py2 and py3 in same time<commit_after>.. _sec-development-environment:

Setting up a Development environment
====================================

.. _sec-development-environment-source:

Obtaining, building and running the source
------------------------------------------

This describes the general steps in obtaining, building and running. OS specific instructions can be found
below.

  * Prerequisites:

    * `Python 2.7 <https://python.org>`_ including ``pip``, ``setuptools`` and ``virtualenv``
    * `Python 3.7 <https://python.org>`_ including ``pip``, ``setuptools`` and ``virtualenv``
    * `Git <https://git-scm.com>`_

  * Checkout the OctoPrint sources from their Git repository: 
      * ``git clone https://github.com/foosel/OctoPrint.git``
      * ``git clone -b <your dev branch> https://github.com/foosel/OctoPrint.git``
  * Enter the checked out source folder: ``cd OctoPrint``
  * Create a virtual environment in the checked out source folder to use for installing and running OctoPrint and its
    dependencies (this avoids potential versioning issues for the dependencies with system wide installed
    instances): 
      * PY2: ``virtualenv --python=python2 venv2``
      * PY3: ``virtualenv --python=python3 venv3``
  * Activate the virtual environment: 
      * PY2 : ``source venv2/bin/activate`` (Linux, MacOS) or ``source venv2/Scripts/activate`` (Git Bash under Windows, see below)
      * PY3 : ``source venv3/bin/activate`` (Linux, MacOS) or ``source venv3/Scripts/activate`` (Git Bash under Windows, see below)
  * Update ``pip`` in the virtual environment: 
      * PY2: ``pip2 install --upgrade pip``
      * PY3: ``pip3 install --upgrade pip``
  * Install OctoPrint in `"editable" mode <https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs>`_,
    including its regular *and* development and plugin development dependencies: 
      * PY2: ``pip2 install -e .[develop,plugins]``
      * PY3: ``pip3 install -e .[develop,plugins]``

When the virtual environment is activated you can then:

  * run the OctoPrint server via ``octoprint serve``
  * run the test suite from the checked out source folder via ``nosetests --with-doctest``
  * build the documentation from the ``docs`` sub folder of the checked out sources via ``sphinx-build -b html . _build``

.. _sec-development-environment-source-linux:

Linux
.....

This assumes you'll host your OctoPrint development checkout at ``~/devel/OctoPrint``. If you want to use a different
location, please substitute accordingly.

First make sure you have python including its header files, pip, setuptools, virtualenv, git and some build requirements
installed:

  * On apt based distributions (e.g. Debian, Ubuntu, ...):

    .. code-block:: none

       sudo apt-get install python python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential

  * On zypper based distributions (example below for SLES 12 SP2):

    .. code-block:: none

       sudo zypper ar https://download.opensuse.org/repositories/devel:/languages:/python/SLE_12_SP2/ python_devel
       sudo zypper ref
       sudo zypper in python python-pip python-devel python-setuptools python-virtualenv git libyaml-devel
       sudo zypper in -t pattern Basis-Devel

.. todo::

   Using a Linux distribution that doesn't use ``apt`` or ``zypper``? Please send a
   `Pull Request <https://github.com/foosel/OctoPrint/blob/master/CONTRIBUTING.md#pull-requests>`_ to get the necessary
   steps into this guide!

Then:

.. code-block:: none

   cd ~/devel
   git clone https://github.com/foosel/OctoPrint.git
   cd OctoPrint
   virtualenv venv
   source ./venv/bin/activate
   pip install --upgrade pip
   pip install -e .[develop,plugins]

You can then start OctoPrint via ``~/devel/OctoPrint/venv/bin/octoprint`` or just ``octoprint`` if you activated the virtual
environment.

.. _sec-development-environment-windows:

Windows
.......

This assumes you'll host your OctoPrint development checkout at ``C:\Devel\OctoPrint``. If you want to use a different
location, please substitute accordingly.

First download & install:

  * `Python 2.7.12 Windows x86 MSI installer <https://www.python.org/downloads/release/python-2712/>`_

    * make sure to have the installer add Python to the ``PATH`` and have it install ``pip`` too

  * `Microsoft Visual C++ Compiler for Python 2.7 <http://www.microsoft.com/en-us/download/details.aspx?id=44266>`_
  * `Git for Windows <https://git-for-windows.github.io/>`_

Open the Git Bash you just installed and in that:

.. code-block:: none

   pip install virtualenv
   cd /c/Devel
   git clone https://github.com/foosel/OctoPrint.git
   cd OctoPrint
   virtualenv venv
   source ./venv/Scripts/activate
   pip install --upgrade pip
   pip install -e .[develop,plugins]

.. _sec-development-environment-mac:

Mac OS X
........

.. note::

   This guide is based on the `Setup Guide for Mac OS X on OctoPrint's wiki <https://github.com/foosel/OctoPrint/wiki/Setup-on-Mac/>`_.
   Please report back if it works for you, due to lack of access to a Mac I cannot test it myself. Thanks.

This assumes you'll host your OctoPrint development checkout at ``~/devel/OctoPrint``. If you want to use a different
location, please substitute accordingly.

You'll need a user account with administrator privileges.

  * Install the latest version of Xcode suitable for your OS. For example, OS X 10.11 (El Capitan) requires Xcode 7.
  * Install Xcode's command line tools:

    * ``xcode-select --install``
    * ``sudo xcodebuild`` (ensure the license was accepted)
    * If you have more than one Xcode installed: ``sudo xcode-select -s /Applications/Xcode.app/Contents/Developer``

  * Install Homebrew and use that to install Python:

    * ``ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"``
    * ``brew install python``

  * Install `virtualenv <https://virtualenv.pypa.io/>`_

    * ``pip install virtualenv``

  * Install OctoPrint

    .. code-block:: none

       cd ~/devel
       git clone https://github.com/foosel/OctoPrint.git
       cd OctoPrint
       virtualenv venv
       source venv/bin/activate
       pip install --upgrade pip
       pip install -e .[develop,plugins]

.. _sec-development-environment-ides:

IDE Setup
---------

.. todo::

   Using another IDE than the ones below? Please send a
   `Pull Request <https://github.com/foosel/OctoPrint/blob/master/CONTRIBUTING.md#pull-requests>`_ to get the necessary
   steps into this guide!

.. _sec-development-environment-ides-pycharm:

PyCharm
.......

  - "File" > "Open ...", select OctoPrint checkout folder (e.g. ``~/devel/OctoPrint`` or ``C:\Devel\OctoPrint``)
  - "File" > "Settings ..." > "Project: OctoPrint" > "Project Interpreter" > "Add local ...", select OctoPrint venv
    folder (e.g. ``~/devel/OctoPrint/venv`` or ``C:\Devel\OctoPrint\venv``)
  - Right click "src" in project tree, mark as source folder
  - Add Run/Debug Configuration, select "Python":

    * Name: OctoPrint server
    * Script: path to ``run`` in the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint/run`` or ``C:\Devel\OctoPrint\run``)
    * Script parameters: ``serve --debug``
    * Project: ``OctoPrint``
    * Python interpreter: the ``venv`` local virtual environment
    * Working directory: the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint`` or ``C:\Devel\OctoPrint``)
    * If you want dependencies to auto-update on run if necessary: "Before Launch" > "+" > "Run external tool" > "+"

      * Name: Update OctoPrint dependencies
      * Program: ``$PyInterpreterDirectory$/pip`` (or ``$PyInterpreterDirectory$/pip.exe`` on Windows)
      * Parameters: ``install -e .[develop,plugins]``
      * Working directory: ``$ProjectFileDir$``

  - Add Run/Debug Configuration, select "Python tests" and therein "Nosetests":

    * Name: OctoPrint nosetests
    * Target: Path, ``.``
    * Project: ``OctoPrint``
    * Python interpreter: the ``venv`` local virtual environment
    * Working directory: the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint`` or ``C:\Devel\OctoPrint``)
    * Just like with the run configuration for the server you can also have the dependencies auto-update on run of
      the tests, see above on how to set this up.

  - Add Run/Debug Configuration, select "Python docs" and therein "Sphinx task"

    * Name: OctoPrint docs
    * Command: ``html``
    * Input: the ``docs`` folder in the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint/docs`` or
      ``C:\Devel\OctoPrint\docs``)
    * Output: the ``docs/_build`` folder in the OctoPrint checkout folder (e.g. ``~/devel/OctoPrint/docs/_build`` or
      ``C:\Devel\OctoPrint\docs\_build``)
    * Project: ``OctoPrint``
    * Python interpreter: the ``venv`` local virtual environment
    * Just like with the run configuration for the server you can also have the dependencies auto-update when building
      the documentation, see above on how to set this up.

.. note::

   Make sure you are running a PyCharm version of 2016.1 or later, or manually fix
   `a debugger bug contained in earlier versions <https://youtrack.jetbrains.com/issue/PY-18365>`_ or plugin management
   will not work in your developer install when running OctoPrint from PyCharm in debug mode.

{'fraction_non_alphanumeric': 0.12531827742721133, 'fraction_numerical': 0.005756669987822429, 'mean_word_length': 3.439066339066339, 'pattern_counts': {'":': 4, '<': 27, '<?xml version=': 0, '>': 43, 'https://': 34, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 12, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5264285', 'n_tokens_mistral': 5619, 'n_tokens_neox': 5215, 'n_words': 1922}