Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Python eggs, zc.buildout, zopeproject and zope3
1. Eggs, zc.buildout and Zope3
Getting started with eggs, zc.buildout and Zope3
Darryl Cousins
info@tfws.org.nz
Tree Fern Web Services
New Zealand Python User Group meeting, February 2008
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 1 / 25
2. Eggs
A Python Module
• A block of code which may imported by some other code.
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 2 / 25
3. Eggs
A Python Module: hello.py
def helloworld():
print uquot;Hello Worldquot;
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 3 / 25
4. Eggs
A Python Module: hello.py
def helloworld():
print uquot;Hello Worldquot;
We can import the method from the module:
from hello import helloworld
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 3 / 25
5. Eggs
A Python Package: hello
A package is a module that contains other modules:
hello/
__init__.py
hello.py
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 4 / 25
6. Eggs
A Python Package: hello
A package is a module that contains other modules:
hello/
__init__.py
hello.py
Now we must import the method from the module within the module.
from hello.hello import helloworld
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 4 / 25
7. Eggs
Distutils
Distutils was written so we have a unified way to install python modules.
python setup.py install
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 5 / 25
8. Eggs
Distutils - creating a distribution
To distribute the hello module we need have it in a directory with a setup.py
file.
workingdir/
setup.py
hello/
__init__.py
hello.py
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 6 / 25
9. Eggs
Distutils - creating a distribution
To distribute the hello module we need have it in a directory with a setup.py
file.
workingdir/
setup.py
hello/
__init__.py
hello.py
The setup.py file needs at the least the following.
from distutils.core import setup
setup(name=quot;helloquot;,
)
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 6 / 25
10. Eggs
Distutils - creating a distribution, continued
Now we can create a distribution tarball with disutils.
python setup.py sdist
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 7 / 25
11. Eggs
Distutils - creating a distribution, continued
Now we can create a distribution tarball with disutils.
python setup.py sdist
Our directory now looks like this
workingdir/
setup.py
hello/
__init__.py
hello.py
dist/
hello-1.0.tar.gz
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 7 / 25
12. Eggs
Distutils - creating a distribution, continued
Now we can create a distribution tarball with disutils.
python setup.py sdist
Our directory now looks like this
workingdir/
setup.py
hello/
__init__.py
hello.py
dist/
hello-1.0.tar.gz
If we unpack the source distribution it looks like this:
hello-1.0/
PKG-INFO
setup.py
hello/
__init__.py
hello.py
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 7 / 25
13. Eggs
Setuptools
• Setuptools is built on top of distutils
• uses the setup.py
• uses eggs for distribution
• allows us to save our modules as eggs to pypi
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 8 / 25
14. Eggs
Setuptools
• Setuptools is built on top of distutils
• uses the setup.py
• uses eggs for distribution
• allows us to save our modules as eggs to pypi
Installing setuptools
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 8 / 25
15. Eggs
Eggs
To create an egg change the import line in setup.py
from setuptools import setup
setup(name=quot;helloquot;,
version=quot;1.0quot;,
)
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 9 / 25
16. Eggs
Eggs
To create an egg change the import line in setup.py
from setuptools import setup
setup(name=quot;helloquot;,
version=quot;1.0quot;,
)
We can call that with:
python setup.py bdist_egg
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 9 / 25
17. Eggs
Eggs
To create an egg change the import line in setup.py
from setuptools import setup
setup(name=quot;helloquot;,
version=quot;1.0quot;,
)
We can call that with:
python setup.py bdist_egg
Which creates a binary egg in our dist directory
dist/
hello-1.0-py2.4.egg
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 9 / 25
18. Eggs
Pypi
If we want that egg available on pypi and we have an account we can do that
with a single command.
python setup.py sdist upload
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 10 / 25
19. Eggs
Pypi
If we want that egg available on pypi and we have an account we can do that
with a single command.
python setup.py sdist upload
Which all the world can use
easy_install hello
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 10 / 25
20. zc.buildout
zc.buildout - what is it?
• Buildout is a system of configuring repeatable steps for assembling
complicated systems (applications) from multiple parts.
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 11 / 25
21. zc.buildout
zc.buildout - what is it?
• Buildout is a system of configuring repeatable steps for assembling
complicated systems (applications) from multiple parts.
• A real world example of my own includes:
• apache
• postgresql
• ramdb
• zope3
• sqlalchemy
• pyxml
• egenix-mx-base
• psycopg2
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 11 / 25
22. zc.buildout
Example buildout.cfg
[buildout]
develop = .
parts = py
[py]
recipe = zc.recipe.egg
interpreter = py
eggs = hello
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 12 / 25
23. zc.buildout
So - how to get started with Zope3
• Download tarball.
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 13 / 25
24. zc.buildout
So - how to get started with Zope3
• Download tarball. Wrong!
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 13 / 25
25. zc.buildout
So - how to get started with Zope3
• Download tarball. Wrong!
• Use zopeproject
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 13 / 25
26. zc.buildout
Virtual Environment
virtualenv nzpug
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 14 / 25
27. zc.buildout
Virtual Environment
virtualenv nzpug
cd nzpug
./bin/easy_install zopeproject
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 14 / 25
28. zc.buildout
Virtual Environment
virtualenv nzpug
cd nzpug
./bin/easy_install zopeproject
bin/zopeproject nzpug
Enter user (Name of an initial administrator): darryl
Enter passwd (Password for .. ): secret
Enter eggs_dir (Location ..) [’/opt/buildout/eggs’]: **
Creating directory ./nzpug
Downloading zc.buildout..
Invoking zc.buildout..
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 14 / 25
30. zc.buildout
nzpug/buildout.cfg
[buildout]
develop = .
parts = app test
find-links = http://download.zope.org/distribution/
newest = false
# eggs will be installed in the default buildout location
# (see ~/.buildout/default.cfg)
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 16 / 25
31. zc.buildout
nzpug/buildout.cfg
[buildout]
develop = .
parts = app test
find-links = http://download.zope.org/distribution/
newest = false
# eggs will be installed in the default buildout location
# (see ~/.buildout/default.cfg)
extends = http://download.zope.org/zope3.4/versions-3.4.0.cfg
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 16 / 25
35. zc.buildout
What’s in the bin directory?
buildout
nzpug-ctl
nzpug-debug
paster
python
static-apidoc
test
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 19 / 25
36. zc.buildout
nzpug/deploy.ini
[app:main]
use = egg:nzpug
[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 8080
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 20 / 25
37. zc.buildout
What’s in the src/nzpug directory?
__init__.py
configure.zcml
ftesting.zcml
startup.py
testing.py
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 21 / 25
38. zc.buildout
A HelloWorld - step 1: The template
hello.pt
<html i18n:domain=quot;nzpugquot;>
<head>
<title i18n:translate=quot;quot;>Hello World</title>
</head>
<body i18n:translate=quot;quot;>
Hello World
</body>
</html>
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 22 / 25
39. zc.buildout
A HelloWorld - step 2: The registration
configure.zcml
<configure xmlns=quot;http://namespaces.zope.org/zopequot;
xmlns:browser=quot;http://namespaces.zope.org/browserquot;
i18n_domain=quot;nzpugquot;>
<page
for=quot;*quot;
name=quot;helloquot;
permission=quot;zope.Publicquot;
template=quot;hello.ptquot;
/>
</configure>
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 23 / 25
40. zc.buildout
A HelloWorld - step 2: The registration
configure.zcml
<configure xmlns=quot;http://namespaces.zope.org/zopequot;
xmlns:browser=quot;http://namespaces.zope.org/browserquot;
i18n_domain=quot;nzpugquot;>
<page
for=quot;*quot;
name=quot;helloquot;
permission=quot;zope.Publicquot;
template=quot;hello.ptquot;
/>
</configure>
./bin/nzpug-ctl fg
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 23 / 25
41. zc.buildout
A HelloWorld - step 2: The registration
configure.zcml
<configure xmlns=quot;http://namespaces.zope.org/zopequot;
xmlns:browser=quot;http://namespaces.zope.org/browserquot;
i18n_domain=quot;nzpugquot;>
<page
for=quot;*quot;
name=quot;helloquot;
permission=quot;zope.Publicquot;
template=quot;hello.ptquot;
/>
</configure>
./bin/nzpug-ctl fg
http://localhost:8080/hello
Hello World
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 23 / 25
44. zc.buildout
Create a distribution of our app
python setup.py bdist_egg
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 25 / 25
45. zc.buildout
Create a distribution of our app
python setup.py bdist_egg
ls dist
nzpug-0.1-py2.4.egg
Darryl Cousins info@tfws.org.nz (Tree Fern Web Services) Zope3 NZPUG February 2008 25 / 25