gpt4 book ai didi

python - cx_freeze 模块依赖

转载 作者:行者123 更新时间:2023-11-30 23:36:17 27 4
gpt4 key购买 nike

所以我的 python 脚本依赖于我创建的另一个模块。该模块读取文本文件。当我从源代码运行并且一切正常时,脚本、模块和它读取的文件通常位于同一目录中。

我用cx_freeze编译,当我运行它时,导入的模块失败。该模块尝试读取该文件并表示找不到它,然后一切就停止了。

文本文件包含在library.zip 和构建文件夹中(可能没有必要,但我认为这不会有什么坏处)。我决定在读取文件之前打印模块中的工作目录以查看发生了什么,看起来工作目录不是构建文件夹,而是我的用户主目录。

当然,该文本文件不在我的用户的主目录中。我该如何解决这个问题?

为了具体起见,这里有一个例子。所有文件都位于同一目录中。

脚本.py:

import hello

你好.py

import os
print(os.getcwd())
f = open('hello.txt','r')
print(f.read())
f.close()

你好.txt

hello!

设置.py

import sys
import os
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.

includes = ['hello.txt']
zip_inc = ['hello.txt']

build_exe_options = {"packages": ["os"], "include_files": includes, "zip_includes": zip_inc}

setup( name = "test",
version = "0.1",
description = "test",
options = {"build_exe": build_exe_options},
executables = [Executable("script.py")])

我使用以下命令构建:

python setup.py build

然后我在构建目录中运行了名为 script 的文件。如果有必要的话,我使用 Mac OS X。输出结果如下:

/Users/pianowow
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/cx_Freeze/initscripts/Console3.py", line 27, in <module>
exec(code, m.__dict__)
File "script.py", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 1558, in _find_and_load
return _find_and_load_unlocked(name, import_)
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/importlib/_bootstrap.py", line 1525, in _find_and_load_unlocked
loader.load_module(name)
File "/Users/pianowow/Desktop/test/hello.py", line 3, in <module>
f = open('hello.txt','r')
FileNotFoundError: [Errno 2] No such file or directory: 'hello.txt'

最佳答案

我收到了更新文档的拉取请求 - 这是有关使用数据文件的更新部分:

除了代码之外,应用程序通常还需要数据文件,例如图标。使用安装脚本,您可以在 build_exe 的 include_files 选项中列出数据文件或目录。它们将与可执行文件一起复制到构建目录。然后要找到它们,请使用如下代码:

def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys.executable)
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = os.path.dirname(__file__)

return os.path.join(datadir, filename)

另一种方法是将数据嵌入代码中,例如使用 Qt 的资源系统。

[From this file]

关于python - cx_freeze 模块依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16639429/

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