无法启动 Kivent 运行 python 3
Can't get Kivent up and running with python 3
我试图在我的 kivy 游戏中添加一点物理,但很难获得 "Kivent" 和 cymunk 到 运行。
我认为一切都已正确构建,但示例仅以 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 构建这些模块时遇到了一些问题,因此如果您对安装这些构建有好的建议,我们也欢迎。
使用 python3 设置 kivent_cymunk 的错误是:
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。
我希望我能够解释这个问题并且任何人都可以提供帮助。
提前致谢!
经过几个小时的编译和复制,我终于找到了答案。
当我发现cymunk没有正确编译后,非常容易。问题是,带有 python3 的编译器设置了
-Werror=declaration-after-statement
对于 python 2 这没有设置。要使用 python 3 正确编译 cymunk 和 kivent_cymunk,我必须添加
-Wno-error=declaration-after-statement
到 setup.py 中的 "extra_compile_args"。之后一切正常(除了很多警告)。
有谁知道为什么这些声明如此糟糕?或者为什么 gcc 编译器对 python 2 和 3 有不同的参数?
我希望这个答案能为别人省去很多工作。
最好的,
M
我试图在我的 kivy 游戏中添加一点物理,但很难获得 "Kivent" 和 cymunk 到 运行。 我认为一切都已正确构建,但示例仅以 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 构建这些模块时遇到了一些问题,因此如果您对安装这些构建有好的建议,我们也欢迎。
使用 python3 设置 kivent_cymunk 的错误是:
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。
我希望我能够解释这个问题并且任何人都可以提供帮助。
提前致谢!
经过几个小时的编译和复制,我终于找到了答案。
当我发现cymunk没有正确编译后,非常容易。问题是,带有 python3 的编译器设置了
-Werror=declaration-after-statement
对于 python 2 这没有设置。要使用 python 3 正确编译 cymunk 和 kivent_cymunk,我必须添加
-Wno-error=declaration-after-statement
到 setup.py 中的 "extra_compile_args"。之后一切正常(除了很多警告)。
有谁知道为什么这些声明如此糟糕?或者为什么 gcc 编译器对 python 2 和 3 有不同的参数?
我希望这个答案能为别人省去很多工作。
最好的, M