繁体   English   中英

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

[英]Accessing data files before and after distutils/setuptools

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

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

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

但是,我希望能够在开发期间访问数据文件,它们位于相对于应用程序源的themes /目录中。 我该怎么做呢? 是否有一些聪明的方法来确定应用程序是否已安装? 或者是一个映射到数据文件的实用程序,不管它们在哪里,目前?

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

你可以尝试pkg_resources

my_data = pkg_resources.resource_string(__name__, fname)

您应该使用pkgutil / pkg_resources模块来加载数据文件 它甚至可以在ziped鸡蛋中使用。

我使用了一个名为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)

我把它放在我的项目的init .py文件中,然后从我的包中的任何地方调用它来获取相对于包的文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM