gpt4 book ai didi

python - 如何在 cx_Freeze 二进制文件中包含资源文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:08 26 4
gpt4 key购买 nike

我正在尝试使用 cx_Freeze 将 python 包转换为 linux 二进制文件(最终也是 windows 可执行文件)。该包依赖于多个 egg 文件,据我所知,cx_Freeze 不能很好地处理 egg 文件,因此我解压缩了 egg 文件。其中一个 egg 文件在某个包“test.package”中有一个资源字符串文件“test.resource”,以包含我使用的这个资源字符串文件 -

include_files = ['test/package/test.resource']

现在我看到这个文件和二进制文件一起被复制到目标目录但是当我尝试运行二进制文件时我得到错误 - “IOError: [Errno 2] No such file or directory: 'test/package/测试资源'"

试图读取文件的代码是这样做的:

from pkg_resources import resource_string
strings = resource_string("test.package", "test.resource")

我如何添加这个资源文件,以便它可用于生成的二进制文件?

最佳答案

由于接受的答案没有详细说明,我想我会提供一个适合我的解决方案。它不需要您解压缩您的 egg 文件,但也不排除它。

情况:我有一个我们用esky打包的应用程序使用 cx_Freeze 卡住器,但此信息同样适用于直接使用 cx_Freeze 的应用程序。该应用程序使用 treqtreq.__import__ 中包含以下行的库:

__version__ = resource_string(__name__, "_version").strip()

我使用 pkg_resources 确定 _version 文件的文件路径,并手动将其添加到我的 zip_includes。我们确保它与 treq 库文件的其余部分一起放置在预期位置。在我的 setup.py 文件中,我有:

setup(
name=...,
version=...,
install_requires=[
...,
treq==15.0.0,
...
],
...,
options={
...,
"bdist_esky": {
...,
"freezer_options": {
# This would be "zip_includes" in options if just using cx_Freeze without esky
"zipIncludes": [
# Manually copy the treq _version resource file into our library.zip
(pkg_resources.resource_filename('treq', '_version'), 'treq/_version')
],
"packages": [..., "treq", ...]
...,
...,
...,
...,
)

好处:虽然不需要解压缩库来使其工作,但它似乎通常很有用,您可能希望在安装时始终解压缩它们(a la python setup.py 开发)。将以下几行添加到应用程序的 setup.cfg 中很简单:

[easy_install]
zip_ok = 0

然后,当您运行 python setup.py develop 时,您的依赖项将以扩展目录形式安装到 site-packages 中。

关于python - 如何在 cx_Freeze 二进制文件中包含资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com