<div dir="ltr"><div><div><div><div>Ahhh. Importante el hecho de que sean módulos fuera de vuestro control :).<br><br>Lo de la ruta absoluta es normal. Cada vez que "pip / setuptools" instalan un script, introducen el path completo al intérprete de Python (cuando usas la opción "console_scripts" de la que hablábamos).<br><br></div>Esto ha sido criticado, puesto que hace los entornos de Python dependientes de la ruta de instalación (incluyendo también los entornos virtuales creados con "virtualenv", que no se pueden mover sin recrearlos).<br><br></div>Como no tengo claro del todo tu escenario, te comento algunas ideas que se me ocurren:<br><br></div><div></div>1) No es _quizá_ la mejor práctica empaquetar en el build server todo un entorno de Python. En Windows, esto hará la aplicación dependiente de la versión de Python (x.y.z). Ciertamente no es el mayor problema si usas OSGeo4W como base, ya que el intérprete de Python está fijado por el propio OSGeo4W. <br><br>Una alternativa es usar un repositorio local para las instalaciones. He usado <b>pip2py</b> para esto, que es facilísimo (<a href="http://stackoverflow.com/a/12525448/401656">http://stackoverflow.com/a/12525448/401656</a>). También tienes <b>pip-accel</b>, aunque no la he probado y me parece más engorrosa. De esta manera, tu aplicación/entorno es más portable incluso aunque cambiase la versión de Python de tu entorno de destino, sin necesidad de pasar por el build server, y sin necesidad de conexión a la red. Tendrías que hacer la instalación de pip una vez activado el entorno virtual (en tu caso el entorno de OSGeo4W).<br><br></div>Haciéndolo así también instalará los archivos con los shebangs adecuados y paths correspondientes al entorno Python de destino.<br><div><br></div><div>2) Por otra parte, puedes instalar tu aplicación y dependencias (incluyendo IPython) en el entorno/ruta de destino que más te convenga. Aunque tu paquete no debería ser dependiente de la ruta de instalación, si quisieras hacerlo así, puedes hacer que tu entorno de Python utilice los paquetes que ya están instalados por OSGeo4W. Yo sólo hago esto en entornos de desarrollo, porque es más feo y engorroso y no me parece muy portable.<br><br></div><div>En cualquier caso, para ello tendrías que crear un archivo "sitecustomize.py" en el directorio Lib\site-packages de tu aplicación (<a href="http://stackoverflow.com/questions/10693706/creating-a-secondary-site-packages-directory-and-loading-packages-from-pth-fil">http://stackoverflow.com/questions/10693706/creating-a-secondary-site-packages-directory-and-loading-packages-from-pth-fil</a>)<br><pre class="gmail-lang-py gmail-prettyprint gmail-prettyprinted" style="margin-left:40px"><code><span class="gmail-kwd">import</span><span class="gmail-pln"> site
site.addsitedir('C:\\Program Files\\QGIS Wien\\apps\\Python27\\Lib\\site-packages')</span><span class="gmail-pun"><br></span></code></pre><pre class="gmail-lang-py gmail-prettyprint gmail-prettyprinted"><code><span class="gmail-pun"></span></code></pre></div><div>Esto hace que la instalación de Python de tu segundo entorno <br><br>Y a la hora de llamar a tu aplicación, tendrías que crear algún script que prepare el entorno (lo que normalmente hace OSGeo4W o virtualenv). Te pongo un ejemplo, pero en tu caso será diferente (el ejemplo es para QGIS, no para OSGeo4W, y tendrás que adaptarlo):<br></div><div><br><div style="margin-left:40px"><span style="font-family:monospace,monospace">set GDAL_DATA="C:\Program Files\QGIS Wien\apps\grass\grass-6.4.3\etc\ogr_csv"<br>set PATH="%PATH%;C:\Program Files\QGIS Wien\bin:C:\Program Files\QGIS Wien\apps\Python27\Lib\site-packages\numpy\core" <br><br>python your_application.py<br></span></div><br></div><div>Esta segunda opción la he comentado a modo de ilustración. No me parece recomendable excepto, como he dicho, para entornos de desarrollo, pero expresa cómo mantener dos entornos de Python y utilizar los módulos del primero desde el segundo, sin afectar al primer entorno (es decir, evitando "ensuciar" la instalación de OSGeo4W).<br><br></div><div>Y en este segundo caso, en Windows, sigues necesitando que ambos entornos compartan la misma versión de Python (x.y.z) si tienes bibliotecas nativas, así que tu paquete que sale del build server sería igualmente dependiente del entorno de destino.<br></div><div><br></div><div>3) Por último, tienes la opción de añadir a tu instalación un script que repase todos los shebang y los altere de acuerdo al entorno en el que está instalado. Tampoco me gusta mucho, pero creo que sería la única forma de instalar una aplicación Python dentro de OSGeo4W sin permitir que pip haga la instalación.<br></div><div><br></div><div><div><div>Sin tener claro tu caso, mi recomendación es la opción uno. Es muy fácil de mantener, es más portable.<br><br></div><div>Espero haberme explicado y que te sirva de algo. ¡Un saludo!.<br></div><div><br></div></div></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature">Jose Juan Montes</div></div>
<br><div class="gmail_quote">El 15 de noviembre de 2016, 11:13, Luigi Pirelli <span dir="ltr"><<a href="mailto:luipir@gmail.com" target="_blank">luipir@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">hmmmm... seguro no me explique bien<br>
<br>
no estoy hablando de scripts o modulos sobre que te tenemos "control",<br>
por ejemplo yo necesito instalarme ipython (en el entorno de execution<br>
de OSGeo4W) y esto se hace en el build server para que todo al final<br>
estea paquietizado sin mas neceistad de red.<br>
<br>
en el ipython.exe generado por pip, o lo que sea, hay enbedded un<br>
launcher con un shebang con path absoluto al interprete y lo que<br>
queria y decir a pip o pasar opciones a pip(y asi' a setuptool) para<br>
que el shebang en python.exe sea #!/usr/bin/env python.<br>
<br>
No se si me he explicado mejor o he complicado mas el asunto :)<br>
<span class="HOEnZb"><font color="#888888"><br>
Luigi Pirelli<br>
</font></span><br>
ps. el mundo seria mas guasy sin winzozz y sin todas las<br>
complicaciones que este introduce<br>
<span class="im HOEnZb"><br>
******************************<wbr>******************************<wbr>******************************<wbr>********<br>
* Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com<br>
* LinkedIn: <a href="https://www.linkedin.com/in/luigipirelli" rel="noreferrer" target="_blank">https://www.linkedin.com/in/<wbr>luigipirelli</a><br>
* Stackexchange: <a href="http://gis.stackexchange.com/users/19667/luigi-pirelli" rel="noreferrer" target="_blank">http://gis.stackexchange.com/<wbr>users/19667/luigi-pirelli</a><br>
* GitHub: <a href="https://github.com/luipir" rel="noreferrer" target="_blank">https://github.com/luipir</a><br>
* Mastering QGIS 2nd Edition:<br>
* <a href="https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition" rel="noreferrer" target="_blank">https://www.packtpub.com/big-<wbr>data-and-business-<wbr>intelligence/mastering-qgis-<wbr>second-edition</a><br>
******************************<wbr>******************************<wbr>******************************<wbr>********<br>
<br>
<br>
</span><div class="HOEnZb"><div class="h5">2016-11-14 17:31 GMT+01:00 José Juan Montes <<a href="mailto:jjmontes@gmail.com">jjmontes@gmail.com</a>>:<br>
> PIP no utiliza distutils.<br>
><br>
> PIP descomprime el paquete y llama a setup.py con un parámetro (install o<br>
> bdist_wheel) dependiendo de cómo haya sido empaquetado el proyecto.<br>
><br>
> setup.py importa setuptools o distutils, el desarrollador escoge cuál usar.<br>
> Lo normal es usar setuptools hoy en día.<br>
><br>
> PIP no genera ningún script ni escribe ningún shebang. Esto es tarea de<br>
> setuptools pero sólo cuando se usa "console_scripts". Cualquier otro script<br>
> que hayas escrito, o generado, se mantendrá intacto.<br>
><br>
> Saludos,<br>
><br>
><br>
> Jose Juan Montes<br>
><br>
> El 14 de noviembre de 2016, 16:58, Luigi Pirelli <<a href="mailto:luipir@gmail.com">luipir@gmail.com</a>><br>
> escribió:<br>
>><br>
>> usamos pip que me parece usa distutils<br>
>><br>
>> por ejemplo yo instalo mis modulos lado build server con pip y este<br>
>> escribe un shebang relacionado con python del build server => path<br>
>> malo cuando se hace el install final.<br>
>><br>
>> me gustaria decir a pip de poner la version mas universal que como<br>
>> dices es "#!/usr/bin/env python" ya que dependera' de los valores de<br>
>> PATH sobre que tenemos control... pero esto no soy capaz de ponerlo.<br>
>><br>
>> itentere' ver y probar las opciones de "console_scripts" gracias<br>
>><br>
>><br>
>> Luigi Pirelli<br>
>><br>
>><br>
>> ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com<br>
>> * LinkedIn: <a href="https://www.linkedin.com/in/luigipirelli" rel="noreferrer" target="_blank">https://www.linkedin.com/in/<wbr>luigipirelli</a><br>
>> * Stackexchange: <a href="http://gis.stackexchange.com/users/19667/luigi-pirelli" rel="noreferrer" target="_blank">http://gis.stackexchange.com/<wbr>users/19667/luigi-pirelli</a><br>
>> * GitHub: <a href="https://github.com/luipir" rel="noreferrer" target="_blank">https://github.com/luipir</a><br>
>> * Mastering QGIS 2nd Edition:<br>
>> *<br>
>> <a href="https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition" rel="noreferrer" target="_blank">https://www.packtpub.com/big-<wbr>data-and-business-<wbr>intelligence/mastering-qgis-<wbr>second-edition</a><br>
>><br>
>> ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>><br>
>><br>
>> 2016-11-14 16:47 GMT+01:00 José Juan Montes <<a href="mailto:jjmontes@gmail.com">jjmontes@gmail.com</a>>:<br>
>> > Creo que no mencionas si usas setuptools o distutils.<br>
>> ><br>
>> > Si estás escribiendo el script a mano, el shebang recomendado es:<br>
>> ><br>
>> > #!/usr/bin/env python<br>
>> ><br>
>> > Para incluir el script en el paquete, y dejar que pip/setuptools lo<br>
>> > instale<br>
>> > en un directorio adecuado que esté en el path, usarías la opción<br>
>> > 'scripts'<br>
>> > de setuptools en setup.py.<br>
>> ><br>
>> > Por otra parte, como ha dicho Miguel, puedes apuntar directamente a una<br>
>> > función en uno de los módulos, y dejar que setuptols genere el script<br>
>> > (que<br>
>> > debería funcionar en cualquier plataforma). Para ello, usarías la opción<br>
>> > 'console_scripts'  en setup.py. En tu caso es posiblemente más<br>
>> > recomendable,<br>
>> > ya que en mi opinión tienes más garantías de que el script sea portable.<br>
>> ><br>
>> > La documentación de ambas estrategias está en:<br>
>> ><br>
>> ><br>
>> > <a href="http://python-packaging.readthedocs.io/en/latest/command-line-scripts.html" rel="noreferrer" target="_blank">http://python-packaging.<wbr>readthedocs.io/en/latest/<wbr>command-line-scripts.html</a><br>
>> ><br>
>> > En ambos casos, setuptools instalará el script a un directorio en el<br>
>> > path.<br>
>> > Por defecto, esto sería /usr/local/bin en Linux. Sin embargo, si estás<br>
>> > usando un virtualenv, setuptools lo instalará correctamente a env/bin/<br>
>> > (Linux) o a env/Scripts (Windows), que también están en el path cuando<br>
>> > se<br>
>> > activa el virtualenv.<br>
>> ><br>
>> > ¡Un saludo!<br>
>> ><br>
>> ><br>
>> > Jose Juan Montes<br>
>> ><br>
>> > El 14 de noviembre de 2016, 16:08, Miguel González Álvarez<br>
>> > <<a href="mailto:migonzalvar@gmail.com">migonzalvar@gmail.com</a>> escribió:<br>
>> >><br>
>> >> Hola Luigi.<br>
>> >><br>
>> >> Sé que no es tu pregunta pero no sé si se podría resolver tu<br>
>> >> problemática<br>
>> >> usando el `console_scripts entry point`. En Windows, setuptools crea un<br>
>> >> archivo .exe que ejecuta el script. Te aseguras así que se ejecuta<br>
>> >> dentro<br>
>> >> del entorno.<br>
>> >><br>
>> >> En<br>
>> >><br>
>> >> <a href="http://setuptools.readthedocs.io/en/latest/setuptools.html#automatic-script-creation" rel="noreferrer" target="_blank">http://setuptools.readthedocs.<wbr>io/en/latest/setuptools.html#<wbr>automatic-script-creation</a><br>
>> >> pone:<br>
>> >><br>
>> >> > On Windows, a set of foo.exe, bar.exe, and baz.exe launchers are<br>
>> >> > created, alongside a set of foo.py, bar.py, and baz.pyw files. The<br>
>> >> > .exe<br>
>> >> > wrappers find and execute the right version of Python to run the .py<br>
>> >> > or .pyw<br>
>> >> > file.<br>
>> >><br>
>> >> Un saludo.<br>
>> >><br>
>> >> 2016-11-14 15:49 GMT+01:00 Luigi Pirelli <<a href="mailto:luipir@gmail.com">luipir@gmail.com</a>>:<br>
>> >>><br>
>> >>> si esto si, por esto que pip hace una cosa rara (para mi) construiendo<br>
>> >>> un .exe con un launcher<br>
>> >>><br>
>> >>><br>
>> >>><br>
>> >>> <a href="https://github.com/pypa/pip/blob/master/pip/_vendor/distlib/scripts.py#L205" rel="noreferrer" target="_blank">https://github.com/pypa/pip/<wbr>blob/master/pip/_vendor/<wbr>distlib/scripts.py#L205</a><br>
>> >>><br>
>> >>><br>
>> >>> Luigi Pirelli<br>
>> >>><br>
>> >>><br>
>> >>><br>
>> >>> ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> >>> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com<br>
>> >>> * LinkedIn: <a href="https://www.linkedin.com/in/luigipirelli" rel="noreferrer" target="_blank">https://www.linkedin.com/in/<wbr>luigipirelli</a><br>
>> >>> * Stackexchange:<br>
>> >>> <a href="http://gis.stackexchange.com/users/19667/luigi-pirelli" rel="noreferrer" target="_blank">http://gis.stackexchange.com/<wbr>users/19667/luigi-pirelli</a><br>
>> >>> * GitHub: <a href="https://github.com/luipir" rel="noreferrer" target="_blank">https://github.com/luipir</a><br>
>> >>> * Mastering QGIS 2nd Edition:<br>
>> >>> *<br>
>> >>><br>
>> >>> <a href="https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition" rel="noreferrer" target="_blank">https://www.packtpub.com/big-<wbr>data-and-business-<wbr>intelligence/mastering-qgis-<wbr>second-edition</a><br>
>> >>><br>
>> >>><br>
>> >>> ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> >>><br>
>> >>><br>
>> >>> 2016-11-14 15:33 GMT+01:00 Carlos Goce <<a href="mailto:carlosgoce@gmail.com">carlosgoce@gmail.com</a>>:<br>
>> >>> > Por si te sirve de ayuda. Sólo te puedo comentar que me parece que<br>
>> >>> > Windows<br>
>> >>> > ignora completamente los Shebang.<br>
>> >>> ><br>
>> >>> ><br>
>> >>> > El 14/11/2016 3:30 p. m., "Luigi Pirelli" <<a href="mailto:luipir@gmail.com">luipir@gmail.com</a>><br>
>> >>> > escribió:<br>
>> >>> >><br>
>> >>> >> hmmmm... con mucha probabilidad non es un problema de setup pero de<br>
>> >>> >> pip... creo que pip llega a crear el shebang de defauult aqui<br>
>> >>> >><br>
>> >>> >><br>
>> >>> >><br>
>> >>> >><br>
>> >>> >> <a href="https://github.com/pypa/pip/blob/master/pip/_vendor/distlib/scripts.py#L152" rel="noreferrer" target="_blank">https://github.com/pypa/pip/<wbr>blob/master/pip/_vendor/<wbr>distlib/scripts.py#L152</a><br>
>> >>> >> Luigi Pirelli<br>
>> >>> >><br>
>> >>> >><br>
>> >>> >><br>
>> >>> >><br>
>> >>> >> ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> >>> >> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT<br>
>> >>> >> com<br>
>> >>> >> * LinkedIn: <a href="https://www.linkedin.com/in/luigipirelli" rel="noreferrer" target="_blank">https://www.linkedin.com/in/<wbr>luigipirelli</a><br>
>> >>> >> * Stackexchange:<br>
>> >>> >> <a href="http://gis.stackexchange.com/users/19667/luigi-pirelli" rel="noreferrer" target="_blank">http://gis.stackexchange.com/<wbr>users/19667/luigi-pirelli</a><br>
>> >>> >> * GitHub: <a href="https://github.com/luipir" rel="noreferrer" target="_blank">https://github.com/luipir</a><br>
>> >>> >> * Mastering QGIS 2nd Edition:<br>
>> >>> >> *<br>
>> >>> >><br>
>> >>> >><br>
>> >>> >> <a href="https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition" rel="noreferrer" target="_blank">https://www.packtpub.com/big-<wbr>data-and-business-<wbr>intelligence/mastering-qgis-<wbr>second-edition</a><br>
>> >>> >><br>
>> >>> >><br>
>> >>> >><br>
>> >>> >> ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> >>> >><br>
>> >>> >><br>
>> >>> >> 2016-11-14 15:06 GMT+01:00 Luigi Pirelli <<a href="mailto:luipir@gmail.com">luipir@gmail.com</a>>:<br>
>> >>> >> > Hola<br>
>> >>> >> ><br>
>> >>> >> > tenemos un problema de epaquetamiento de modulos python... y<br>
>> >>> >> > especificatamente esto nos pasa en win.<br>
>> >>> >> ><br>
>> >>> >> > nos preparamos un installer en un build server, y en este build<br>
>> >>> >> > server<br>
>> >>> >> > instalamos los modulos que necesitamos => los scripts instalados<br>
>> >>> >> > tienen una stringa shebang echa asi'<br>
>> >>> >> ><br>
>> >>> >> > #!</path/to/python_in_build_<wbr>server><br>
>> >>> >> ><br>
>> >>> >> > esto es en general #!/user/bin/python o #!/user/local/bin/python<br>
>> >>> >> ><br>
>> >>> >> > pero a pasa la istalación en windows y usando un interprete<br>
>> >>> >> > python<br>
>> >>> >> > (embedded) nuesto #shebang tendría que ser<br>
>> >>> >> ><br>
>> >>> >> > #!</path/to/python_embedded><br>
>> >>> >> > y esto puede cambiar en función de donde se instala el script.<br>
>> >>> >> ><br>
>> >>> >> > asi' que necesitariamos poner una stringa shebang que se la mas<br>
>> >>> >> > generica posible y que sea capaz de puntar al python embedded.<br>
>> >>> >> ><br>
>> >>> >> > en general sería guay solucionarlo con los build options de<br>
>> >>> >> > setup.py<br>
>> >>> >> > como en (el build server es winzozz)<br>
>> >>> >> > pip.exe install --global-option=build<br>
>> >>> >> > --global-option='--executable=<wbr>"/usr/bin/env python" ' <package<br>
>> >>> >> > name><br>
>> >>> >> ><br>
>> >>> >> > pero el resultato siempre sale:<br>
>> >>> >> ><br>
>> >>> >> > #!python.exe<br>
>> >>> >> ><br>
>> >>> >> > asi' que puede ser que busca el executable y a no encontrarlo<br>
>> >>> >> > pone<br>
>> >>> >> > el<br>
>> >>> >> > default (estoy en el codigo de distutils viendo que hace)<br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> > otra opción esn pyLauncher<br>
>> >>> >> > (<a href="https://www.python.org/dev/peps/pep-0397/" rel="noreferrer" target="_blank">https://www.python.org/dev/<wbr>peps/pep-0397/</a>)<br>
>> >>> >> > pero bno se cuanto sea una solución adoptada en el mundo<br>
>> >>> >> > python...<br>
>> >>> >> > el<br>
>> >>> >> > desarrollo de pyLancher es parado hace tiempo y no veo muchos que<br>
>> >>> >> > lo<br>
>> >>> >> > utilizan (pero podría equivocarme)<br>
>> >>> >> ><br>
>> >>> >> > asi' venimos a la PREGUNTA<br>
>> >>> >> ><br>
>> >>> >> > hay una forma de pasar parametros a setup.py para que se pueda<br>
>> >>> >> > setear<br>
>> >>> >> > la stringa shebang?<br>
>> >>> >> ><br>
>> >>> >> > Luigi Pirelli<br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> > ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> >>> >> > * Boundless QGIS Support/Development: lpirelli AT boundlessgeo<br>
>> >>> >> > DOT<br>
>> >>> >> > com<br>
>> >>> >> > * LinkedIn: <a href="https://www.linkedin.com/in/luigipirelli" rel="noreferrer" target="_blank">https://www.linkedin.com/in/<wbr>luigipirelli</a><br>
>> >>> >> > * Stackexchange:<br>
>> >>> >> > <a href="http://gis.stackexchange.com/users/19667/luigi-pirelli" rel="noreferrer" target="_blank">http://gis.stackexchange.com/<wbr>users/19667/luigi-pirelli</a><br>
>> >>> >> > * GitHub: <a href="https://github.com/luipir" rel="noreferrer" target="_blank">https://github.com/luipir</a><br>
>> >>> >> > * Mastering QGIS 2nd Edition:<br>
>> >>> >> > *<br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> > <a href="https://www.packtpub.com/big-data-and-business-intelligence/mastering-qgis-second-edition" rel="noreferrer" target="_blank">https://www.packtpub.com/big-<wbr>data-and-business-<wbr>intelligence/mastering-qgis-<wbr>second-edition</a><br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> ><br>
>> >>> >> > ******************************<wbr>******************************<wbr>******************************<wbr>********<br>
>> >>> >> ______________________________<wbr>_________________<br>
>> >>> >> Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
>> >>> >> Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
>> >>> >> Vigo mailing list<br>
>> >>> >> <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
>> >>> >> <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
>> >>> ><br>
>> >>> ><br>
>> >>> > ______________________________<wbr>_________________<br>
>> >>> > Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
>> >>> > Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
>> >>> > Vigo mailing list<br>
>> >>> > <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
>> >>> > <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
>> >>> ______________________________<wbr>_________________<br>
>> >>> Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
>> >>> Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
>> >>> Vigo mailing list<br>
>> >>> <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
>> >>> <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
>> >><br>
>> >><br>
>> >><br>
>> >><br>
>> >> --<br>
>> >> Miguel González<br>
>> >> <a href="mailto:migonzalvar@gmail.com">migonzalvar@gmail.com</a><br>
>> >> PGP ID: 0C63761BEEBD05D3<br>
>> >><br>
>> >> ______________________________<wbr>_________________<br>
>> >> Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
>> >> Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
>> >> Vigo mailing list<br>
>> >> <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
>> >> <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
>> ><br>
>> ><br>
>> ><br>
>> > ______________________________<wbr>_________________<br>
>> > Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
>> > Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
>> > Vigo mailing list<br>
>> > <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
>> > <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
>> ______________________________<wbr>_________________<br>
>> Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
>> Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
>> Vigo mailing list<br>
>> <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
>> <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
><br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
> Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
> Vigo mailing list<br>
> <a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
> <a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a><br>
______________________________<wbr>_________________<br>
Asociación Python España: <a href="http://www.es.python.org/" rel="noreferrer" target="_blank">http://www.es.python.org/</a><br>
Python Vigo: <a href="http://www.python-vigo.es/" rel="noreferrer" target="_blank">http://www.python-vigo.es/</a><br>
Vigo mailing list<br>
<a href="mailto:Vigo@lists.es.python.org">Vigo@lists.es.python.org</a><br>
<a href="https://lists.es.python.org/listinfo/vigo" rel="noreferrer" target="_blank">https://lists.es.python.org/<wbr>listinfo/vigo</a></div></div></blockquote></div><br></div>