<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../../general.ent">
  %general-entities;

  <!ENTITY python2-download-http
     "https://www.python.org/ftp/python/&python2-version;/Python-&python2-version;.tar.xz">
  <!ENTITY python2-download-ftp  " ">
  <!ENTITY python2-md5sum        "38d530f7efc373d64a8fb1637e3baaa7">
  <!ENTITY python2-size          "12 MB">
  <!ENTITY python2-buildsize     "228 MB (additional 18 MB for the tests)">
  <!ENTITY python2-time          "1.0 SBU (additional 4.6 SBU for tests)">

  <!ENTITY python2htmldoc-download-http
     "https://docs.python.org/ftp/python/doc/&python2-version;/python-&python2-version;-docs-html.tar.bz2">
  <!ENTITY python2htmldoc-md5sum        "8804bc888f6b7a1cc217be1acbb59ad6">
  <!ENTITY python2htmldoc-size          "4.4 MB">
]>

<sect1 id="python2" xreflabel="Python-&python2-version;">
  <?dbhtml filename="python2.html" ?>

  <sect1info>
    <othername>$LastChangedBy: bdubbs $</othername>
    <date>$Date: 2015-02-20 16:15:05 -0500 (Fri, 20 Feb 2015) $</date>
  </sect1info>

  <title>Python-&python2-version;</title>

  <indexterm zone="python2">
    <primary sortas="a-Python2">Python2</primary>
  </indexterm>

  <sect2 role="package">
    <title>Introduction to Python 2</title>

    <para>
      The <application>Python 2</application> package contains the
      <application>Python</application> development environment. It is useful
      for object-oriented programming, writing scripts, prototyping large
      programs or developing entire applications. This version is for backward
      compatibility with other dependent packages.
    </para>

    &lfs77_checked;

    <bridgehead renderas="sect3">Package Information</bridgehead>
    <itemizedlist spacing="compact">
      <listitem>
        <para>
          Download (HTTP): <ulink url="&python2-download-http;"/>
        </para>
      </listitem>
      <listitem>
        <para>
          Download (FTP): <ulink url="&python2-download-ftp;"/>
        </para>
      </listitem>
      <listitem>
        <para>
          Download MD5 sum: &python2-md5sum;
        </para>
      </listitem>
      <listitem>
        <para>
          Download size: &python2-size;
        </para>
      </listitem>
      <listitem>
        <para>
          Estimated disk space required: &python2-buildsize;
        </para>
      </listitem>
      <listitem>
        <para>
          Estimated build time: &python2-time;
        </para>
      </listitem>
    </itemizedlist>

    <bridgehead renderas="sect3">Additional Downloads</bridgehead>

    <itemizedlist spacing="compact">
      <listitem>
        <para>
           Required patch if you wish to run the test suite:
           <ulink url="&patch-root;/Python-&python2-version;-skip_test_gdb-1.patch"/>
        </para>
      </listitem>
    </itemizedlist>

    <itemizedlist spacing="compact">
      <title>Optional HTML Documentation</title>
      <listitem>
        <para>
          Download (HTTP): <ulink url="&python2htmldoc-download-http;"/>
        </para>
      </listitem>
      <listitem>
        <para>
          Download MD5 sum: &python2htmldoc-md5sum;
        </para>
      </listitem>
      <listitem>
        <para>
          Download size: &python2htmldoc-size;
        </para>
      </listitem>
    </itemizedlist>

    <bridgehead renderas="sect3">Python 2 Dependencies</bridgehead>

    <bridgehead renderas="sect4">Recommended</bridgehead>
    <para role="recommended">
      <xref linkend="libffi"/>
    </para>

    <bridgehead renderas="sect4">Optional</bridgehead>
    <para role="optional">
      <xref linkend="bluez"/> and
      <xref linkend="valgrind"/>
    </para>

    <bridgehead renderas="sect4">Optional (For Additional Modules)</bridgehead>
    <para role="optional">
      <xref linkend="db"/>,
      <xref linkend="openssl"/>,
      <xref linkend="sqlite"/> and
      <xref linkend="tk"/>
    </para>

    <note>
      <para>
	<!-- new for ff31.  Any reasonable version of openssl will do,
	even old maintained versions, so do not xref openssl here -->
        If you are building <xref linkend="thunderbird"/> or
        <xref linkend="firefox"/> 
        you must install <application>openssl</application> before you build
        <application>Python 2</application>.
      </para>
    </note>

    <para condition="html" role="usernotes">
      User Notes: <ulink url="&blfs-wiki;/Python"/>
    </para>
  </sect2>

  <sect2 role="installation">
    <title>Installation of Python 2</title>

    <para>
      Install <application>Python 2</application> by running the following
      commands:
    </para>

<screen><userinput>./configure --prefix=/usr       \
            --enable-shared     \
            --with-system-expat \
            --with-system-ffi   \
            --enable-unicode=ucs4 &amp;&amp;
make</userinput></screen>

    <para>
      If you wish to run the test suite, disable a test that fails:
    </para>

<screen><userinput>patch -Np1 -i ../Python-&python2-version;-skip_test_gdb-1.patch</userinput></screen>

    <para>
      To test the results, issue: <command>make test</command>.
    </para>

    <para>
      Now, as the <systemitem class="username">root</systemitem> user:
    </para>

<screen role="root"><userinput>make install &amp;&amp;
chmod -v 755 /usr/lib/libpython&python2-majorver;.so.1.0</userinput></screen>

    <para>
      Since <application>Python 2</application> is in maintenance mode, and
      <application>Python 3</application> is recommended by upstream for
      development, you probably do not need to install the documentation.
      However, if you still want to install documentation for both
      <application>Python</application> versions, be sure to define the
      <envar>PYTHONDOCS</envar>
      variable for the version you want to use, each time you need to consult
      the documentation. If you have downloaded the preformatted documentation
      from <ulink url="http://docs.python.org/download.html"/>, install it
      as the <systemitem class="username">root</systemitem> user:
    </para>

<screen role="root"><userinput>install -v -dm755 /usr/share/doc/python-&python2-version; &amp;&amp;
tar --strip-components=1 -C /usr/share/doc/python-&python2-version; \
    --no-same-owner -xvf ../python-&python2-version;-docs-html.tar.bz2      &amp;&amp;
find /usr/share/doc/python-&python2-version; -type d -exec chmod 0755 {} \; &amp;&amp;
find /usr/share/doc/python-&python2-version; -type f -exec chmod 0644 {} \;</userinput></screen>
  </sect2>

  <sect2 role="commands">
    <title>Command Explanations</title>

    <para>
      <option>--with-system-expat</option>: This switch enables linking against
      system version of <application>Expat</application>. 
    </para>

    <para>
      <option>--with-system-ffi</option>: This switch enables linking against
      system version of <application>libffi</application>. Remove if you have
      not installed <xref linkend="libffi"/>.
    </para>

    <para>
      <parameter>--enable-unicode=ucs4</parameter>: This switch enables
      32bit Unicode support in <application>Python</application>.
    </para>

    <para>
      <parameter>--with-dbmliborder=bdb:gdbm:ndbm</parameter>: Use this switch
      if you want to build <application>Python</application> DBM Module
      against <application>Berkeley DB</application> instead of
      <application>GDBM</application>.
    </para>

    <para>
      <command>chmod ...</command>: Fix permissions for libraries to be
      consistent with other libraries.
    </para>

  </sect2>

  <sect2 role="configuration">
    <title>Configuring Python 2</title>

    <para>
      In order for <command>python</command> to find the installed
      documentation, you must add the following environment variable to
      individual user's or the system's profile:
    </para>

<screen role="root"><userinput>export PYTHONDOCS=/usr/share/doc/python-&python2-version;</userinput></screen>

  </sect2>

  <sect2 role="content">
    <title>Contents</title>

    <segmentedlist>
      <segtitle>Installed Programs</segtitle>
      <segtitle>Installed Library</segtitle>
      <segtitle>Installed Directories</segtitle>

      <seglistitem>
        <seg>
          2to3, pydoc, python (symlink), python-config (symlink),
          python2 (symlink), python2-config (symlink),
          python&python2-majorver;, python&python2-majorver;-config,
          smtpd.py, and idle
        </seg>
        <seg>
          libpython&python2-majorver;.so
          and several under /usr/lib/python&python2-majorver;/{config,lib-dynload}
        </seg>
        <seg>
          /usr/include/python&python2-majorver;,
          /usr/lib/python&python2-majorver;, and
          /usr/share/doc/python-&python2-version;</seg>
      </seglistitem>
    </segmentedlist>

    <variablelist>
      <bridgehead renderas="sect3">Short Descriptions</bridgehead>
      <?dbfo list-presentation="list"?>
      <?dbhtml list-presentation="table"?>

      <varlistentry id="python2-2to3">
        <term><command>2to3</command></term>
        <listitem>
          <para>
            is a <application>Python</application> program that reads
            <application>Python 2.x</application> source code and applies a series of
            fixers to transform it into valid <application>Python 3.x</application>
            code.
          </para>
          <indexterm zone="python2 python2-2to3">
            <primary sortas="b-2to3">2to3</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="idle">
        <term><command>idle</command></term>
        <listitem>
          <para>
            is a wrapper script that opens a <application>Python</application>
            aware GUI editor. For this script to run, you must have installed
            <application>Tk</application> before Python so that the Tkinter
            Python module is built.
          </para>
          <indexterm zone="python2 idle">
            <primary sortas="b-idle">idle</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="pydoc2">
        <term><command>pydoc</command></term>
        <listitem>
          <para>
            is the <application>Python</application> documentation tool.
          </para>
          <indexterm zone="python2 pydoc2">
            <primary sortas="b-pydoc2">pydoc</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="python">
        <term><command>python</command></term>
        <listitem>
          <para>
            is an interpreted, interactive, object-oriented programming
            language.
          </para>
          <indexterm zone="python2 python">
            <primary sortas="b-python2">python</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="python2-ver">
        <term><command>python&python2-majorver;</command></term>
        <listitem>
          <para>
            is a version-specific name for the <command>python</command>
            program.
          </para>
          <indexterm zone="python2 python2-ver">
            <primary sortas="b-python&python2-majorver;">python&python2-majorver;</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="smtpd.py">
        <term><command>smtpd.py</command></term>
        <listitem>
          <para>
            is an SMTP proxy implemented in <application>Python</application>.
          </para>
          <indexterm zone="python2 smtpd.py">
            <primary sortas="b-smtpd.py">smtpd.py</primary>
          </indexterm>
        </listitem>
      </varlistentry>

    </variablelist>

  </sect2>

</sect1>
