在distutils/setuptools之前和之后访问数据文件

问题描述:

我在做一个独立于平台的PyQt应用程序。我打算使用setuptools编写setup.py文件。到目前为止,我已经设法检测平台,例如加载特定的选项设置()取决于平台,以便在Windows上使用py2exe等...在distutils/setuptools之前和之后访问数据文件

但是,我的应用程序我分发一些主题,HTML和图像,我需要加载这些图像在运行时在应用程序中。到目前为止,它们存储在应用程序的themes /目录中。

我一直在阅读有关setuptools和distutils的文档,并发现如果我将setup /()data_files选项与要安装在“share/MyApp/themes /”中的themes /目录中的所有文件将安装一个/ usr /前缀,或者任何sys.prefix在平台上。 我假设我会使用os.path.join(sys.prefix,“share”,“MyApp”,“themes”)来查找数据文件nomatter我在哪个平台上,对吗?

但是,我希望能够在开发过程中访问数据文件,它们位于与应用程序源相关的主题/目录中。我该怎么做呢? 是否有一些智能的方法来确定应用程序是否已安装?还是一个映射到数据文件的实用程序,无论它们在哪里?

我真的很讨厌添加各种丑陋的黑客来查看是否有相对于源代码的主题,或者在sys.prefix/share ...等等......如何在开发过程中找到数据文件?并在任意平台上安装后?

我使用了一个名为DATA_FILE实用方法:

def data_file(fname): 
    """Return the path to a data file of ours.""" 
    return os.path.join(os.path.split(__file__)[0], fname) 

我把这个在我的项目中初始化 .py文件,然后从任何地方我的包中调用它来获得相关文件到包裹。

Setuptools提供了类似的功能,但是这不需要setuptools。

+0

怎么会当data_files被安装在/ usr /股此项工作/ AppName的/主题/ 我的可执行文件是在像/ usr/lib目录/ AppName的我会承担...... Distutils的文件说,这将是安装了sys.prefix作为我给数据文件存储的相对路径的前缀... On * nix系统数据文件应该也许应该位于/ usr/share/AppName/ – jonasfj 2009-08-02 19:58:56

+1

我已经将它与setup.py中的package_data选项。不确定关于data_files。 – 2009-08-03 03:51:40

你可以尝试pkg_resources

my_data = pkg_resources.resource_string(__name__, fname) 

你应该use the pkgutil/pkg_resources module to load the data files。它甚至可以在ziped鸡蛋内工作。