[Python] Hilo general

Deoxys

Para no dar mucho por saco con tontas en otros threads, dejo este para poder compartir scripts, dudas, eventos, programas, etc etc etc.

¿Qué es Python?

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.

Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.

Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License, que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.

[Wikipedia]

¿Cómo empiezo?

La sintaxis es muy sencilla y el tutorial oficial lo cubre todo. Si lo preferís en castellano, aquí hay una traducción buena. También podéis aprender en otros sitios como Coursera, pero el tutorial en la página oficial es más que suficiente (Incluso si no habéis programado nunca) y más rápido que un curso de varias semanas (En un día se puede aprender lo básico sin mucho problema)

¿Para qué se usa?

Python es un lenguaje de propósito general. Es decir, puedes hacer lo que te salga del higo, desde scripts para automatizar tareas en tu ordenador hasta gestores de inventario, juegos, música, demos, páginas web, proceso de imágenes, aprendizaje máquina, procesamiento de lenguaje natural, detección de voz, robótica... Cualquier cosa.

Una de las ventajas de Python es que a día de hoy es un lenguaje muy extendido, lo que implica que hay librerías (Módulos con funciones ya escritas que podemos importar y usar) para todo. Si queremos, por ejemplo, procesar los contornos de una imagen para detectar una forma concreta, no tenemos que hacer nada más que importar scikit-image y escribir 4 líneas de código. Esto convierte a python en un lenguaje increíblemente versátil y potente.

Comunidad

Al igual que otros lenguajes de programación, python tiene una comunidad de desarrolladores bastante grande. En españa es corriente que algunas ciudades, provincias y comunidades autónomas tengan su grupo de usuarios (Madrid, Barcelona, Valencia, etc.). A nivel nacional existe la fundación Python España (Independiente de los grupos locales), y a nivel internacional está la Python Software Foundation.

Estos grupos organizan quedadas/reuniones, charlas, actividades y conferencias. A nivel nacional la más importante es la PyCon España (3 ediciones), pero cada cierto tiempo aparecen otras de menor escala y de otros tipos (talleres, dojos, grupos de trabajo, hackathons) en otras ciudades. Son eventos bastante interesantes y geniales para aprender más (O aprender desde cero) y conocer gente, así que buscad un grupo donde viváis y apuntaros a la próxima.

???; profit

test

wip, se aceptan PRs para este post :P

22
B

pillo sitio.

para hacer #2 productivo. pongo como usar virtualenv.

virtualenv & virtualenvwrapper - linux & osx

virtualenv es una herramienta diseñada para poder desarrollar proyectos en Python trabajando con diferentes versiones de paquetes que, de otra forma, entrarían en conflicto. Por ejemplo, si un programador quiere desarrollar dos proyectos con diferentes versiones de Django, no es posible tener las dos versiones instaladas en el directorio de bibliotecas de Python del sistema, a no ser que se utilice una herramienta como virtualenv. Con virtualenv, este programador crearía dos entornos aislados, e instalaría cada versión de Django en uno de los entornos.

virtualenvwrapper, por su parte, proporciona varios comandos para hacer más cómodo el uso de virtualenv desde la consola.

Aparte de estas dos herramientas, a partir de la versión 3.3 de Python, la biblioteca estándar incluye venv como un módulo integrado. venv implementa una API similar a la de virtualenv.

Instalacion

$ pip install virtualenv

Crear el entorno

$ virtualenv mi_proyecto

Lo que crea el directorio mi_proyecto/ con la siguiente estructura.

mi_proyecto/
    bin/
    include/
    lib/

dentro de bin se encuentran los ejecutables para el virtualenv. en include estan los archivos cabeceras de c (*.h) necesarios para librerias de python. en /lib una copia de python. site-packages se aloja el codigo fuente de los pkg de python instalados.

Activar el entorno

$ cd mi_proyecto/
$ source bin/activate

PS1 se actualiza con el entorno que estamos usando.

Desactivar

$ deactivate

Instalar paquetes

$ pip install pkg

Ubicar ficheros
yo lo he probado con un repo de git, hice el clone en un directorio y luego con un ln -s le hice el link dentro del proyecto

$ ln -s /ruta/repo/git /ruta/proyecto/mi_proyecto/src

todos los ficheros los ubicamos dentro de /src y listo. abriendo consola dentro de /src tenemos git funcional (para hacer commits, pull, etc).

para mejorar esto aun mas, os recomiendo usar virtualenvwrapper

Instalacion

$ pip install virtualenvwrapper

Crear el directorio donde guardamos los virtualenvs

$ mkdir $HOME/.virtualenvs

Agregamos a nuestro .bashrc lo siguiente

export WORKON_HOME=~/.virtualenvs
source /usr/bin/virtualenvwrapper.sh

Y cargamos

$ source .bashrc

Uso basico
Ver la lista de virtualenvs instalados:

$ workon

Crear un nuevo virtualenv:

$ mkvirtualenv -p /usr/bin/python2.7 mi_env

Activar el virtualenv:

$ workon mi_env

Instalar un paquete (p.ej. Django) en el virtualenv:
code$ pip install django[/code]

Salir del virtualenv:
code$ deactivate[/code]

virtualenv-pypi | https://pypi.python.org/pypi/virtualenv

5 1 respuesta
viodream

Lo mismo!

HeXaN

Pyllo sitio.

Deoxys

Dejad de pillar sitio y empezad a compartir cosas gañanes :P

Va, por poner ejemplos, cosas que he hecho estos últimos días:

API rest sin dependencias

cuando recibe una petición GET por HTTP devuelve el uptime y la carga del servidor

Se puede extender muy fácil para que trabaje en diferentes directorios, acceda a bases de datos o genere páginas web enteras

Código: https://github.com/Achifaifa/scripts/blob/master/status.py
Demo: http://achi.se:57475

Actualizador de mensajes para MV

Coge los mensajes nuevos en los hilos que le digas y te los enseña por consola (Sólo *nix, aunque se puede adaptar a windows quitando los colores)

Primero comprueba cuál es la última página de cada hilo, y luego procesa todos los mensajes posteriores al último que se mostró. Está pensado para actualizarlos cada 5-10-15 minutos.
El contenido (Autor, fecha, texto, título, etc) se busca en la web con xpath una vez parseada con lxml

Código: https://github.com/Achifaifa/scripts/blob/master/updatefavs.py

Avisos de calendario

Este es un poco ghetto, pero bueno :psyduck:

va a la wiki de nuestro espacio (A la página donde listamos las futuras actividades), se la descarga y almacena en una lista todas las actividades que hay.
Después las compara con una lista almacenada en el disco duro (Que contiene las actividades que se descargaron la última vez que se ejecutó el script), y si hay alguna diferencia (Normalmente por que se añaden actividades nuevas) lanza otro script que escribe una alerta en la barra de tareas de i3. Está pensado para ejecutarse todos los días con cron.

Código: https://github.com/Achifaifa/scripts/blob/master/updateschedule.py
<bonus>Código del script para la barra de tareas (Trabaja modificando otro script que pone el autor y nombre de la canción que se esté escuchando en moc): https://github.com/Achifaifa/config/blob/master/cirno/.config/i3status/setmessage.py

2
MartiONE

Pillo sitio, flask 4 president!

m4andg4

Pillo culebra

Kaiserlau

yo tengo lio por casa, mañana o pasado comparto lo que hice con el foro de musica, aunque todo el codigo un poco wtf xD

hda

¡Bien! A jugar :D

B

Yo quiero saber como cojones actualizar in situ mi package sin tener que salir de python y volver a entrar haciendo un import ni tener que usar reloads y cosas de esas...

1 respuesta
Kaiserlau

#10 no entiendo xD dices en el shell?

1 respuesta
B

#11 si en plan tengo una libreria ponle "potato"

Escribo en el shell:
import potato

cambio la libreria
quiero poder hacer un reload(potato) sin problemas, a veces no se me cargan los cambios.

edit: Sobre todo me pasa cuando tengo setup y tal...

2 respuestas
Kaiserlau

#12 yo lo q hago es reload y otra vez import. Npi si hay alguna forma mejor de hacerlo xD.

De todas maneras si usas idle con f5 te carga el pakete directamente al shell con su reload. (creo q era f5)

1 respuesta
Deoxys

#12 En ipython yo hago reload y carga los cambios sin problemas

Edit: A ver si podéis echarme una mano con esto, porque no sé por dónde tirar.

Uno de los scripts que he puesto antes (El último) va en un trabajo de cron que se ejecuta todos los días. Funciona perfectamente, pero cuando lo lanza cron no actualiza i3.

Todo funciona (De hecho entra en este if y actualiza el horario local), pero la instrucción de cambiar el mensaje no funciona cuando cron ejecuta el archivo y no tengo ni la más remota idea de por qué. ¿Sabéis por qué pasa esto? No me ha pasado con ninguna otra cosa que he hecho con cron.

Edit2: Vaaale. Este era el problema https://stackoverflow.com/questions/12172622/python-os-calls-dont-work-in-crontab

1 respuesta
X-Crim

como pronunciais python? paiton? paizon? piton? xddd

3 respuestas
Markitos_182

#15 No podía empezar el hilo de mejor manera: Paiton/Paizon, y entre coleguis, pitón

Kaiserlau

picon :psyduck:

JoSuK

Teniendo en cuenta que tengo los conceptos de programación mas o menos claros, pero que jamas he programado algo "serio", ¿Podeis recomendarme un curso o tutorial donde se haga una aplicación medianamente compleja en python? Coursera y demás al final los acabo dejando por aburrimiento.

1 respuesta
HeXaN

#15 Como "Monty Python2, pero sin el Monty.

Kaiserlau

#18 eso nos pasa a todos o por lo menos tambien a mi, yo lo q suelo es echar un vistazo a proyectos mas grandes o complejos en github.

Deoxys

Me pasaba lo mismo y el problema es que a nada que miras algo un poco grande empieza a ser casi imposible el ver cómo funciona. Una de dos, o te involucras en algún proyecto que estés usando (ipython, django, flask, etc) o te creas el tuyo

HeXaN

El problema de mirar sin saber, es que ves todo lleno de HOLAQUEASE y desistes.

5 2 respuestas
Deoxys

#22 lol pues no hay muchos de esos. A no ser que estés mirando magia negra con metaprogramación chunga...

http://www.ironpythoninaction.com/magic-methods.html

Kaiserlau

#22 xdddddddd +1

HeXaN

¿Alguno sabe cómo escribir en un fichero directamente sin esperar a la finalización del script? Por más que le meto file.flush() y os.fsync(file.fileno()) no hay manera.

1 respuesta
Deoxys

#25

with open("ruta_al_archivo","modo") as nombre_de_variable:
  hacer_cosas()
1 respuesta
HeXaN

#26 Nope, eso no rula.

2 respuestas
Kaiserlau

#27 te refieres externamente?

Deoxys

#27 Qué raro, ¿Qué es lo que no te funciona?

1 respuesta
HeXaN

#29 Escribir en "tiempo real" en el fichero. Es decir, que en cuanto llegue a un write, lo escriba y no haya que esperar.

2 respuestas