0

我正在测试 pysdl2 的学习飞行教程。(我也是 python 新手) http://pysdl2.readthedocs.io/en/rel_0_9_4/tutorial/index.html

我收到一个错误,认为这只是一些路径问题。

错误:

guillaume@ubuntu:~/script$ python sdlTest.py 
Traceback (most recent call last):
  File "sdlTest.py", line 4, in <module>
    RESOURCES = sdl2.ext.Resources(__file__, "resources")
  File "/usr/lib/python2.7/dist-packages/sdl2/ext/resources.py", line 139, in __init__
    self.scan(path, subdir, excludepattern)
  File "/usr/lib/python2.7/dist-packages/sdl2/ext/resources.py", line 313, in scan
    raise ValueError("invalid path '%s'" % path)
ValueError: invalid path 'sdlTest.py'

当前代码:

import sys
import sdl2.ext

RESOURCES = sdl2.ext.Resources(__file__, "resources")

我在 ubuntu 16.04 上安装了 python 版本

guillaume@ubuntu:~/script$ python -V
Python 2.7.12

python-sdl2 版本:

guillaume@ubuntu:~/script$ dpkg -s python-sdl2
Package: python-sdl2
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 392
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Source: pysdl2
Version: 0.9.3+dfsg2-1
Depends: python:any (<< 2.8), python:any (>= 2.7.5-5~), libsdl2-2.0-0, libsdl2-gfx-1.0-0, libsdl2-image-2.0-0, libsdl2-mixer-2.0-0, libsdl2-ttf-2.0-0
Recommends: python-numpy
Suggests: pysdl2-doc
Description: Python bindings to the SDL2 C-library (Python 2 build)
 PySDL2 is a ctypes based wrapper around the Simple DirectMedia Layer 2 library
 to allow portable low level access to a video framebuffer, audio output, mouse
 and keyboard.
 .
 This module is built for Python version 2.x.
Original-Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
Homepage: https://bitbucket.org/marcusva/py-sdl2

蟒蛇路径:

guillaume@ubuntu:~/script$ echo $PYTHONPATH
/usr/lib/python2.7/dist-packages/sdl2:
guillaume@ubuntu:~/script$ ls /usr/lib/python2.7/dist-packages/sdl2/
audio.py       filesystem.py       keycode.pyc     render.py     stdinc.pyc
audio.pyc      filesystem.pyc      loadso.py       render.pyc    surface.py
blendmode.py   gamecontroller.py   loadso.pyc      rwops.py      surface.pyc
blendmode.pyc  gamecontroller.pyc  log.py          rwops.pyc     syswm.py
clipboard.py   gesture.py          log.pyc         scancode.py   syswm.pyc
clipboard.pyc  gesture.pyc         messagebox.py   scancode.pyc  timer.py
cpuinfo.py     haptic.py           messagebox.pyc  sdlgfx.py     timer.pyc
cpuinfo.pyc    haptic.pyc          mouse.py        sdlgfx.pyc    touch.py
dll.py         hints.py            mouse.pyc       sdlimage.py   touch.pyc
dll.pyc        hints.pyc           pixels.py       sdlimage.pyc  version.py
endian.py      __init__.py         pixels.pyc      sdlmixer.py   version.pyc
endian.pyc     __init__.pyc        platform.py     sdlmixer.pyc  video.py
error.py       joystick.py         platform.pyc    sdlttf.py     video.pyc
error.pyc      joystick.pyc        power.py        sdlttf.pyc
events.py      keyboard.py         power.pyc       shape.py
events.pyc     keyboard.pyc        rect.py         shape.pyc
ext            keycode.py          rect.pyc        stdinc.py
guillaume@ubuntu:~/script$ 
4

2 回答 2

1

“资源”是指运行 sdl2-python 脚本的子目录的名称。

在关于导入的 sdl2 示例中,他们需要一个名为“resource”的目录来加载将在后续示例中显示在 sdl2 窗口中的图像。

我们需要资源文件夹中的一些资源,以便稍后在窗口上显示一个测试图像。在您自己的应用程序中,您不太可能需要导入它们,但我们在这里需要它们,因此我们使用 sdl2.ext.Resources 类使它们可用。

如果您想继续使用该行:

RESOURCES = sdl2.ext.Resources(__file__, "resources")

然后从您使用此行运行脚本的目录中,创建一个名为“resources”的子目录并运行您的脚本。您将看到错误消息不会出现。您可以使用“资源”以外的名称,只需确保存在具有相同名称的子目录即可。

更重要的是,要使用 sdl2,您只需要以下 2 行来加载 sdl2 模块就可以了。

import sdl2
import sdl2.ext
于 2017-10-18T18:07:49.003 回答
0

您可能未能在项目目录中包含资源文件夹。

该错误有点模棱两可,但这为我解决了。

于 2017-08-01T18:12:51.380 回答