所以我的 python 脚本依赖于我创建的另一个模块。该模块读入一个文本文件。当我从源代码运行时,脚本、模块和它读取的文件通常位于同一目录中,并且一切正常。
我用cx_freeze编译,运行时导入的模块失败。该模块尝试读取该文件并说它找不到它,然后一切都停在那里。
文本文件包含在 library.zip 和 build 文件夹中(可能是不必要的,但我认为它不会造成伤害)。我决定在读取文件之前打印模块中的工作目录以查看发生了什么,看起来工作目录不是构建文件夹,而是我的用户主目录。
当然,文本文件不在我用户的主目录中。我怎样才能解决这个问题?
只是为了具体一点,这里有一个例子。所有文件都在同一个目录中。
脚本.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'