24 artigo/s coa etiqueta Python


wxpython no Ubuntu 16.04 con python3

Para a instalación do wxPython Phoenix no Ubuntu 16.04 dentro dun contorno virtual de Python3. Para elo vasta coa simple orde:

$ pip3 install -U --pre -f https://wxpython.org/Phoenix/snapshot-builds/linux/\
gtk3/ubuntu-16.04  wxPython_Phoenix

Engadir wxpython a virtualenv

Wx non se pode instalar (polo menos de momento) desde pip nun contorna virtual de python (virtualenv). Máis dangtrinh danos unha solución para este caso.

Trátase de instalar desde apt o paquete wx, no meu caso foi:

 $ sudo apt-get install python-wxgtk3.0

E unha vez instalado faise unha ligazón simbólica á contorna virtual:

$ ln -s /usr/lib/python2.7/site-packages/wx* /home/usuario/.virtualenvs/meu-env/lib/python2.7/site-packages/

Dependendo da distribución ou versión tamén pode ser (por exemplo ubuntu 16.04):

$ ln -s /usr/lib/python2.7/dist-packages/wx* /home/usuario/.virtualenvs/meu-env/lib/python2.7/site-packages/

Compilar wxformbuilder para o ubuntu 16.04

Seguindo as instrucións de README, apareceu este erro:

Linking additional-components-plugin
/usr/bin/ld: cannot find -lwx_gtk2u_media-3.0
collect2: error: ld returned 1 exit status
additional-components-plugin.make:85: recipe for target '../../../output/lib/wxformbuilder/libadditional.so' failed
make[1]: *** [../../../output/lib/wxformbuilder/libadditional.so] Error 1
Makefile:24: recipe for target 'additional-components-plugin' failed
make: *** [additional-components-plugin] Error 2

A solución foi instalar:

libwxgtk-media3.0-dev

Emprego de virtualenv con Eclipse

Emprego Eclipse con engadido PyDev. Pois ben, este permite escoller o interprete python para cada proxecto.

No momento de configurar o proxecto (e unha vez creado tamén), pode seleccionarse o interprete.

Os interpretes poden xestionarse en Window->Preferences->PyDev->Interpreters->Python Interpreter. Desde aquí para engadir unha contorna virtual (virtualenv) no momento se seleccionar o executable, selecciono o da contorna virtual por exemplo: /home/usuario/.virtualenvs/envpy34/bin/

Un detalle é que o Eclipse vai tratar de avisar para engadir tamén as rutas fora da contorna as cales desmarquei.

Fonte: stackoverflow.com

Implantación (deployment) de wheezy.web con apache

Wheezy.web tal como indica a páxina do proxecto é lixeiro, de alto rendemento, infraestrutura web WSGI de alta competencia cos principais recursos para construír unha web moderna.

Partindo de cero comecei polo que indican en wheezy.web, instalar mediante o:
# easy_install wheezy.web

Instalando a versión wheezy.web 0.1.485 sobre python2.7. A versión do SO é un Debian Jessie instalado ad hoc para facer probas con esta infraestrutura web.

Logo puxen no cartafol /home/www-data/probaweb2/ os ficheiros wsgihandler.py e o hello.py

Nesta entrada Empregar wsgi en modo demo xa comentei como configurar o apache.

O wsgihandler.py contén:

import os
import sys

home = '/home/www-data/'
sys.path.append(home + 'probaweb2')
os.chdir(home + 'probaweb2')

from hello import main

def application(environ, start_response):
    environ['SCRIPT_NAME'] = ''
    return main(environ, start_response)

E o hello.py é o Hello world de wheezy.web:

""" Minimal helloworld application.
"""

from wheezy.http import HTTPResponse
from wheezy.http import WSGIApplication
from wheezy.routing import url
from wheezy.web.handlers import BaseHandler
from wheezy.web.middleware import bootstrap_defaults
from wheezy.web.middleware import path_routing_middleware_factory


class WelcomeHandler(BaseHandler):

    def get(self):
        response = HTTPResponse()
        response.write('Hello World!')
        return response


def welcome(request):
    response = HTTPResponse()
    response.write('Hello World!')
    return response


all_urls = [
    url('', WelcomeHandler, name='default'),
    url('welcome', welcome, name='welcome')
]


options = {}
main = WSGIApplication(
    middleware=[
        bootstrap_defaults(url_mapping=all_urls),
        path_routing_middleware_factory
    ],
    options=options
)


if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    try:
        print('Visit http://localhost:8080/')
        make_server('', 8080, main).serve_forever()
    except KeyboardInterrupt:
        pass
    print('\nThanks!')

Logo tocou reiniciar o apache:

# service apache2 restart

E no navegador ir á ip do servidor seguido de /proba, por exemplo: http://localhost/proba

Pasar argumentos no Bind con wxPython

Sobre isto atopei esta resposta en stackoverflow a cal me pareceu moi elegante.

A primeira proposta é facer uso de lambda, que emvolba a función e pase outro argumento non especifico de WX:

button = wx.Button(self, 10, "Default Button", (20, 20))
        self.Bind(wx.EVT_BUTTON, lambda event: self.on_click(event, 'algun_valor'), button)

def on_click(self, event, somearg):
	 pass

No caso de que sexa algo moi recorrente fai a proposta dunha función de propósito xeral:

class foo(whateverwxobject):
    def better_bind(self, type, instance, handler, *args, **kwargs):
        self.Bind(type, lambda event: handler(event, *args, **kwargs), instance)

    def __init__(self):
        self.better_bind(wx.EVT_BUTTON, b, self.on_click, 'algun_valor')

Erro ao instalar cx_Freeze 4..3.4 no debian Jessie

Ao tratar de instalar o cx_freeze 4.3.4. no Debian Jessie mediante a orde:

$ sudo pip install cx_Freeze

atopeime co erro:

/home/thomas/Code/cx_freeze/source/bases/Console.c:36: undefined reference to `PyErr_Print'

A solución atopeina na páxina de erros do cx_freeze en concreto é a que suxire Tim Süberkrüb.

For python 2.7:

sudo apt-get install python-dev

sudo apt-get install libssl-dev

Open setup.py and change the line

if not vars.get("Py_ENABLE_SHARED", 0):

to

If True:

python setup.py build
sudo python setup.py install

Crear paquete executable con cx_freeze

Até o de agora viña usando py2exe para a xeración de executables. Tiña gañas de probar unha alternativa que fose multiplataforma como é o caso de cxFreeze.

Neste caso o sistema operativo é un windows, onde instalei a versión cx_Freeze-4.3.3.win32-py2.7 pero resulta.

Probeino co proxecto auto_licenzas, e daba o erro:

File "C:\Python\virtualenvproject\lib\site-packages\cx_freeze-4.3.4-py2.7-win32.egg\c x_Freeze\freezer.py", line 270, in _GetDefaultBinPathExcludes import cx_Freeze.util ImportError: DLL load failed: The specified module could not be found.

(ImportError: DLL load failed: No se puede encontrar el m¾dulo especificado.)

Despois de buscar un cacho atopei a solución aquí.

Basicamente ben a dicir que é un erro da versión 4.3.4 e que instalando a versión 4.3.3 se soluciona.

E así foi!! Así de simple!!

Mini guia virtualenv para debian jessie

Instalación

sudo apt-get install python-virtualenv
sudo apt-get install virtualenvwrapper

Uhna vez instalado, é preciso crear un directorio para almacenar os virtualenvs:

mkdir $HOME/.virtualenvs

De seguido hai que engadir as seguintes liñas ó final do documento ~/.bashrc:

export WORKON_HOME=~/.virtualenvs
 # esta liña de abaixo muda respecto de archlinux e en debian queda así
source /etc/bash_completion.d/virtualenvwrapper 

Para activar estas liñas é preciso reiniciar a sesión ou executar:

source ~/.bashrc

Pode acharse información extensa sobre o uso de virtualenvwrapper na páxina de Doug Hellmann.

Uso básico

Ver a lista de virtualenvs instalados:

$ workon

Crear un novo virtualenv:

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

Activar o virtualenv:

$ workon mi_env

Instalar un paquete (p.ej. Django) no virtualenv:

$ (mi_env)$ pip install django

Traballar no proyecto

Saír do virtualenv:

(mi_env)$ deactivate

Fonte: archlinux

Datas no catfish 0.3.2

Mudei o código para que amosase as datas en formato ISO si ou si.

Para elo abrin o ficheiro /usr/share/catfish/catfish.py (en versións máis novas pode estar aquí: /usr/share/catfish/catfish/CatfishWindow.py) e mudei a liña:

            if not self.options.time_iso:
                time_format = '%x %X'

por:

            if not self.options.time_iso:
                time_format = '%Y-%m-%d %H:%M'  # '%x %X'

Antes as datas apareceían co formato dd-mm-aaa o que facía que non ordenase ben, agora xa ordena correctamente.

Amosando 1 a 10 de 24