joe di castrohttp://joedicastro.com2011-06-27T10:21:00+02:00Pelican - Introducción e Instalación2011-06-27T10:21:00+02:00joe di castrohttp://joedicastro.com/pelican-introduccion-e-instalacion.html<p><a href="http://docs.notmyidea.org/alexis/pelican/">Pelican</a> es un generador de sitios web con contenido estático. Está orientado
originalmente a la creación de blogs. <strong>Pelican</strong> (Pelicano) es una anagrama de
la palabra francesa <em>Calepin</em> que significa en español "cuaderno de notas"
(blog). Su creador y desarrollador principal es el programador francés
<a href="http://blog.notmyidea.org/">Alexis Métaireau</a>. Y es la aplicación que genera el contenido para este
blog. Personalmente le veo muchas ventajas frente a una plataforma de blogs
convencional como Wordpress o Drupal, como ya comentaba en mi <a href="http://joedicastro.com/de-drupal-a-pelican.html">anterior articulo</a>. </p>
<p>Pelican genera este contenido estático (páginas HTML) a partir de ficheros de
texto plano formateados en un lenguaje de marcado ligero como <a href="http://es.wikipedia.org/wiki/Markdown">Markdown</a> o
<a href="http://es.wikipedia.org/wiki/ReStructuredText">reStructuredText</a>. También crea fuentes RSS y Atom de los artículos. Y
dependiendo del tema empleado se pueden tener un archivo de los artículos
publicados, clasificación por categorías, nube de etiquetas, un <a href="http://es.wikipedia.org/wiki/Blogroll">blogroll</a>,
enlaces a redes sociales, botón para tweeter, paginación, traducciones, etc.
Aunque viene un tema completo por defecto y están disponibles <a href="https://github.com/ametaireau/pelican-themes">algunos más</a>,
se puede crear uno completamente personalizado desde cero. La creación de
estos temas se basa en el sistema de plantillas <a href="http://jinja.pocoo.org/">jinja2</a>, lo que nos
permite una gran flexibilidad. También disponemos de varios scripts que nos
proporcionan soporte para comentarios con <a href="http://disqus.com">Disqus</a> y de analíticas con
<a href="http://www.google.com/intl/es/analytics/">Google Analytics</a> ó <a href="http://piwik.org/">Piwik</a>. También nos permite generar ficheros PDFs de
los artículos automáticamente y mostrar los enlaces a ellos, siempre que los
artículos se hayan creado con reStructuredText.</p>
<p>Es un software muy joven, el primer commit en <a href="https://github.com/ametaireau/pelican">GitHub</a> data del 13 de Agosto de
2010, pero que ha evolucionado bastante rápido y que aún sigue desarrollándose a
un buen ritmo. Es posible que por esto aún tenga alguna carencia o algún que
otro fallo, pero su autor es muy receptivo y acepta de buena gana las sugerencias,
informes de errores y colaboraciones de desarrollo. Cuenta con una documentación
bastante decente y actualizada. Alguno que otra cosa no está documentada, pero
lo veo normal dado el ritmo de desarrollo y de a quien va orientado un software
como este. Es muy sencilla su instalación y su utilización cuando se ha leído
esta, pero será mejor que lo explique con un ejemplo sobre la marcha.</p>
<h2 id="instalaci+n_para_linux">Instalación (para Linux)</h2>
<p>La instalación del mismo es relativamente sencilla si no queremos complicarnos
la vida, siempre tenemos la última versión disponible en el <a href="http://pypi.python.org/pypi/pelican/2.7.2">PyPi</a>. Así que
instalarlo podría ser tan sencillo como esto:</p>
<div class="codehilite"><pre><span class="gp">$</span> easy_install pelican
</pre></div>
<p>Aunque recomiendo emplear <a href="http://www.pip-installer.org/en/latest/index.html"><code>pip</code></a> en lugar de <code>easy_install</code>, de este modo:</p>
<div class="codehilite"><pre><span class="gp">$</span> pip install pelican
</pre></div>
<p>De todos modos desaconsejo emplear este método, me parece mejor solución, dada
la velocidad de desarrollo del software, emplear un entorno virtual para su
instalación. Un <a href="http://www.virtualenv.org/en/latest/index.html">entorno virtual</a> nos permite tener una versión de Python
independiente de la del resto del sistema, con sus propias librerías y con el
software instalado que nosotros deseemos. Todo esto solo estará disponible cuando
nos encontremos dentro de este entorno virtual, sin afectar al resto del
sistema. Y podemos eliminarlo o des/activarlo cuando deseemos. Es bastante más
sencillo de utilizar de lo que parece y es realmente potente. </p>
<p>Veamos, paso a paso, la forma en que yo lo instalaría.</p>
<p>Creamos una carpeta que contendrá Pelican, el entorno virtual y el sitio que
crearemos. Yo le daría el nombre de la URL del blog, por ejemplo, <em>myblog.com</em></p>
<div class="codehilite"><pre><span class="gp">$</span> mdkir myblog.com
<span class="gp">$</span> <span class="nb">cd </span>myblog.com
</pre></div>
<p>Descargamos la revisión actual del repositorio de Pelican en GitHub. Esto nos
creara una carpeta llamada <em>pelican</em> que contendrá una copia del repositorio en
local (lo cual nos será muy útil en el futuro para actualizarlo). </p>
<div class="codehilite"><pre><span class="gp">$</span> git clone git://github.com/ametaireau/pelican.git
<span class="go">Cloning into pelican...</span>
<span class="go">remote: Counting objects: 2603, done.</span>
<span class="go">remote: Compressing objects: 100% (1143/1143), done.</span>
<span class="go">remote: Total 2603 (delta 1541), reused 2420 (delta 1374)</span>
<span class="go">Receiving objects: 100% (2603/2603), 687.30 KiB | 397 KiB/s, done.</span>
<span class="go">Resolving deltas: 100% (1541/1541), done.</span>
</pre></div>
<p>Ahora vamos a crear nuestro entorno virtual. En caso de no tener instalado <code>pip</code>
o <code>virtualenv</code>, es rematadamente sencillo:</p>
<div class="codehilite"><pre><span class="gp">$</span> easy_install pip
<span class="gp">$</span> pip install virtualenv
</pre></div>
<p>Voy a llamar <em>env</em> a nuestro entorno virtual. Lo creamos así.</p>
<div class="codehilite"><pre><span class="gp">$</span> virtualenv env
<span class="go">New python executable in env/bin/python</span>
<span class="go">Installing distribute...........................................................</span>
<span class="go">................................................................................</span>
<span class="go">.......................................done.</span>
<span class="gp">$</span> ls
<span class="go">env pelican</span>
</pre></div>
<p>Ahora activaremos nuestro entorno virtual para "sumergirnos" dentro de él. </p>
<div class="codehilite"><pre><span class="gp">$</span> <span class="nb">source </span>env/bin/activate
<span class="gp">(env)$</span>
</pre></div>
<p>Vemos que aparece el nombre del entorno virtual entre paréntesis antes de la
línea del <a href="http://es.wikipedia.org/wiki/Prompt">prompt</a>. Eso quiere decir que
nos encontramos dentro de este entorno virtual. Ahora procederemos a instalar
Pelican. </p>
<div class="codehilite"><pre><span class="gp">$</span> <span class="nb">cd </span>pelican/
<span class="gp">$</span> python setup.py install
</pre></div>
<p>Ahora tenemos ya instalado Pelican, <strong>solo dentro de nuestro entorno virtual</strong>.
Si probamos a llamar al programa fuera de él, veremos que no está disponible,
luego necesitaremos activar este entorno cada vez que queramos emplearlo.</p>
<div class="codehilite"><pre><span class="gp">$</span> pelican
<span class="go">CRITICAL: you need to specify a path containing the content (see pelican --help for </span>
<span class="go">more information)</span>
</pre></div>
<p>Nos da un error porque no le hemos pasado los parámetros necesarios. Ahora
desactivamos el entorno y volvemos a llamar al programa y nos dice que no
existe.</p>
<div class="codehilite"><pre><span class="gp">$</span> deactivate
<span class="gp">$</span> pelican
<span class="go">pelican: orden no encontrada</span>
</pre></div>
<p>Tenemos ahora dentro de <em>myblog.com/</em> dos directorios, <em>env</em> y <em>pelican</em>.
Podríamos borrar ahora el directorio <em>pelican</em> porque ya lo tenemos instalado
dentro del entorno virtual, pero sería bueno conservarlo para poder actualizarlo
en el futuro mediante <code>git pull</code>. Yo crearía una tercer directorio, <em>site</em> donde
se alojaría nuestro sitio, organizado a su vez en tres subdirectorios: </p>
<ul>
<li>
<p><strong>source</strong>: sería la carpeta donde alojaríamos los archivos de texto de
nuestro blog y todo aquello que quisiéramos que formara parte de nuestro sitio:
imágenes, fichero <a href="http://es.wikipedia.org/wiki/Htaccess">.htacess</a>, fichero <a href="http://es.wikipedia.org/wiki/Robots.txt">robots.txt</a>, páginas
personalizadas...</p>
</li>
<li>
<p><strong>output</strong>: El resultado del procesamiento de Pelican, es decir, nuestro blog.</p>
</li>
<li><strong>theme</strong> : Sería el tema que usariamos para crear nuestro blog, en el
estarían las plantillas <strong>jinja2</strong>, las hojas de estilo .css, el contenido
estático (iconos, imágenes), ...</li>
</ul>
<p>Luego, lo haríamos así:</p>
<div class="codehilite"><pre><span class="gp">$</span> <span class="nb">cd</span> ..
<span class="gp">$</span> mkdir -p site/source
<span class="gp">$</span> mkdir site/output
<span class="gp">$</span> mkdir site/theme
<span class="gp">$</span> ls site/
<span class="go">output source theme</span>
</pre></div>
<p>Ya está, tenemos instalado Pelican y creada nuestra estructura para empezar a
trabajar con él. Para eso nada mejor que crear un primer sitio de ejemplo.
Entramos en el entorno virtual y creamos el sitio que viene de ejemplo con
Pelican:</p>
<div class="codehilite"><pre><span class="gp">$</span> <span class="nb">source </span>env/bin/activate
<span class="gp">$</span> pelican pelican/samples/content/ -o site/output -s pelican/samples/pelican.conf.py
</pre></div>
<p>Y ahora si abrimos el fichero <code>myblog.com/site/output/index.html</code> en un
navegador, veremos algo como esto (en la imagen se ve la categoría cat1
seleccionada):</p>
<p style="text-align:center;"><img src="pictures/sample_blog.png"
alt="pelican sample blog" title="pelican sample blog" width=453 height=700 /></p>
<p>Es así de fácil de emplear Pelican, simplemente especificarle el directorio donde
está el origen del contenido, el directorio destino y el fichero de configuración.
Aunque con el fichero de configuración correctamente creado, solo será necesario
indicarle la ubicación del mismo. Para comprender mejor la estructura y como
funciona Pelican, sería buena idea copiar el tema, el fichero de configuración y
el contenido que han generado este sitio de ejemplo a la carpeta <em>site</em> para no
empezar nuestro blog desde cero.</p>
<div class="codehilite"><pre><span class="gp">$</span> cp -r pelican/samples/content/* site/source
<span class="gp">$</span> cp -r pelican/pelican/themes/notmyidea/* site/theme/
<span class="gp">$</span> cp pelican/samples/pelican.conf.py site/
</pre></div>
<p>En próximos artículos veremos como crear artículos, publicar el sitio,
personalizar el tema y automatizar todos estos procesos para hacerlo todo mucho
más sencillo. </p>