Problema de instalación de Debian Jessie y derivados

Hola! Estoy comenzando a utilizar Pilas con mis alumnos, ahora que les quise indicar cómo instalarlo me surgió un pequeño problema que creo solucionado… y otro que aún sigo intentando.


Paquete Debian

Hay un problema en el paquete .deb que está en el repo de huayra. Cuando lo descargás e intentás instalar tiene seteado que depende de python-box2d (>= 2.1.2). Cuando gdebi se quejó de la versión de la dependencia, supuse que era un problemilla de nuestro querido Debian Stable, pero al investigar un poco más en profundidad empecé a suponer que tal vez había un error en el archivo de control.
Al buscan en PyPi, me di cuenta que la última versión estable es la 2.3b0 y que la anterior es la 2.0.2b2; lo que me hizo suponer que tal vez hubo un error al escribir la dependencia en el archivo.
Entonces decidí probar de la siguiente manera:

  1. Descomprimí en una carpeta nueva llamada pilas el paquete .deb
  2. Edité el archivo pilas/DEBIAN/control cambiando la dependencia a python-box2d (>= 2.0.2)
  3. Y después volví a armar el paquete con el comando: dpkg -b pilas
  4. Intenté instalar el nuevo paquete pilas.deb con el gdebi y salió funcionando.

Lo que me hace suponer que estaba en lo cierto y que hay que corregir el archivo de control del paquete Debian.


Código Fuente

Por otro lado, en uno de los varios intentos, descargué el tar.gz que está en el mismo repo y cuando sigo las instrucciones de instalación, después de instalar según: sudo python setup.py install me pasa que aparantemente queda instalado en el sistema, pero sólo puedo ejecutarlo desde la carpeta donde descomprimí los archivos.
Lo que estoy haciendo es:

  1. Descargo y descomprimo el tar.gz
  2. Entro en la carpeta pilas-1.0.0
  3. Y ejecuto sudo python setup.py install (todas las dependencias estás satisfechas)
  4. Si ahora ejecuto pilasengine desde ese directorio, ejecuta sin problemas.

Si ahora quiero ejecutar desde cualquier otro directorio sale el siguiente error:

Traceback (most recent call last):
  File "/usr/local/bin/pilasengine", line 4, in <module>
    __import__('pkg_resources').run_script('pilas==1.0.0', 'pilasengine')
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 534, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1438, in run_script
    execfile(script_filename, namespace, namespace)
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/EGG-INFO/scripts/pilasengine", line 8, in <module>
    pilasengine.utils.iniciar_desde_terminal()
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/pilasengine/utils/__init__.py", line 285, in iniciar_desde_terminal
    _ = pilasengine.abrir_asistente()
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/pilasengine/__init__.py", line 610, in abrir_asistente
    return asistente.abrir()
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/pilasengine/asistente/__init__.py", line 225, in abrir
    ui.setupUi(MainWindow)
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/pilasengine/asistente/__init__.py", line 108, in setupUi
    self._cargar_pagina_principal()
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/pilasengine/asistente/__init__.py", line 176, in _cargar_pagina_principal
    file_path = pilasengine.utils.obtener_ruta_al_recurso('asistente/index.html')
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.0.0-py2.7.egg/pilasengine/utils/__init__.py", line 150, in obtener_ruta_al_recurso
    raise IOError("El archivo '%s' no existe." % (ruta))
IOError: El archivo 'index.html' no existe.

Además en el directorio pilas-1.0.0 me aparecen 3 directorios que pertenecen a root: build, dist y pilas.egg-info
Supongo que hay algo que no está terminando de instalar en el site-packages del sistema y no encuentra el archivo para lanzar Pilas.


Bueno, espero que este sea mi primer aporte para hacer que Pilas sea cada vez mejor! Cualquier comentario es bienvenido
(No inicié un issue en GitHub porque no estaba seguro… :-s)

Abrazo!

Este pull request ya soluciona eso intenta instalarlo desde el source, a mi me sucedió lo mismo con la versión 1.0.0 en Archlinux y Gnetoo, para la versión 1.1.0 en adelante ya esta corregido

1 Like

Ok. Ahora intento hacerlo desde el source…
Supongo que eso hace referencia a la solución de instalarlo desde el .tar.gz

Alguna receta para armar el .deb de manera sencilla desde el source???

Hola @lecovi, no tengo una receta sencilla ahora, pero en huayra usamos este repositorio junto a los comandos “uscan” y “pdebuild”

El problema radica en la versión de python-box2d que utiliza, instala este paquete dependiendo de la arquitectura de tu maquina

http://repo.huayra.conectarigualdad.gob.ar/huayra/pool/main/p/python-box2d/

Luego de instalarlo utiliza la instalación por defecto

mira yo uso dpkg para instalar desde la terminal

sudo dpkg -i paquete.deb

instala los 2 y listo

me pude dar cuenta que necesita algunas dependencias

python-box2d gvfs-bin phonon-backend-gstreamer python-pygame python-qt4-gl python-qt4-phonon

suerte

Acabo de probar la instalación de pilasengine en la version del kernel 3.16.0-4-amd64 y me arroja este error

statick@debian:~/proyectos/pilas$ pilasengine

Traceback (most recent call last):
File “/usr/local/bin/pilasengine”, line 4, in
import(‘pkg_resources’).run_script(‘pilas==1.4.9’, ‘pilasengine’)
File “/usr/lib/python2.7/dist-packages/pkg_resources.py”, line 534, in run_script
self.require(requires)[0].run_script(script_name, ns)
File “/usr/lib/python2.7/dist-packages/pkg_resources.py”, line 1438, in run_script
execfile(script_filename, namespace, namespace)
File “/usr/local/lib/python2.7/dist-packages/pilas-1.4.9-py2.7.egg/EGG-INFO/scripts/pilasengine”, line 6, in
import pilasengine
File “./pilasengine/init.py”, line 23, in
import escenas
File “./pilasengine/escenas/init.py”, line 12, in
from pilasengine.escenas.normal import Normal
File “./pilasengine/escenas/normal.py”, line 7, in
from pilasengine.escenas.escena import Escena
File “./pilasengine/escenas/escena.py”, line 14, in
from pilasengine.fisica import Fisica
File “./pilasengine/fisica/init.py”, line 9, in
from pilasengine.fisica.contact_listener import ObjetosContactListener
File “./pilasengine/fisica/contact_listener.py”, line 9, in
import Box2D as box2d
File “/usr/local/lib/python2.7/dist-packages/Box2D-2.3.2-py2.7-linux-x86_64.egg/Box2D/init.py”, line 20, in
from .Box2D import *
File “/usr/local/lib/python2.7/dist-packages/Box2D-2.3.2-py2.7-linux-x86_64.egg/Box2D/Box2D.py”, line 435, in
_Box2D.RAND_LIMIT_swigconstant(_Box2D)
AttributeError: ‘module’ object has no attribute ‘RAND_LIMIT_swigconstant’

olvide mencionar que seguí estos pasos

¡Hola @Statick!, habíamos visto ese problema hace un tiempo a causa de swig (una bibilioteca que usa pybox2d para interactuar con la biblioteca escrita en C).

¿Que versión de swig instala esa versión de linux?, ¿Probaste alguna de estas instrucciones Box2D make environment error: RAND_LIMIT_swigconstant · Issue #83 · openai/gym · GitHub?

No habia visto ese issue, segun veo la version de swig es 3.0

parece que tenia antes la swig y swig2.0 pero instale la swig3.0 y sigue el inconveniente

Ojo que swig se ejecuta cuando se produce la instalación de pybox2d, así que si cambias de versión de swig deberías volver a instalar pybox2d.

La verdad lo he intentado todo, esta es la respuesta que me arroja la terminal

statick@debian:~/proyectos/pilas$ swig -version

SWIG Version 3.0.8

Compiled with g++ [x86_64-pc-linux-gnu]

Configured options: +pcre

Please see http://www.swig.org for reporting bugs and further information

Que raro… hagamos una cosa, ¿me podrías pasar la versión de sistema que estás utilizando?, así me lo descargo y pruebo acá si puedo reproducir el error y resolverlo.

Porque me imagino que además de cambiar el kernel deben haber cambiado más cosas. ¿El sistema que estas usando ahora es el mismo en donde habías podido instalar correctamente pilas?, ¿o es una instalación nueva?

Es la ultima instalación de `Debian Jessie 8.8, sin embargo desde hace un tiempo no he podido instalarlo en este sistema, la version del kernel es 3.16.0-4-amd64

Espero se pueda resolver

`

Ah, ok. Ahí me bajo la ISO a ver si lo puedo hacer andar.

Te escribo ante cualquier novedad que tenga @Statick

Ahí pude ver lo que sucedió, resulta que el comando pip install -U pybox2d instala una versión muy reciente de box2d, y no funciona con swig como antes (aún no se muy bien por qué).

Así que la forma de resolverlo es descargar e instalar pybox2d desde una versión específica (la versión 2.3b0):

Estos son los comandos que ejecuté para descargar e instalar esa versión, en lugar de ejecutar pip install -U pybox2d:

wget https://pypi.python.org/packages/7f/d1/6ba672ea28720869b64e2af8d273efb501642ddb80a8cede04db81599d58/Box2D-2.3b0.zip#md5=25fc4f69cd580bdca0022ac3ace53865

unzip -x Box2D-2.3b0.zip
cd Box2D-2.3b0
python setup.py build
sudo python setup.py install

La compilación de box2d arroja varios mensajes de advertencia, pero funciona correctamente.

Al terminar de ejecutar “python setup.py install” (como root o con sudo), debería aparecerte este mensaje:

y luego pilas funcionará bien:

Por cierto, igual que vos tengo swig3.0:

Avisame cualquier cosa, yo voy a ir actualizando las instrucciones de instalación del repositorio.

Abrazo!

Que raro, me aparece este error

root@debian:/home/statick/Descargas/Box2D-2.3b0# python setup.py build
Using setuptools (version 0.6).
running build
running build_py
copying library/Box2D/__init__.py -> build/lib.linux-x86_64-2.7/Box2D
running build_ext
building 'Box2D._Box2D' extension
swigging Box2D/Box2D.i to Box2D/Box2D_wrap.cpp
swig -python -c++ -IBox2D -small -O -includeall -ignoremissing -w201 -globals b2Globals -outdir library/Box2D -keyword -w511 -D_SWIG_KWARGS -o Box2D/Box2D_wrap.cpp Box2D/Box2D.i
Box2D/Box2D_joints.i:506: Error: Unknown SWIG preprocessor directive: Some (if this is a block of target language code, delimit it with %{ and %})
Box2D/Box2D_joints.i:507: Error: Unknown SWIG preprocessor directive: have (if this is a block of target language code, delimit it with %{ and %})
Box2D/Box2D_joints.i:526: Error: Unknown SWIG preprocessor directive: Ratio (if this is a block of target language code, delimit it with %{ and %})
error: command 'swig' failed with exit status 1

Uhhh… no me muestra lo mismo, ¿tenemos todo igual no?:

Tu versión de swig es ligeramente diferente… ¿será eso?

Hace un tiempo vimos ese bug y aparecía por swig 3.0.10. Recuerdo haber hecho un parque para box2d y salió funcionando, ¿queres investigar por ese lado @Statick?: