Не могу запустить Kivent с Python 3

Я пытался добавить немного физики в мою игру, но с трудом заставлял "Кивента" и кимунка работать. Я думаю, что все построено правильно, но примеры начинаются только с python 2, но не с python3.

Я получил следующее сообщение об ошибке:

mic@lin:~/python/kivy-kivent-12766f1/examples/4_adding_physics_objects> python3 main.py
[INFO   ] [Logger      ] Record log in /home/mic/.kiv/logs/kivy_16-01-26_48.txt
[INFO   ] [Kivy        ] v1.9.1
[INFO   ] [Python      ] v3.4.1 (default, May 23 2014, 17:48:28) [GCC]
[INFO   ] [Factory     ] 179 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_gif, img_pygame (img_pil, img_ffpyplayer ignored)
[INFO   ] [Window      ] Provider: pygame(['window_egl_rpi'] ignored)
[INFO   ] [GL          ] OpenGL version <b'3.0 Mesa 10.3.7'>
[INFO   ] [GL          ] OpenGL vendor <b'Intel Open Source Technology Center'>
[INFO   ] [GL          ] OpenGL renderer <b'Mesa DRI Intel(R) Haswell Mobile '>
[INFO   ] [GL          ] OpenGL parsed version: 3, 0
[INFO   ] [GL          ] Shading version <b'1.30'>
[INFO   ] [GL          ] Texture max size <8192>
[INFO   ] [GL          ] Texture max units <32>
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [OSC         ] using <multiprocessing> for socket
 Traceback (most recent call last):
   File "main.py", line 8, in <module>
     import kivent_cymunk
   File "/home/mic/python/kivy-kivent-12766f1/examples/4_adding_physics_objects/kivent_cymunk/__init__.py", line 1, in <module>
     from . import physics
 ImportError: dynamic module does not define init function (PyInit_physics)

Я искал весь день, но не нашел ответа. Одно ядро ​​Kivent работает, поэтому оно должно быть проблемой с cymunk или kivent_cymunk. У меня были некоторые проблемы при сборке этих модулей с использованием python3, поэтому, если у вас есть хороший совет по установке этих сборок, это также будет приветствоваться.

Ошибка для настройки kivent_cymunk с использованием python3 была:

building 'kivent_cymunk.physics' extension
gcc -pthread -Wno-unused-result -Werror=declaration-after-statement -DNDEBUG -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -DOPENSSL_LOAD_CONF -fPIC -I/usr/include/python3.4m -c kivent_cymunk/physics.c -o build/temp.linux-x86_64-3.4/kivent_cymunk/physics.o -std=c99 -ffast-math
In file included from kivent_cymunk/chipmunk/chipmunk.h:116:0,
                 from kivent_cymunk/physics.c:253:
    kivent_cymunk/chipmunk/constraints/cpConstraint.h: In function ‘cpConstraintActivateBodies’:
    kivent_cymunk/chipmunk/constraints/cpConstraint.h:94:2: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
  cpBody *b = constraint->b; if(b) cpBodyActivate(b);
  ^
cc1: some warnings being treated as errors
error: command 'gcc' failed with exit status 1

Моя система: OpenSuse 13.2.

Я надеюсь, что смог объяснить проблему, и любой может помочь.

Заранее спасибо!

1 ответ

Решение

Поэтому после нескольких часов компиляции и копирования я наконец нашел свой ответ.

После того, как я узнал, было удивительно легко, что кимунк не скомпилирован правильно. Проблема была в том, что компилятор с python3 установил

-Werror=declaration-after-statement

С питоном 2 это не было установлено. Чтобы правильно скомпилировать cymunk и kivent_cymunk с помощью python 3, мне пришлось добавить

-Wno-error=declaration-after-statement

к "extra_compile_args" в setup.py. После этого все работало хорошо (кроме множества предупреждений).

Кто-нибудь знает, почему эти заявления такие плохие? Или почему компилятор gcc имеет разные аргументы для python 2 и 3?

Я надеюсь, что я спасу кого-то много работы с этим ответом.

Бест, М

Другие вопросы по тегам