reeves
reeves

Reputation: 173

Python sdl2 Invalid path

I'm testing the learn to fly tutorial for pysdl2. (I'm also new to python) http://pysdl2.readthedocs.io/en/rel_0_9_4/tutorial/index.html

I'm getting an error, thinking it's just some path problem.

Error:

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'

Current code:

import sys
import sdl2.ext

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

I'm on ubuntu 16.04 installed python version

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

python-sdl2 version:

guillaume@ubuntu:~/script$ dpkg -s python-sdl2
Package: python-sdl2
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 392
Maintainer: Ubuntu Developers <[email protected]>
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 <[email protected]>
Homepage: https://bitbucket.org/marcusva/py-sdl2

PYTHONPATH:

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$ 

Upvotes: 0

Views: 743

Answers (2)

Sun Bear
Sun Bear

Reputation: 8295

"resource" refers to the name of a sub-directory from where you are running your sdl2-python script.

In the sdl2 example on importing, they need a directory called "resource" to load images that will be displayed them in the sdl2 window in their subsequent examples..

We need some resources from the resources folder, so that we have a test image around to display on the window later on. In your own applications, it is unlikely that you will ever need to import them, but we need them here, so we use the sdl2.ext.Resources class to have them available.

If you want to continue to use the line:

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

then from the directory where you are running your script with this line, create a child-directory called "resources" and run your script. You will see the error message will not appear. You can use names other than "resources", just make sure a child directory with the same name exist.

More importantly, to use sdl2, you just need the following 2 lines to load the sdl2 modules and you are good to go..

import sdl2
import sdl2.ext

Upvotes: 1

Anna Howell
Anna Howell

Reputation: 449

You have likely failed to include a resources folder in your project dir.

The error is somewhat ambiguous but this fixed it for me.

Upvotes: 0

Related Questions