Great, thanks Phillip. Now that you mention the part about the scripts generation, I remember reading that in the docs. Thanks for clearing things up.
Regarding the unit tests...let me add a bit more to the question. Typically, as I'm developing a module, I embed doctests in the module. This lets me maintain a known good state throughout my dev cycle. Then, as I start to wrap things up, I create a standard unit test to wrap the doctests. Finally, I reference a method in the unit test that gives back the test suite (code sample attached). I reference this test suite in the setup.py for the given egg. So the question is, given that my friend/client is receiving eggs, how can they perform the equivalent of '$python setup.py test'? Currently, I have suggested that they unzip the egg and run the unittests dirctly from the unzipped files...something like this:
I'm attaching rest and html formatted copies of my blog tutorial entry on using setup tools...feel free to comment on that as well.
small.py::
#example method with doctest compatible docstring
def removeme():
"""
>>> import small as m
>>> m.removeme()
'remove me'
"""
return 'remove me'
def _test():
import doctest
return doctest.testmod()
if __name__ == "__main__":
_test()
small_unittest.py::
import small
import unittest
import doctest
def getTestSuite():
suite = unittest.TestSuite()
for mod in small,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
runner = unittest.TextTestRunner()
runner.run(getTestSuite())
setup.py::
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages
setup(name = "small",
version = "0.1",
description = "test",
author = "Todd Greenwood",
author_email = "t.greenwoodgeer@gmail.com",
url = "http://www.angelfire.com/planet/tango",
packages = find_packages('src'),
package_dir = {'':'src'},
package_data = {'small':['test/*.txt']},
test_suite = 'small.small_unittest.getTestSuite',
license = "GNU Lesser General Public License",
classifiers = [
"Development Status :: 1 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Library or Lesser
General Public License (LGPL)", "Programming Language :: Python", "Topic :: Database :: Front-Ends", ] )
-Todd
Phillip J. Eby wrote:
At 10:25 PM 12/7/2005 -0800, tgreenwood wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
I'm new to distutils/and the egg system. I have not researched the archives as much as I should, so please excuse me if this is familiar territory...
Q: Is it possible for dependency checks to work for non pipy deployed eggs?
This will work if the eggs are both in the current directory:
easy_install -f. B
-f (aka --find-links) specifies URLs or directories that will be scanned before going to PyPI to meet dependencies.
No net connection is necessary if all dependencies can be found using -f directories.
Q: How does my friend run the unittests on the egg that they have just installed? As I am developing, I frequently run the unittests and after every bdist_egg build, I also run the unit tests that way, too. How can the consumer do the same?
Well, if it's a unit test suite that's contained within the egg, then they could use the unittest utility just as they normally would.
Q: One of my apps is a command line app, say foo.py is a command line app that takes arg1, arg2,... How can the user run this app when it is encased in an egg?
EasyInstall generates wrapper scripts during installation that ensure the needed eggs are on sys.path and run the scripts. This works for both standard distutils scripts (specified using setup(scripts=[...])) and for entry point scripts (see the setuptools doc).
The --script-dir argument to easy_install controls where scripts are installed; it defaults to the same as the installation directory if an installation directory is manually specified; otherwise it defaults to wherever the distutils are configured to install scripts.
Q: How do I define my own pipy? While I like the idea of deploying there for the overall community, I don't want to send my half baked code into the wild. But I'd like to try the general functionality of having a deploy site for my beta customers. How can I set this up?
Using -f with the URL of a web page with download links to your eggs or source distributions. See http://turbogears.org/download/ for one example. In the simplest case, a simple Apache directory listing will do the trick; see http://peak.telecommunity.com/snapshots/ for an example of that approach. Simply having someone use a URL like that with -f ensures that any download links on the page will be given precedence over PyPI listings, if it's possible to meet all requirements that way.
Only if a dependency can't be satisfied by links on a -f page, will PyPI be consulted.
=====================
:Author: Todd Greenwood :Title: Small Tutorial -- How to use DocTest, Unittest, and Python Packages :Keywords: :Version: 1.0 :License: GPL v. 2 :Date: Dec 01, 2005
I was struggling with creating a simple python test case that uses doctest, then unittest, then python eggs. Along the way I found out some things with respect to python packages. This is meant as a beginner example (and to help keep things fresh in my mind). I am writing this using Vim7 and Mikolaj Machowskihe's vst.vim_ plugin.
.. contents:: :depth: 3
The tutorial is composed of a very simple test class, small.py, that is modified in several small ways. Basically, there are two examples here:
Here is what the src tree for the simple example looks like:
dir listing::
small/src/small/test/test.txt
small/src/small/small2.py
small/src/small/small.py
small/src/small/small_unittest.pyc
small/src/small/__init__.py
small/src/small/small_unittest.py
small/src/small_unittest.py
small/setup_mult.py
small/ez_setup.py
small/setup.py
Modules +++++++
We have two test classes, small and small2.py. They look like this:
small.py::
#example method with doctest compatible docstring
def removeme():
"""
>>> import small as m
>>> m.removeme()
'remove me'
"""
return 'remove me'
def _test():
import doctest
return doctest.testmod()
if __name__ == "__main__":
_test()
small2.py is almost identical, with the only difference in the method:
small2.py::
def saveme():
"""
>>> import small2 as m
>>> m.saveme()
'save me'
"""
return 'save me'
Doctests ++++++++
These two test modules show a simple use of the doctest_ module. These have to have some glue to the standard python unittests in order for the python egg test functionality to work. So, we'll add a python class to grok the modules and spit out unittest stuff.
Unittests +++++++++
small_unittest.py::
import small, small2
import unittest
import doctest
def getTestSuite():
suite = unittest.TestSuite()
for mod in small,small2,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
runner = unittest.TextTestRunner()
runner.run(getTestSuite())
One of the things I thought would work would be to just import small, and the
statement for mod in small,:
would find small.small and small.small2. Not the
case. So I explicitly state the modules to test as for mod in small,small2,:
.
Also note that we define a getTestSuite()
method. This is handy for setting
up the python setuptools tests (shown below).
Run this test from small/src/small/
and you get:
small/src/small$ python small_unittest.py
::
..
----------------------------------------------------------------------
Ran 2 tests in 0.004s
OK
Now cd to small/src
and check out the unit test there:
small_unittest.py::
from small import small as s1
from small import small2 as s2
import unittest
import doctest
def getTestSuite():
suite = unittest.TestSuite()
for mod in s1,s2,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
runner = unittest.TextTestRunner()
runner.run(getTestSuite())
The thing to note here is how small.small and small.small2 are referenced::
from small import small as s1
from small import small2 as s2
For some reason, this gave me plenty of problems. Hence this tutorial.
Setuptools ++++++++++
Now cd to small
and check out the python egg stuff:
setup.py::
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages
setup(name = "small",
version = "0.1",
description = "test",
author = "Todd Greenwood",
author_email = "t.greenwoodgeer@gmail.com",
url = "http://www.angelfire.com/planet/tango",
packages = find_packages('src'),
package_dir = {'':'src'},
package_data = {'small':['test/*.txt']},
test_suite = 'small.small_unittest.getTestSuite',
license = "GNU Lesser General Public License",
classifiers = [
"Development Status :: 1 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Library or Lesser General Public License
(LGPL)",
"Programming Language :: Python",
"Topic :: Database :: Front-Ends",
]
)
Referencing Modules
The thing to notice here is this line::
test_suite = 'small.small_unittest.getTestSuite',
This shows how to reference the modules, and how to get the test suite from the unittest. Also note the package_data line...that's how you include other files in the package. See peak_ for more.
Check out the peak_ website for more info on setuptools and the egg utilities. For now, we'll do two things, run the tests, and then create an egg distribution.
Running Tests
Run the tests:
small$ python setup.py test
::
running test
running egg_info
writing src/small.egg-info/PKG-INFO
writing top-level names to src/small.egg-info/top_level.txt
running build_ext
..
----------------------------------------------------------------------
Ran 2 tests in 0.005s
OK
Doctest: small.small.removeme ... ok
Doctest: small.small2.saveme ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.005s
OK
Building a Distribution (egg)
Create a distribution with python setup.py bdist_egg
:
small$ python setup.py bdist_egg
::
running bdist_egg
running egg_info
writing src/small.egg-info/PKG-INFO
writing top-level names to src/small.egg-info/top_level.txt
installing library code to build/bdist.linux-i686/egg
running install_lib
running build_py
copying src/small/small2.py -> build/lib/small
copying src/small/small.py -> build/lib/small
copying src/small/__init__.py -> build/lib/small
copying src/small/small_unittest.py -> build/lib/small
copying src/small/test/test.txt -> build/lib/small/test
creating build/bdist.linux-i686/egg
creating build/bdist.linux-i686/egg/.svn
creating build/bdist.linux-i686/egg/.svn/text-base
creating build/bdist.linux-i686/egg/.svn/prop-base
creating build/bdist.linux-i686/egg/.svn/props
creating build/bdist.linux-i686/egg/.svn/wcprops
creating build/bdist.linux-i686/egg/.svn/tmp
creating build/bdist.linux-i686/egg/.svn/tmp/text-base
creating build/bdist.linux-i686/egg/.svn/tmp/prop-base
creating build/bdist.linux-i686/egg/.svn/tmp/props
creating build/bdist.linux-i686/egg/.svn/tmp/wcprops
copying build/lib/.svn/entries -> build/bdist.linux-i686/egg/.svn
copying build/lib/.svn/empty-file -> build/bdist.linux-i686/egg/.svn
copying build/lib/.svn/README.txt -> build/bdist.linux-i686/egg/.svn
copying build/lib/.svn/format -> build/bdist.linux-i686/egg/.svn
creating build/bdist.linux-i686/egg/small
creating build/bdist.linux-i686/egg/small/.svn
creating build/bdist.linux-i686/egg/small/.svn/text-base
copying build/lib/small/.svn/text-base/small.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/text-base
copying build/lib/small/.svn/text-base/__init__.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/text-base
copying build/lib/small/.svn/text-base/small_unittest.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/text-base
creating build/bdist.linux-i686/egg/small/.svn/prop-base
copying build/lib/small/.svn/prop-base/small.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/prop-base
copying build/lib/small/.svn/prop-base/__init__.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/prop-base
copying build/lib/small/.svn/prop-base/small_unittest.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/prop-base
creating build/bdist.linux-i686/egg/small/.svn/props
copying build/lib/small/.svn/props/small.py.svn-work ->
build/bdist.linux-i686/egg/small/.svn/props
copying build/lib/small/.svn/props/__init__.py.svn-work ->
build/bdist.linux-i686/egg/small/.svn/props
copying build/lib/small/.svn/props/small_unittest.py.svn-work ->
build/bdist.linux-i686/egg/small/.svn/props
creating build/bdist.linux-i686/egg/small/.svn/wcprops
creating build/bdist.linux-i686/egg/small/.svn/tmp
creating build/bdist.linux-i686/egg/small/.svn/tmp/text-base
creating build/bdist.linux-i686/egg/small/.svn/tmp/prop-base
creating build/bdist.linux-i686/egg/small/.svn/tmp/props
creating build/bdist.linux-i686/egg/small/.svn/tmp/wcprops
copying build/lib/small/.svn/entries -> build/bdist.linux-i686/egg/small/.svn
copying build/lib/small/.svn/empty-file -> build/bdist.linux-i686/egg/small/.svn
copying build/lib/small/.svn/README.txt -> build/bdist.linux-i686/egg/small/.svn
copying build/lib/small/.svn/format -> build/bdist.linux-i686/egg/small/.svn
creating build/bdist.linux-i686/egg/small/test
creating build/bdist.linux-i686/egg/small/test/.svn
creating build/bdist.linux-i686/egg/small/test/.svn/text-base
copying build/lib/small/test/.svn/text-base/test.txt.svn-base ->
build/bdist.linux-i686/egg/small/test/.svn/text-base
creating build/bdist.linux-i686/egg/small/test/.svn/prop-base
copying build/lib/small/test/.svn/prop-base/test.txt.svn-base ->
build/bdist.linux-i686/egg/small/test/.svn/prop-base
creating build/bdist.linux-i686/egg/small/test/.svn/props
copying build/lib/small/test/.svn/props/test.txt.svn-work ->
build/bdist.linux-i686/egg/small/test/.svn/props
creating build/bdist.linux-i686/egg/small/test/.svn/wcprops
creating build/bdist.linux-i686/egg/small/test/.svn/tmp
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/text-base
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/prop-base
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/props
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/wcprops
copying build/lib/small/test/.svn/entries ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/.svn/empty-file ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/.svn/README.txt ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/.svn/format ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/test.txt -> build/bdist.linux-i686/egg/small/test
copying build/lib/small/__init__.py -> build/bdist.linux-i686/egg/small
copying build/lib/small/small.py -> build/bdist.linux-i686/egg/small
copying build/lib/small/small2.py -> build/bdist.linux-i686/egg/small
copying build/lib/small/small_unittest.py -> build/bdist.linux-i686/egg/small
byte-compiling build/bdist.linux-i686/egg/small/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/small/small.py to small.pyc
byte-compiling build/bdist.linux-i686/egg/small/small2.py to small2.pyc
byte-compiling build/bdist.linux-i686/egg/small/small_unittest.py to
small_unittest.pyc
creating build/bdist.linux-i686/egg/EGG-INFO
copying src/small.egg-info/top_level.txt -> build/bdist.linux-i686/egg/EGG-INFO
copying src/small.egg-info/PKG-INFO -> build/bdist.linux-i686/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/small-0.1-py2.4.egg' and adding 'build/bdist.linux-i686/egg' to it
removing 'build/bdist.linux-i686/egg' (and everything under it)
The complex case splits out the test modules into a nested package hierarchy like this:
Package Hierarchy +++++++++++++++++
package hierarchy::
small/src/
small/src/size/
small/src/size/small
small/src/size/large
The dir listing below should make this clear:
dir listing::
small/mult_tree_src/size/small/test/test.txt
small/mult_tree_src/size/small/small.pyc
small/mult_tree_src/size/small/small.py
small/mult_tree_src/size/small/small_unittest.pyc
small/mult_tree_src/size/small/__init__.py
small/mult_tree_src/size/small/__init__.pyc
small/mult_tree_src/size/small/small_unittest.py
small/mult_tree_src/size/large
small/mult_tree_src/size/large/large_unittest.py
small/mult_tree_src/size/large/large.py
small/mult_tree_src/size/large/large.pyc
small/mult_tree_src/size/large/__init__.py
small/mult_tree_src/size/large/__init__.pyc
small/mult_tree_src/size/__init__.py
small/mult_tree_src/size/__init__.pyc
small/mult_tree_src/small-mult-test.egg-info
small/mult_tree_src/small-mult-test.egg-info/top_level.txt
small/mult_tree_src/small-mult-test.egg-info/PKG-INFO
small/mult_tree_src/size_unittest.pyc
small/mult_tree_src/size_unittest.py
The Example Apps ++++++++++++++++
small/mult_tree_src/size/small/small.py::
#example method with doctest compatible docstring
def smallme():
"""
>>> import small as m
>>> m.smallme()
'small me'
"""
return 'small me'
def _test():
import doctest
return doctest.testmod()
if __name__ == "__main__":
_test()
The only difference between small.py and large.py is the name of the method.
small/mult_tree_src/size/large/large.py::
def largeme():
"""
>>> import large as l
>>> l.largeme()
'large me'
"""
return 'large me'
Unit Tests ++++++++++
Again, the only difference between the unit tests is the import and the name of the module adedd to the test suite.
small/mult_tree_src/size/small/small_unittest.py::
import small
import unittest
import doctest
def getTestSuite():
suite = unittest.TestSuite()
for mod in small,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
runner = unittest.TextTestRunner()
runner.run(getTestSuite())
small/mult_tree_src/size/large/large_unittest.py::
import large
import unittest
import doctest
def getTestSuite():
suite = unittest.TestSuite()
for mod in large,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
runner = unittest.TextTestRunner()
runner.run(getTestSuite())
The unittests for size are:
small/mult_tree_src/size_unittest.py::
from size.small import small
from size.large import large
import unittest
import doctest
def getTestSuite():
suite = unittest.TestSuite()
for mod in small,large,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
runner = unittest.TextTestRunner()
runner.run(getTestSuite())
So, again, the thing to look at is how the import works (and again, the thing that threw me for awhile):
note::
from size.small import small
from size.large import large
SetupTools ++++++++++
small/setup_mult.py::
from ez_setup import use_setuptools
use_setuptools()
from setuptools import setup, find_packages
setup(name = "small_mult_test",
version = "0.1",
description = "test",
author = "Todd Greenwood",
author_email = "t.greenwoodgeer@gmail.com",
url = "http://www.angelfire.com/planet/tango",
packages = find_packages('mult_tree_src'),
package_dir = {'':'mult_tree_src'},
package_data = {'':['test/*.txt']},
test_suite = 'size_unittest.getTestSuite',
license = "GNU Lesser General Public License",
classifiers = [
"Development Status :: 1 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Library or Lesser General Public License
(LGPL)",
"Programming Language :: Python",
"Topic :: Database :: Front-Ends",
]
)
Things to note:
test_suite : again, we reference the fx that gives us the test suite to run, in this case, it is::
def getTestSuite():
suite = unittest.TestSuite()
for mod in small,large,:
suite.addTest(doctest.DocTestSuite(mod))
return suite
package data : i'm not doing much with that now, but some tests in other packages that I'm writing place test data there.
Running Tests
Run the tests for size :
small$ python setup_mult.py test
::
running test
running egg_info
writing mult_tree_src/small-mult-test.egg-info/PKG-INFO
writing top-level names to mult_tree_src/small-mult-test.egg-info/top_level.txt
running build_ext
..
----------------------------------------------------------------------
Ran 2 tests in 0.009s
OK
Doctest: size.small.small.smallme ... ok
Doctest: size.large.large.largeme ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.002s
OK
Building Distributions (eggs)
Build the egg dist for size:
small$ python setup_mult.py bdist_egg
::
running bdist_egg
running egg_info
writing mult_tree_src/small-mult-test.egg-info/PKG-INFO
writing top-level names to mult_tree_src/small-mult-test.egg-info/top_level.txt
installing library code to build/bdist.linux-i686/egg
running install_lib
running build_py
creating build/lib/size
copying mult_tree_src/size/__init__.py -> build/lib/size
creating build/lib/size/small
copying mult_tree_src/size/small/small.py -> build/lib/size/small
copying mult_tree_src/size/small/__init__.py -> build/lib/size/small
copying mult_tree_src/size/small/small_unittest.py -> build/lib/size/small
creating build/lib/size/large
copying mult_tree_src/size/large/large_unittest.py -> build/lib/size/large
copying mult_tree_src/size/large/large.py -> build/lib/size/large
copying mult_tree_src/size/large/__init__.py -> build/lib/size/large
creating build/lib/size/small/test
copying mult_tree_src/size/small/test/test.txt -> build/lib/size/small/test
creating build/bdist.linux-i686/egg
creating build/bdist.linux-i686/egg/.svn
creating build/bdist.linux-i686/egg/.svn/text-base
creating build/bdist.linux-i686/egg/.svn/prop-base
creating build/bdist.linux-i686/egg/.svn/props
creating build/bdist.linux-i686/egg/.svn/wcprops
creating build/bdist.linux-i686/egg/.svn/tmp
creating build/bdist.linux-i686/egg/.svn/tmp/text-base
creating build/bdist.linux-i686/egg/.svn/tmp/prop-base
creating build/bdist.linux-i686/egg/.svn/tmp/props
creating build/bdist.linux-i686/egg/.svn/tmp/wcprops
copying build/lib/.svn/entries -> build/bdist.linux-i686/egg/.svn
copying build/lib/.svn/empty-file -> build/bdist.linux-i686/egg/.svn
copying build/lib/.svn/README.txt -> build/bdist.linux-i686/egg/.svn
copying build/lib/.svn/format -> build/bdist.linux-i686/egg/.svn
creating build/bdist.linux-i686/egg/small
creating build/bdist.linux-i686/egg/small/.svn
creating build/bdist.linux-i686/egg/small/.svn/text-base
copying build/lib/small/.svn/text-base/small.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/text-base
copying build/lib/small/.svn/text-base/__init__.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/text-base
copying build/lib/small/.svn/text-base/small_unittest.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/text-base
creating build/bdist.linux-i686/egg/small/.svn/prop-base
copying build/lib/small/.svn/prop-base/small.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/prop-base
copying build/lib/small/.svn/prop-base/__init__.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/prop-base
copying build/lib/small/.svn/prop-base/small_unittest.py.svn-base ->
build/bdist.linux-i686/egg/small/.svn/prop-base
creating build/bdist.linux-i686/egg/small/.svn/props
copying build/lib/small/.svn/props/small.py.svn-work ->
build/bdist.linux-i686/egg/small/.svn/props
copying build/lib/small/.svn/props/__init__.py.svn-work ->
build/bdist.linux-i686/egg/small/.svn/props
copying build/lib/small/.svn/props/small_unittest.py.svn-work ->
build/bdist.linux-i686/egg/small/.svn/props
creating build/bdist.linux-i686/egg/small/.svn/wcprops
creating build/bdist.linux-i686/egg/small/.svn/tmp
creating build/bdist.linux-i686/egg/small/.svn/tmp/text-base
creating build/bdist.linux-i686/egg/small/.svn/tmp/prop-base
creating build/bdist.linux-i686/egg/small/.svn/tmp/props
creating build/bdist.linux-i686/egg/small/.svn/tmp/wcprops
copying build/lib/small/.svn/entries -> build/bdist.linux-i686/egg/small/.svn
copying build/lib/small/.svn/empty-file -> build/bdist.linux-i686/egg/small/.svn
copying build/lib/small/.svn/README.txt -> build/bdist.linux-i686/egg/small/.svn
copying build/lib/small/.svn/format -> build/bdist.linux-i686/egg/small/.svn
creating build/bdist.linux-i686/egg/small/test
creating build/bdist.linux-i686/egg/small/test/.svn
creating build/bdist.linux-i686/egg/small/test/.svn/text-base
copying build/lib/small/test/.svn/text-base/test.txt.svn-base ->
build/bdist.linux-i686/egg/small/test/.svn/text-base
creating build/bdist.linux-i686/egg/small/test/.svn/prop-base
copying build/lib/small/test/.svn/prop-base/test.txt.svn-base ->
build/bdist.linux-i686/egg/small/test/.svn/prop-base
creating build/bdist.linux-i686/egg/small/test/.svn/props
copying build/lib/small/test/.svn/props/test.txt.svn-work ->
build/bdist.linux-i686/egg/small/test/.svn/props
creating build/bdist.linux-i686/egg/small/test/.svn/wcprops
creating build/bdist.linux-i686/egg/small/test/.svn/tmp
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/text-base
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/prop-base
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/props
creating build/bdist.linux-i686/egg/small/test/.svn/tmp/wcprops
copying build/lib/small/test/.svn/entries ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/.svn/empty-file ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/.svn/README.txt ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/.svn/format ->
build/bdist.linux-i686/egg/small/test/.svn
copying build/lib/small/test/test.txt -> build/bdist.linux-i686/egg/small/test
copying build/lib/small/__init__.py -> build/bdist.linux-i686/egg/small
copying build/lib/small/small.py -> build/bdist.linux-i686/egg/small
copying build/lib/small/small2.py -> build/bdist.linux-i686/egg/small
copying build/lib/small/small_unittest.py -> build/bdist.linux-i686/egg/small
creating build/bdist.linux-i686/egg/size
copying build/lib/size/__init__.py -> build/bdist.linux-i686/egg/size
creating build/bdist.linux-i686/egg/size/small
copying build/lib/size/small/small.py -> build/bdist.linux-i686/egg/size/small
copying build/lib/size/small/__init__.py -> build/bdist.linux-i686/egg/size/small
copying build/lib/size/small/small_unittest.py ->
build/bdist.linux-i686/egg/size/small
creating build/bdist.linux-i686/egg/size/small/test
copying build/lib/size/small/test/test.txt ->
build/bdist.linux-i686/egg/size/small/test
creating build/bdist.linux-i686/egg/size/large
copying build/lib/size/large/large_unittest.py ->
build/bdist.linux-i686/egg/size/large
copying build/lib/size/large/large.py -> build/bdist.linux-i686/egg/size/large
copying build/lib/size/large/__init__.py -> build/bdist.linux-i686/egg/size/large
byte-compiling build/bdist.linux-i686/egg/small/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/small/small.py to small.pyc
byte-compiling build/bdist.linux-i686/egg/small/small2.py to small2.pyc
byte-compiling build/bdist.linux-i686/egg/small/small_unittest.py to
small_unittest.pyc
byte-compiling build/bdist.linux-i686/egg/size/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/size/small/small.py to small.pyc
byte-compiling build/bdist.linux-i686/egg/size/small/__init__.py to __init__.pyc
byte-compiling build/bdist.linux-i686/egg/size/small/small_unittest.py to
small_unittest.pyc
byte-compiling build/bdist.linux-i686/egg/size/large/large_unittest.py to
large_unittest.pyc
byte-compiling build/bdist.linux-i686/egg/size/large/large.py to large.pyc
byte-compiling build/bdist.linux-i686/egg/size/large/__init__.py to __init__.pyc
creating build/bdist.linux-i686/egg/EGG-INFO
copying mult_tree_src/small-mult-test.egg-info/top_level.txt ->
build/bdist.linux-i686/egg/EGG-INFO
copying mult_tree_src/small-mult-test.egg-info/PKG-INFO ->
build/bdist.linux-i686/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/small_mult_test-0.1-py2.4.egg' and adding 'build/bdist.linux-i686/egg'
to it
removing 'build/bdist.linux-i686/egg' (and everything under it)
Ok, that's it for now.
-Todd
.. Links .. _doctest: http://docs.python.org/lib/module-doctest.html .. _peak: http://peak.telecommunity.com/DevCenter/PythonEggs