Python - 访问没有文件路径依赖的应用程序资源

时间:2013-11-17 18:08:02

标签: python file directory pygame filepath

我目前正在使用使用特定图像资源的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和资源放在同一目录中 - 这是我不想要的。

那么,我怎样才能解决这个问题,让任何人都可以使用该应用程序,无论他们放置应用程序在哪里?谢谢!

2 个答案:

答案 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_stringresource_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的目录,因为这会产生一些系统,库等问题。)

相关问题