python - 如何在Python中正确加载数据文件

标签 python python-2.7 setup.py data-files

所以..我的程序有这个小问题。我可能需要解释一些基本的东西 - 特别是当通过 distutils 安装东西时会发生什么。

我在 Tkinter 制作的 GUI 应用程序中使用了两个图标。由于它们的位置,我在加载它们时遇到问题。

你可以看到我的setup.py文件here 。您可以在第 28 行看到我指定的文件(它们位于子文件夹 gui/ 中)。

当然,当您想要运行程序的 GUI 部分时(可以通过安装它并将其作为 flashstudy --gui 可执行文件运行来完成),问题就开始了。我在文件 main.py 第 44 和 45 行出现错误(文件为 here )。无法从该位置加载图像。

我想这是有道理的,因为它应该查找安装过程中传输文件的目录,但我不知道那个地方在哪里以及如何轻松加载它。

另一件事 - 如此设置的原因是这样您可以直接从终端运行程序和 GUI 部分而无需安装它,我想保留该功能。

有办法做到这一点吗?

最佳答案

如果您使用setuptoolsdistutils 不同,您可以可靠地包含数据文件并在安装后再次加载它们,无论数据文件是如何安装的。

您已经导入了 setuptools 但会忽略它;不要从 distutils.core 导入 setup,而是从 setuptools 导入:

from setuptools import setup

使用package_datainclude_package_data(而不是data_files)选项来包含图像。请参阅Including Data Filessetuptools 文档中:

package_data = {'gui': ['*.gif']}

然后您可以使用 pkg_resources Resource API 加载您的包数据。对于 TKinter PhotoImage 对象,您需要一个文件名,因此您可以使用:

icon_up = PhotoImage(
    file=pkg_resources.resource_filename('flashCardStudy', 'gui/up.gif'))

就个人而言,我会在源中嵌入一个 base64 数据字符串,并将其用作图标:

icon_up_data = '''\
    R0lGODlhEAAQAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAAQABAAAAIflI+pywfQ0ovuQWpv
    y3PzyHVKKErkQlpjqhmsSsVRAQA7
'''
icon_up = PhotoImage(data=icon_up_data)

这完全绕过了整个问题。但请注意,这仅适用于 GIF 图像。

关于python - 如何在Python中正确加载数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006638/

相关文章:

python - 构建 MercurialRecipe 在多次导入时中断

python - 为什么 yield 函数在 Python 中不需要括号?

python - matplotlib savefig 图像大小与 bbox_inches ='tight'

python - 如何计算字符串中的位数

python-2.7 - 如何解释决策树的图形结果并找到最具信息性的特征?

python-2.7 - 为什么下面的代码片段运行不成功?

Python GTK + webkit - 在 gtk.main() 之后插入 JavaScript

python - 如何为每个 CSV 文件创建单独的 Pandas DataFrame 并给它们起有意义的名字?

python,更改用户站 pip 目录或安装 setup.py --prefix with --user

python - 命令 "python setup.py egg_info"在/tmp/pip-build-_J7Ije/aiohttp/安装 discord.py 时失败,错误代码为 1