【发布时间】:2021-07-09 06:18:01
【问题描述】:
我正在开发一个 python 项目,该项目根据姓名列表生成唯一的文凭/证书作为 pdf。该程序将名称列表读入 python 列表,然后将这些名称中的每一个“粘贴”到新的空白文凭上。我正在使用 PyPDF4 和 ReportLab 模块来执行此操作。我正在使用 PyCharm,当我在 IDE 中运行该程序时,它运行良好。
问题是我想把这个送给一个对编程一无所知的朋友。我想给他一个包含可执行文件并在同一文件夹中生成输出 pdf 的文件夹。他所要做的就是在目录中添加 2 个文件(姓名列表和文凭模板),然后双击可执行文件。我尝试为此使用 pyinstaller,但在访问数据文件时遇到了问题。
程序使用了 2 个数据文件:names.txt(姓名列表)和 template.pdf(空白文凭)。我导航到我的项目目录并运行pyinstaller --onefile main.py。运行.exe后,这是我得到的错误:FileNotFoundError: [Errno 2] No such file or directory: 'names.txt'
我尝试为 pyinstaller 使用 --add-data 选项,但我不确定这是不是正确的想法。我需要可执行文件在运行时简单地查看它自己的工作目录,并使用用户将添加到目录中的名为 names.txt 和 template.pdf 的文件。
这有意义吗?甚至有可能吗?任何帮助将不胜感激。
======= 更新=======
这是运行pyinstaller --onefile --add-data 'names.txt:.' --add-data 'template.pdf:.' main.py后项目目录的图片:
这是 main.spec 文件中的代码:
a = Analysis(['main.py'],
pathex=['/Users/josiahbrown/Desktop/diploma'],
binaries=[],
datas=[('names.txt', '.'), ('template.pdf', '.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
即使我将 names.txt 添加到 dist 文件夹,当我运行 main.exe 时也会出现相同的错误。
【问题讨论】:
-
您如何尝试访问
.py文件中的文本?文本文件是否与.py文件位于同一文件夹中? -
我正在使用以下方式访问文本:“with open("names.txt", "r") as f:... 是的,数据文件都与主文件位于同一文件夹中.py 文件
标签: python python-3.x pyinstaller executable