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

2019-07-31 06:46发布

我在做一个平台无关的PyQt应用。 我打算用编写使用setuptools的一个setup.py文件。 到目前为止,我已经成功地detech平台,例如取决于平台才能使用py2exe在Windows加载安装特定的选项()...等...

然而,我的申请,我发布一些主题,HTML和图像,我需要在运行时加载应用程序中的这些图像。 到目前为止,他们都存储在应用程序的主题/目录。

我一直在阅读上的setuptools和distutils的文档,并想通了,如果我给设置(),在主题中的所有文件的data_files选项/安装在“共享/ MyApp的/主题/”将它安装目录一个在/ usr /前缀,或任何sys.prefix是在平台上。 我以为我会用os.path.join(sys.prefix,“共享”,“MyApp的”,“主题”)nomatter什么平台我在,右找到数据文件吗?

不过,我希望能够在开发过程中访问数据文件太大,他们居住相对于应用程序的源主题/目录下。 我该怎么做呢? 有没有弄清楚这个应用程序是否已经安装了一些巧妙的方法? 或映射到数据文件,而不管他们在哪里,此刻的实用程序?

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

Answer 1:

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



Answer 2:

您可以尝试pkg_resources

my_data = pkg_resources.resource_string(__name__, fname)


Answer 3:

你应该使用pkgutil /通过pkg_resources模块加载数据文件 。 它甚至从ziped鸡蛋内工作。



文章来源: Accessing data files before and after distutils/setuptools