Differences between revisions 1 and 17 (spanning 16 versions)
Revision 1 as of 2008-03-10 22:51:13
Size: 282
Editor: JeffRush
Comment:
Revision 17 as of 2010-04-07 09:25:01
Size: 7337
Editor: 101
Comment: Fix some links
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
.. figure:: https://dfwpython.org/static/pycon/distutils-flow.png

   Figure 1: Data Flow within Distutils/Setuptools Usage
Line 9: Line 13:
  + Virtualenv
  + Distutils
  + Setuptools
  + Buildout

Exercises:

  + Installing virtualenv and setting up a sandbox
  Four-Part In-Depth Presentation Sequence (not presented in class)

  + `An Introduction to the Virtualenv Sandbox`_ (`.pdf`__, `.txt`__)

    .. _`An Introduction to the Virtualenv Sandbox`: https://dfwpython.org/static/pycon/0-python-virtualenv.pdf
    .. __: https://dfwpython.org/static/pycon/0-python-virtualenv.pdf
    .. __: https://dfwpython.org/static/pycon/0-python-virtualenv.txt

  + `Distutils: Packaging, Metadata and Pushups`_ (`.pdf`__, `.txt`__)

    .. _`Distutils: Packaging, Metadata and Pushups`: https://dfwpython.org/static/pycon/1-python-distutils.pdf
    .. __: https://dfwpython.org/static/pycon/1-python-distutils.pdf
    .. __: https://dfwpython.org/static/pycon/1-python-distutils.txt

  + `SetupTools: Python Eggs, Dependencies and Plugins`_ (`.pdf`__, `.txt`__)

    .. _`SetupTools: Python Eggs, Dependencies and Plugins`: https://dfwpython.org/static/pycon/2-python-setuptools.pdf
    .. __: https://dfwpython.org/static/pycon/2-python-setuptools.pdf
    .. __: https://dfwpython.org/static/pycon/2-python-setuptools.txt

  + `Buildout: Precision Assembly, Repeatability, Islands`_ (`.pdf`__, `.txt`__)

    .. _`Buildout: Precision Assembly, Repeatability, Islands`: https://dfwpython.org/static/pycon/3-python-buildout.pdf
    .. __: https://dfwpython.org/static/pycon/3-python-buildout.pdf
    .. __: https://dfwpython.org/static/pycon/3-python-buildout.txt

  Condensed Slide Set Used in Actual Tutorial

  + `Eggs and Buildout Deployment in Python`_ (`.pdf`__, `.txt`__)

    .. _`Eggs and Buildout Deployment in Python`: https://dfwpython.org/static/pycon/eggs-n-buildout.pdf
    .. __: https://dfwpython.org/static/pycon/eggs-n-buildout.pdf
    .. __: https://dfwpython.org/static/pycon/eggs-n-buildout.txt

  + `Additional Topics of Tutorial`_ (`.pdf`__, `.txt`__)

    .. _`Additional Topics of Tutorial`: https://dfwpython.org/static/pycon/eggs-n-buildout-bonus.pdf
    .. __: https://dfwpython.org/static/pycon/eggs-n-buildout-bonus.pdf
    .. __: https://dfwpython.org/static/pycon/eggs-n-buildout-bonus.txt

Exercises from Tutorial:

  1. Installing Tools for the Class

     | $ cd /tmp
     | $ wget http://peak.telecommunity.com/dist/ez_setup.py
     | $ sudo python ez_setup.py
     | $ sudo easy_install virtualenv
     | $ sudo easy_install zc.buildout

  2. Instantiating a Sandbox or Two

     | $ virtualenv pycon -or-
     | $ virtualenv --no-site-packages pycon
     | $ cd pycon
     | $ bin/python
     | $ source bin/activate -or- activate.bat
     | $ deactivate

     ..

     + explore:
        + directory tree
        + *sys.path*
     + for each kind of sandbox

  3. Processing Distributions

     1. Grab a source distribution

        | $ /sandbox/bin/easy_install --editable --build-directory . SQLObject==0.9.5
        | $ /sandbox/bin/easy_install --editable --build-directory . SQLObject==dev

        Examine its directory structure and common files.

     2. Query the list of available distribution formats.

        | $ cd sqlobject
        | $ /sandbox/bin/python setup.py sdist --help-formats
        | $ /sandbox/bin/python setup.py bdist --help-formats

     3. Build and package it as a binary distribution.

        | $ /sandbox/bin/python setup.py build
        | $ /sandbox/bin/python setup.py install
        | $ /sandbox/bin/python setup.py bdist --formats=tar,egg,rpm

        Examine the run output and the table-of-contents of the distribution
        archive afterward. Note the way that metadata is stored.

     4. Repackage it as a source distribution

        | $ /sandbox/bin/python setup.py sdist --formats=zip

        Examine the run output and the table-of-contents of the source
        archive. Note the different way that metadata is stored.

     5. Try to import it, then run the "develop" cmd and try again.

        | $ cd /sandbox
        | $ /sandbox/bin/python
        | $ import sqlobject

        ..

        | $ cd /sandbox/sqlobject
        | $ /sandbox/bin/python setup.py develop

  4. Generating Scripts that Invokes Entrypoints

     1. Create a sandbox in which to work.

        | $ virtualenv --no-site-packages pycon
        | $ cd pycon

     2. Create a distribution for a new egg that has two scripts.

        | # File: pycon/setup.py
        | from setuptools import setup
        |
        | setup(name="myscript",
        | version="1.0.0",
        | py_module = ['myscript'],
        | entry_points={
        | "console_scripts": [
        | "alpha = myscript:alpha_cmd",
        | "beta = myscript:beta_cmd"]
        | },
        | )

        ..

        | # File: pycon/myscript.py
        | def alpha_cmd():
        | print "Hello from Alpha Centauri"
        |
        | class beta_cmd(object):
        | def __init__(self):
        | print "Hello from Beta Centauri"

     3. Mark it a develop-egg and then add the egg as a 'myscript' part.

        | # File: pycon/buildout.cfg
        | [buildout]
        | develop = .
        | parts = myscript
        |
        | [myscript]
        | recipe = zc.recipe.egg
        | eggs = myscript

     4. Run *buildout* and look in the bin/ directory for scripts.

  5. Create a simple buildout around an egg and experiment with it.

     1. Create an empty buildout area.

        | $ virtualenv --no-site-packages pycon
        | $ cd pycon
        | $ buildout init

     2. Put into it a simple egg by creating a "buildout.cfg" file:

        | [buildout]
        | parts = mypython
        | prefer-final = true
        |
        | [mypython]
        | recipe = zc.recipe.egg
        | interpreter = dbpython
        | eggs = SQLObject

     3. Invoke "bin/buildout" and examine the output messages, the directory
        structure and the *dbpython* script.

        Test for what version got installed and where it came from.

        | $ bin/dbpython
        | >>> import sqlobject
        | >>> sqlobject.__file__
        | '/var/tmp/buildout/eggs/SQLObject-0.10.0-py2.5.egg/sqlobject/__init__.py'

     4. Force it to use a specific version of SQLObject.

        | eggs = SQLObject==0.9

        Test for what version got installed and where it came from.

        | $ bin/dbpython
        | >>> import sqlobject
        | >>> sqlobject.__file__
        | '/var/tmp/buildout/eggs/SQLObject-0.9.0-py2.5.egg/sqlobject/__init__.py'

     5. Remove that constraint and grab its source distribution.

        | $ bin/easy_install --editable -b . SQLObject

        Alter "buildout.cfg" file to make it a development egg:

        | develop = sqlobject

        Test for what version got installed and where it came from.

        | $ bin/dbpython
        | >>> import sqlobject
        | >>> sqlobject.__file__
        | '/tmp/kkk/sqlobject/sqlobject/__init__.py'

Eggs and Buildout Deployment in Python

https://dfwpython.org/static/pycon/distutils-flow.png

Figure 1: Data Flow within Distutils/Setuptools Usage

Slides:

Four-Part In-Depth Presentation Sequence (not presented in class)

Condensed Slide Set Used in Actual Tutorial

Exercises from Tutorial:

  1. Installing Tools for the Class

    $ cd /tmp
    $ sudo python ez_setup.py
    $ sudo easy_install virtualenv
    $ sudo easy_install zc.buildout
  2. Instantiating a Sandbox or Two

    $ virtualenv pycon -or-
    $ virtualenv --no-site-packages pycon
    $ cd pycon
    $ bin/python
    $ source bin/activate -or- activate.bat
    $ deactivate
    • explore:
      • directory tree
      • sys.path
    • for each kind of sandbox
  3. Processing Distributions

    1. Grab a source distribution

      $ /sandbox/bin/easy_install --editable --build-directory . SQLObject==0.9.5
      $ /sandbox/bin/easy_install --editable --build-directory . SQLObject==dev

      Examine its directory structure and common files.

    2. Query the list of available distribution formats.

      $ cd sqlobject
      $ /sandbox/bin/python setup.py sdist --help-formats
      $ /sandbox/bin/python setup.py bdist --help-formats
    3. Build and package it as a binary distribution.

      $ /sandbox/bin/python setup.py build
      $ /sandbox/bin/python setup.py install
      $ /sandbox/bin/python setup.py bdist --formats=tar,egg,rpm

      Examine the run output and the table-of-contents of the distribution archive afterward. Note the way that metadata is stored.

    4. Repackage it as a source distribution

      $ /sandbox/bin/python setup.py sdist --formats=zip

      Examine the run output and the table-of-contents of the source archive. Note the different way that metadata is stored.

    5. Try to import it, then run the "develop" cmd and try again.

      $ cd /sandbox
      $ /sandbox/bin/python
      $ import sqlobject
      $ cd /sandbox/sqlobject
      $ /sandbox/bin/python setup.py develop
  4. Generating Scripts that Invokes Entrypoints

    1. Create a sandbox in which to work.

      $ virtualenv --no-site-packages pycon
      $ cd pycon
    2. Create a distribution for a new egg that has two scripts.

      # File: pycon/setup.py
      from setuptools import setup

      setup(name="myscript",
      version="1.0.0",
      py_module = ['myscript'],
      entry_points={
      "console_scripts": [
      "alpha = myscript:alpha_cmd",
      "beta = myscript:beta_cmd"]
      },
      )
      # File: pycon/myscript.py
      def alpha_cmd():
      print "Hello from Alpha Centauri"

      class beta_cmd(object):
      def __init__(self):
      print "Hello from Beta Centauri"
    3. Mark it a develop-egg and then add the egg as a 'myscript' part.

      # File: pycon/buildout.cfg
      [buildout]
      develop = .
      parts = myscript

      [myscript]
      recipe = zc.recipe.egg
      eggs = myscript
    4. Run buildout and look in the bin/ directory for scripts.
  5. Create a simple buildout around an egg and experiment with it.

    1. Create an empty buildout area.

      $ virtualenv --no-site-packages pycon
      $ cd pycon
      $ buildout init
    2. Put into it a simple egg by creating a "buildout.cfg" file:

      [buildout]
      parts = mypython
      prefer-final = true

      [mypython]
      recipe = zc.recipe.egg
      interpreter = dbpython
      eggs = SQLObject
    3. Invoke "bin/buildout" and examine the output messages, the directory structure and the dbpython script.

      Test for what version got installed and where it came from.

      $ bin/dbpython
      >>> import sqlobject
      >>> sqlobject.__file__
      '/var/tmp/buildout/eggs/SQLObject-0.10.0-py2.5.egg/sqlobject/__init__.py'
    4. Force it to use a specific version of SQLObject.

      eggs = SQLObject==0.9

      Test for what version got installed and where it came from.

      $ bin/dbpython
      >>> import sqlobject
      >>> sqlobject.__file__
      '/var/tmp/buildout/eggs/SQLObject-0.9.0-py2.5.egg/sqlobject/__init__.py'
    5. Remove that constraint and grab its source distribution.

      $ bin/easy_install --editable -b . SQLObject

      Alter "buildout.cfg" file to make it a development egg:

      develop = sqlobject

      Test for what version got installed and where it came from.

      $ bin/dbpython
      >>> import sqlobject
      >>> sqlobject.__file__
      '/tmp/kkk/sqlobject/sqlobject/__init__.py'

buildout/pycon2008 tutorial (last edited 2013-02-27 12:02:22 by MichaelCarlsson)

Unable to edit the page? See the FrontPage for instructions.