| 1 |
======================= |
|---|
| 2 |
Using a custom buildout |
|---|
| 3 |
======================= |
|---|
| 4 |
|
|---|
| 5 |
Note: If you are using Windows, if you do not have PIL installed, or you are |
|---|
| 6 |
not using Python 2.4 as your main system Python, please see the relevant |
|---|
| 7 |
sections below. |
|---|
| 8 |
|
|---|
| 9 |
You probably got here by running something like: |
|---|
| 10 |
|
|---|
| 11 |
$ paster create -t plone3_buildout |
|---|
| 12 |
|
|---|
| 13 |
Now, you need to run: |
|---|
| 14 |
|
|---|
| 15 |
$ python bootstrap.py |
|---|
| 16 |
|
|---|
| 17 |
This will install zc.buildout for you. |
|---|
| 18 |
|
|---|
| 19 |
To create an instance immediately, run: |
|---|
| 20 |
|
|---|
| 21 |
$ bin/buildout |
|---|
| 22 |
|
|---|
| 23 |
This will download Plone's eggs and products for you, as well as other |
|---|
| 24 |
dependencies, create a new Zope 2 installation (unless you specified |
|---|
| 25 |
an existing one when you ran "paster create"), and create a new Zope instance |
|---|
| 26 |
configured with these products. |
|---|
| 27 |
|
|---|
| 28 |
You can start your Zope instance by running: |
|---|
| 29 |
|
|---|
| 30 |
$ bin/instance start |
|---|
| 31 |
|
|---|
| 32 |
or, to run in foreground mode: |
|---|
| 33 |
|
|---|
| 34 |
$ bin/instance fg |
|---|
| 35 |
|
|---|
| 36 |
To run unit tests, you can use: |
|---|
| 37 |
|
|---|
| 38 |
$ bin/instance test -s my.package |
|---|
| 39 |
|
|---|
| 40 |
Installing PIL |
|---|
| 41 |
-------------- |
|---|
| 42 |
|
|---|
| 43 |
To use Plone, you need PIL, the Python Imaging Library. If you don't already |
|---|
| 44 |
have this, download and install it from http://www.pythonware.com/products/pil. |
|---|
| 45 |
|
|---|
| 46 |
Using a different Python installation |
|---|
| 47 |
-------------------------------------- |
|---|
| 48 |
|
|---|
| 49 |
Buildout will use your system Python installation by default. However, Zope |
|---|
| 50 |
2.10 (and by extension, Plone) will only work with Python 2.4. You can verify |
|---|
| 51 |
which version of Python you have, by running: |
|---|
| 52 |
|
|---|
| 53 |
$ python -V |
|---|
| 54 |
|
|---|
| 55 |
If that is not a 2.4 version, you need to install Python 2.4 from |
|---|
| 56 |
http://python.org. If you wish to keep another version as your main system |
|---|
| 57 |
Python, edit buildout.cfg and add an 'executable' option to the "[buildout]" |
|---|
| 58 |
section, pointing to a python interpreter binary: |
|---|
| 59 |
|
|---|
| 60 |
[buildout] |
|---|
| 61 |
... |
|---|
| 62 |
executable = /path/to/python |
|---|
| 63 |
|
|---|
| 64 |
Working with buildout.cfg |
|---|
| 65 |
------------------------- |
|---|
| 66 |
|
|---|
| 67 |
You can change any option in buildout.cfg and re-run bin/buildout to reflect |
|---|
| 68 |
the changes. This may delete things inside the 'parts' directory, but should |
|---|
| 69 |
keep your Data.fs and source files intact. |
|---|
| 70 |
|
|---|
| 71 |
To save time, you can run buildout in "offline" (-o) and non-updating (-N) |
|---|
| 72 |
mode, which will prevent it from downloading things and checking for new |
|---|
| 73 |
versions online: |
|---|
| 74 |
|
|---|
| 75 |
$ bin/buildout -Nov |
|---|
| 76 |
|
|---|
| 77 |
Creating new eggs |
|---|
| 78 |
----------------- |
|---|
| 79 |
|
|---|
| 80 |
New packages you are working on (but which are not yet released as eggs and |
|---|
| 81 |
uploaded to the Python Package Index, aka PYPI) should be placed in src. You can do: |
|---|
| 82 |
|
|---|
| 83 |
$ cd src/ |
|---|
| 84 |
$ paster create -t plone my.package |
|---|
| 85 |
|
|---|
| 86 |
Use "paster create --list-templates" to see all available templates. Answer |
|---|
| 87 |
the questions and you will get a new egg. Then tell buildout about your egg |
|---|
| 88 |
by editing buildout.cfg and adding your source directory to 'develop': |
|---|
| 89 |
|
|---|
| 90 |
[buildout] |
|---|
| 91 |
... |
|---|
| 92 |
develop = |
|---|
| 93 |
src/my.package |
|---|
| 94 |
|
|---|
| 95 |
You can list multiple packages here, separated by whitespace or indented |
|---|
| 96 |
newlines. |
|---|
| 97 |
|
|---|
| 98 |
You probably also want the Zope instance to know about the package. Add its |
|---|
| 99 |
package name to the list of eggs in the "[instance]" section, or under the |
|---|
| 100 |
main "[buildout]" section: |
|---|
| 101 |
|
|---|
| 102 |
[instance] |
|---|
| 103 |
... |
|---|
| 104 |
eggs = |
|---|
| 105 |
${buildout:eggs} |
|---|
| 106 |
${plone:eggs} |
|---|
| 107 |
my.package |
|---|
| 108 |
|
|---|
| 109 |
Leave the ${buildout:eggs} part in place - it tells the instance to use the |
|---|
| 110 |
eggs that buildout will have downloaded from the Python Package Index |
|---|
| 111 |
previously. |
|---|
| 112 |
|
|---|
| 113 |
If you also require a ZCML slug for your package, buildout can create one |
|---|
| 114 |
automatically. Just add the package to the 'zcml' option: |
|---|
| 115 |
|
|---|
| 116 |
[instance] |
|---|
| 117 |
... |
|---|
| 118 |
zcml = |
|---|
| 119 |
my.package |
|---|
| 120 |
|
|---|
| 121 |
When you are finished, re-run buildout. Offline, non-updating mode should |
|---|
| 122 |
suffice: |
|---|
| 123 |
|
|---|
| 124 |
$ bin/buildout -Nov |
|---|
| 125 |
|
|---|
| 126 |
Developing old-style products |
|---|
| 127 |
----------------------------- |
|---|
| 128 |
|
|---|
| 129 |
If you are developing old-style Zope 2 products (not eggs) then you can do so |
|---|
| 130 |
by placing the product code in the top-level 'products' directory. This is |
|---|
| 131 |
analogous to the 'Products/' directory inside a normal Zope 2 instance and is |
|---|
| 132 |
scanned on start-up for new products. |
|---|
| 133 |
|
|---|
| 134 |
Depending on a new egg |
|---|
| 135 |
---------------------- |
|---|
| 136 |
|
|---|
| 137 |
If you want to use a new egg that is in the Python Package Index, all you need |
|---|
| 138 |
to do is to add it to the "eggs" option under the main "[buildout]" section: |
|---|
| 139 |
|
|---|
| 140 |
[buildout] |
|---|
| 141 |
... |
|---|
| 142 |
eggs = |
|---|
| 143 |
my.package |
|---|
| 144 |
|
|---|
| 145 |
If it's listed somewhere else than the Python Package Index, you can add a link |
|---|
| 146 |
telling buildout where to find it in the 'find-links' option: |
|---|
| 147 |
|
|---|
| 148 |
[buildout] |
|---|
| 149 |
... |
|---|
| 150 |
find-links = |
|---|
| 151 |
http://dist.plone.org |
|---|
| 152 |
http://download.zope.org/distribution/ |
|---|
| 153 |
http://effbot.org/downloads |
|---|
| 154 |
http://some.host.com/packages |
|---|
| 155 |
|
|---|
| 156 |
Using existing old-style products |
|---|
| 157 |
--------------------------------- |
|---|
| 158 |
|
|---|
| 159 |
If you are using an old-style (non-egg) product, you can either add it as an |
|---|
| 160 |
automatically downloaded archive or put it in the top-level "products" folder. |
|---|
| 161 |
The former is probably better, because it means you can redistribute your |
|---|
| 162 |
buildout.cfg more easily: |
|---|
| 163 |
|
|---|
| 164 |
[productdistros] |
|---|
| 165 |
recipe = plone.recipe.distros |
|---|
| 166 |
urls = |
|---|
| 167 |
http://plone.org/products/someproduct/releases/1.3/someproduct-1.3.tar.gz |
|---|
| 168 |
|
|---|
| 169 |
If someproduct-1.3.tar.gz extracts into several products inside a top-level |
|---|
| 170 |
directory, e.g. SomeProduct-1.3/PartOne and SomeProduct-1.3/PartTwo, then |
|---|
| 171 |
add it as a "nested package": |
|---|
| 172 |
|
|---|
| 173 |
[productdistros] |
|---|
| 174 |
recipe = plone.recipe.distros |
|---|
| 175 |
urls = |
|---|
| 176 |
http://plone.org/products/someproduct/releases/1.3/someproduct-1.3.tar.gz |
|---|
| 177 |
nested-packages = |
|---|
| 178 |
someproduct-1.3.tar.gz |
|---|
| 179 |
|
|---|
| 180 |
Alternatively, if it extracts to a directory which contains the version |
|---|
| 181 |
number, add it as a "version suffix package": |
|---|
| 182 |
|
|---|
| 183 |
[productdistros] |
|---|
| 184 |
recipe = plone.recipe.distros |
|---|
| 185 |
urls = |
|---|
| 186 |
http://plone.org/products/someproduct/releases/1.3/someproduct-1.3.tar.gz |
|---|
| 187 |
version-suffix-packages = |
|---|
| 188 |
someproduct-1.3.tar.gz |
|---|
| 189 |
|
|---|
| 190 |
You can also track products by adding a new bundle checkout part. It |
|---|
| 191 |
doesn't strictly have to be an svn bundle at all, any svn location will do, |
|---|
| 192 |
and cvs is also supported: |
|---|
| 193 |
|
|---|
| 194 |
[buildout] |
|---|
| 195 |
... |
|---|
| 196 |
parts = |
|---|
| 197 |
plone |
|---|
| 198 |
zope2 |
|---|
| 199 |
productdistros |
|---|
| 200 |
myproduct |
|---|
| 201 |
instance |
|---|
| 202 |
zopepy |
|---|
| 203 |
|
|---|
| 204 |
Note that "myproduct" comes before the "instance" part. You then |
|---|
| 205 |
need to add a new section to buildout.cfg: |
|---|
| 206 |
|
|---|
| 207 |
[myproduct] |
|---|
| 208 |
recipe = plone.recipe.bundlecheckout |
|---|
| 209 |
url = http://svn.plone.org/svn/collective/myproduct/trunk |
|---|
| 210 |
|
|---|
| 211 |
Finally, you need to tell Zope to find this new checkout and add it to its |
|---|
| 212 |
list of directories that are scanned for products: |
|---|
| 213 |
|
|---|
| 214 |
[instance] |
|---|
| 215 |
... |
|---|
| 216 |
products = |
|---|
| 217 |
${buildout:directory}/products |
|---|
| 218 |
${productdistros:location} |
|---|
| 219 |
${plonebundle:location} |
|---|
| 220 |
${myproduct:location} |
|---|
| 221 |
|
|---|
| 222 |
Without this last step, the "myproduct" part is simply managing an svn |
|---|
| 223 |
checkout and could potentially be used for something else instead. |
|---|
| 224 |
|
|---|
| 225 |
============= |
|---|
| 226 |
Using Windows |
|---|
| 227 |
============= |
|---|
| 228 |
|
|---|
| 229 |
To use buildout on Windows, you will need to install a few dependencies which |
|---|
| 230 |
other platforms manage on their own. |
|---|
| 231 |
|
|---|
| 232 |
Here are the steps you need to follow (thanks to Hanno Schlichting for these): |
|---|
| 233 |
|
|---|
| 234 |
Python (http://python.org) |
|---|
| 235 |
-------------------------- |
|---|
| 236 |
|
|---|
| 237 |
- Download and install Python 2.4.4 using the Windows installer from |
|---|
| 238 |
http://www.python.org/ftp/python/2.4.4/python-2.4.4.msi |
|---|
| 239 |
Select 'Install for all users' and it will put Python into the |
|---|
| 240 |
"C:\Python24" folder by default. |
|---|
| 241 |
|
|---|
| 242 |
- You also want the pywin32 extensions available from |
|---|
| 243 |
http://downloads.sourceforge.net/pywin32/pywin32-210.win32-py2.4.exe?modtime=1159009237&big_mirror=0 |
|---|
| 244 |
|
|---|
| 245 |
- And as a last step you want to download the Python imaging library available |
|---|
| 246 |
from http://effbot.org/downloads/PIL-1.1.6.win32-py2.4.exe |
|---|
| 247 |
|
|---|
| 248 |
- If you develop Zope based applications you will usually only need Python 2.4 |
|---|
| 249 |
at the moment, so it's easiest to put the Python binary on the systems PATH, |
|---|
| 250 |
so you don't need to specify its location manually each time you call it. |
|---|
| 251 |
|
|---|
| 252 |
Thus, put "C:\Python24" and "C:\Python24\Scripts" onto the PATH. You can |
|---|
| 253 |
find the PATH definition in the control panel under system preferences on |
|---|
| 254 |
the advanced tab at the bottom. The button is called environment variables. |
|---|
| 255 |
You want to add it at the end of the already existing PATH in the system |
|---|
| 256 |
section. Paths are separated by a semicolons. |
|---|
| 257 |
|
|---|
| 258 |
- You can test if this was successful by opening a new shell (cmd) and type |
|---|
| 259 |
in 'python -V'. It should report version 2.4.4 (or whichever version you |
|---|
| 260 |
installed). |
|---|
| 261 |
|
|---|
| 262 |
Opening a new shell can be done quickly by using the key combination |
|---|
| 263 |
'Windows-r' or if you are using Parallels on a Mac 'Apple-r'. Type in 'cmd' |
|---|
| 264 |
into the popup box that opens up and hit enter. |
|---|
| 265 |
|
|---|
| 266 |
|
|---|
| 267 |
Subversion (http://subversion.tigris.org) |
|---|
| 268 |
----------------------------------------- |
|---|
| 269 |
|
|---|
| 270 |
- Download the nice installer from |
|---|
| 271 |
http://subversion.tigris.org/files/documents/15/35379/svn-1.4.2-setup.exe |
|---|
| 272 |
|
|---|
| 273 |
- Run the installer. It defaults to installing into |
|---|
| 274 |
"C:\Program Files\Subversion". |
|---|
| 275 |
|
|---|
| 276 |
- Now put the install locations bin subfolder (for example |
|---|
| 277 |
"C:\Program Files\Subversion\bin") on your system PATH in the same way you |
|---|
| 278 |
put Python on it. |
|---|
| 279 |
|
|---|
| 280 |
- Open a new shell again and type in: 'svn --version' it should report |
|---|
| 281 |
version 1.4.2 or newer. |
|---|
| 282 |
|
|---|
| 283 |
|
|---|
| 284 |
MinGW (http://www.mingw.org/) |
|---|
| 285 |
----------------------------- |
|---|
| 286 |
|
|---|
| 287 |
This is a native port of the gcc compiler and its dependencies for Windows. |
|---|
| 288 |
There are other approaches enabling you to compile Python C extensions on |
|---|
| 289 |
Windows including Cygwin and using the official Microsoft C compiler, but this |
|---|
| 290 |
is a lightweight approach that uses only freely available tools. As |
|---|
| 291 |
it's used by a lot of people chances are high it will work for you and there's |
|---|
| 292 |
plenty of documentation out there to help you in troubleshooting problems. |
|---|
| 293 |
|
|---|
| 294 |
- Download the MinGW installer from |
|---|
| 295 |
http://downloads.sourceforge.net/mingw/MinGW-5.1.3.exe?modtime=1168794334&big_mirror=1 |
|---|
| 296 |
|
|---|
| 297 |
- The installer will ask you which options you would like to install. Choose |
|---|
| 298 |
base and make here. It will install into "C:\MinGW" by default. The install |
|---|
| 299 |
might take some time as it's getting files from sourceforge.net and you |
|---|
| 300 |
might need to hit 'retry' a couple of times. |
|---|
| 301 |
|
|---|
| 302 |
- Now put the install location's bin subfolder (for example "C:\MinGW\bin") on |
|---|
| 303 |
your system PATH in the same way you put Python on it. |
|---|
| 304 |
|
|---|
| 305 |
- Test this again by typing in: 'gcc --version' on a newly opened shell and |
|---|
| 306 |
it should report version 3.4.2 or newer. |
|---|
| 307 |
|
|---|
| 308 |
|
|---|
| 309 |
Configure Distutils to use MinGW |
|---|
| 310 |
-------------------------------- |
|---|
| 311 |
|
|---|
| 312 |
Some general information are available from |
|---|
| 313 |
http://www.mingw.org/MinGWiki/index.php/Python%20extensions for example but |
|---|
| 314 |
you don't need to read them all. |
|---|
| 315 |
|
|---|
| 316 |
- Create a file called 'distutils.cfg' in "C:\Python24\Lib\distutils". Open it |
|---|
| 317 |
with a text editor ('notepad distutils.cfg') and fill in the following lines: |
|---|
| 318 |
|
|---|
| 319 |
[build] |
|---|
| 320 |
compiler=mingw32 |
|---|
| 321 |
|
|---|
| 322 |
This will tell distutils to use MinGW as the default compiler, so you don't |
|---|
| 323 |
need to specify it manually using "--compiler=mingw32" while calling a |
|---|
| 324 |
package's setup.py with a command that involves building C extensions. This |
|---|
| 325 |
is extremely useful if the build command is written down in a buildout |
|---|
| 326 |
recipe where you cannot change the options without hacking the recipe |
|---|
| 327 |
itself. The z2c.recipe.zope2install used in ploneout is one such example. |
|---|
| 328 |
|
|---|
| 329 |
Disclaimer |
|---|
| 330 |
---------- |
|---|
| 331 |
|
|---|
| 332 |
This product is produced independently from the product Plone, and carries no |
|---|
| 333 |
guarantee from the Plone Foundation about quality, suitability or anything |
|---|
| 334 |
else. The supplier of this product assumes all responsibility for it. |
|---|