Problema de instalación de Debian Jessie y derivados

¡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?:

En otra maquina que tiene Debian Jessie tambien intente instalar pilasengine compilandolo como indica el manual de en github, compilando mnualmente box2d como se indica en este manual y veo que me sigue saliendo el mismo error, justo despues del comando:

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

Me doy cuenta que tiene conflictos con swig pero tambien tengo las versiones de swig y swig3.0, probe desinstalar una (swig) y dejar solo swig3.0 por conflictos de versiones y viceversa pero nada sigue saliendo este error

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
unable to execute ‘swig’: No such file or directory
error: command ‘swig’ failed with exit status 1

No lo puedo instalar en debian strecht (9)

jose@debian64:~/Programas$ pilas engine
Traceback (most recent call last):
File “/usr/bin/pilas”, line 6, in
import pilasengine
File “/usr/lib/python2.7/dist-packages/pilasengine/init.py”, line 23, in
import escenas
File “/usr/lib/python2.7/dist-packages/pilasengine/escenas/init.py”, line 12, in
from pilasengine.escenas.normal import Normal
File “/usr/lib/python2.7/dist-packages/pilasengine/escenas/normal.py”, line 7, in
from pilasengine.escenas.escena import Escena
File “/usr/lib/python2.7/dist-packages/pilasengine/escenas/escena.py”, line 14, in
from pilasengine.fisica import Fisica
File “/usr/lib/python2.7/dist-packages/pilasengine/fisica/init.py”, line 9, in
from pilasengine.fisica.contact_listener import ObjetosContactListener
File “/usr/lib/python2.7/dist-packages/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’

Hola @josegon !!

Recién me instalé un debian 9.3 (Stretch) y me topé con el mismo error que mencionas.

El problema se produce porque se termina instalando box2d 2.3.2 cuando en realidad debería instalarse la versión 2.3.1

Para resolverlo, tendrías que ejecutar estos comandos:

git clone https://github.com/pybox2d/pybox2d -b 2.3.1
cd pybox2d
python setup.py build
sudo python setup.py install

Eso si, justo después de corregir eso también noté que en debian actualizaron pyqt4 , quitando un módulo llamado webkit (que usa pilas).

Así que vas a tener que ejecutar otros comandos para instalar pyqt con soporte para tener este modulo webkit:

sudo su
echo "deb http://archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe" >> /etc/apt/sources.list
apt-get update
apt-get install python-qt4=4.11.4+dfsg-1build4 python-qt4-gl=4.11.4+dfsg-1build4 python-qt4-phonon=4.11.4+dfsg-1build4
apt-mark hold python-qt4 python-qt4-gl python-qt4-phonon
exit

y con eso deberías poder clonar e iniciar pilas correctamente:

git clone http://github.com/hugoruscitti/pilas.git
cd pilas
python bin/pilasengine

O bien, ejecutar esto para instalarlo completamente en tu equipo:

python setup.py build
sudo python setup.py install

Mil disculpas por los contratiempos… avisanos si te funciona correctamente siguiendo estos pasos.

Excelente solución, lo acabo de probar en Debian Stretch y funciona de maravilla. Sugiero incluir estos datos en el tutorial de instalación en GitHub

De cierta forma es una respuesta mi estimado @hugoruscitti pero cuando intentas actualizar nuevamente tu sistema operativo este se rompe y no permite actualizar, por lo que es necesario comentar los repos de ubuntu

echo "deb http://archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu/ xenial-updates universe" >> /etc/apt/sources.list

y al actualizar

apt-get update

se borra pilasengine. He intentado actualizar normalmente debian despues de este paso pero suele salir este error.

statick@debian:~/pilas/$ pilasengine
Traceback (most recent call last):
  File "/usr/local/bin/pilasengine", line 4, in <module>
    __import__('pkg_resources').run_script('pilas==1.4.12', 'pilasengine')
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 739, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 1494, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python2.7/dist-packages/pilas-1.4.12-py2.7.egg/EGG-INFO/scripts/pilasengine", line 6, in <module>
    import pilasengine
  File "./pilasengine/__init__.py", line 23, in <module>
    import escenas
  File "./pilasengine/escenas/__init__.py", line 12, in <module>
    from pilasengine.escenas.normal import Normal
  File "./pilasengine/escenas/normal.py", line 7, in <module>
    from pilasengine.escenas.escena import Escena
  File "./pilasengine/escenas/escena.py", line 14, in <module>
    from pilasengine.fisica import Fisica
  File "./pilasengine/fisica/__init__.py", line 9, in <module>
    from pilasengine.fisica.contact_listener import ObjetosContactListener
  File "./pilasengine/fisica/contact_listener.py", line 9, in <module>
    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 <module>
    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 <module>
    _Box2D.RAND_LIMIT_swigconstant(_Box2D)
AttributeError: 'module' object has no attribute 'RAND_LIMIT_swigconstant'

Es decir puedes tener pilasengine instalado pero el sistema es vulnerable por no estar actualizado ni poder hacerlo o puedes actualizar perdiendo por completo pilasengine. Trate con virtualenv pero el mismo problema.

Quizá pueda ser un inconveniente que se pueda solucionar actualizando las librerías de pilas a las actuales para que no se de este lío al compilar y ejecutar pilas

Momentaneamente la solución es volver a compilar pybox2d

cd pybox2d
python setup.py build
sudo python setup.py install

y ejecutar pilasengine desde la terminal de comandos ya que no crea un acceso al sistema de forma gráfica

Modifique un poco la guía de instalación en la wiki de github agregando estos pasos para la compilación de box2d 'b 2.3.1 en sistemas operativos GNU/Linux Debian y derivados.

Podrán encontrar la información en este link: