我目前正在使用使用特定图像资源的PyGame应用程序。我目前在桌面(Windows)上持有该应用程序。我写了这段代码:
image_resources = "C:/Users/user/Desktop/Pygame App/app_resources/image_resources/"
sound_resources = "C:/Users/user/Desktop/Pygame App/app_resources/sound_resources/"
class GetSource:
def background(self,image):
return pygame.image.load(image_resources + image).convert()
def player(self,image):
return pygame.image.load(image_resources + image).convert_alpha()
正如您所看到的,我通过将.py文件和“app_resources”文件夹放在一个目录中来组织应用程序资源,然后在“app_resources”下创建两个目录“image_resources”和“sound_resources”。我已经对它进行了研究,但找不到任何具体的解决方案,其他的是将.py和资源放在同一目录中 - 这是我不想要的。
那么,我怎样才能解决这个问题,让任何人都可以使用该应用程序,无论他们放置应用程序在哪里?谢谢!
答案 0 :(得分:3)
我对pygame没有任何经验,但是使用python包捆绑资源的一个解决方案是pkg_resources模块。
然后将与您的资源匹配的相对路径模式添加到setup.py中,如此
from setuptools import setup
setup(
...
packages=["myapp"],
packages_data={
"myapp": "relative/path/to/resources/*",
},
...
)
然后您可以这样访问您的数据
import pkg_resources
data_stream = pkg_resources.resource_stream('myapp', 'relative/path/filename')
data = data_stream.read()
除了流,您还可以使用resource_string
和resource_filename
方法,详见上面的链接。
答案 1 :(得分:2)
您可以使用相对于.py
文件所在位置的目录。假设目录结构如下所示
some_directory/
|-- myProgram.py
|-- image_resources/
| +-- some_image.jpg
+-- sound_resources/
+-- some_sound.wav
然后myProgram.py
可以找到它自己的目录:
import os
programDir = print os.path.dirname(os.path.realpath(__file__)) # this is the path to some_directory in the user's system
然后您可以使用该路径前往相关的任何位置。
image_resources_path = os.path.join(programDir, "image_resources")
sound_resources_path = os.path.join(programDir, "sound_resources")
另外,尽量不要使用带空格的目录(你有一个名为PyGame App
的目录,因为这会产生一些系统,库等问题。)