【问题标题】:How to access data from unique .txt file at runtime using .exe created with pyinstaller如何使用 pyinstaller 创建的 .exe 在运行时从唯一的 .txt 文件中访问数据
【发布时间】: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


【解决方案1】:

请出示您的 main.conf,它是由 pyinstaller 创建的。

应该有一个部分datas=[('PATH_TO_FILE\\names.txt', '.'),('PATH_TO_FILE\\template.pdf', '.')] PATH_TO_FILE 是绝对路径

【讨论】:

  • datas=[...] 当前为空。我知道我可以添加文件的路径,它可以在我自己的计算机上运行,​​但是如果我在另一台计算机上运行它,数据文件的绝对路径不会改变吗?
  • 这仅用于编译元组('PATH_TO_FILE\\template.pdf', '.')中的第二个条目是目标,在这种情况下'.'表示程序基本路径。看看Documentation
  • 好吧,这更有意义,但我仍然遇到同样的错误。这是我从项目文件夹中运行的命令:pyinstaller --onefile --add-data 'names.txt:.' --add-data 'template.pdf:.' main.py 运行后,当我运行位于 .../project/dist 中的可执行文件时,仍然找不到 names.txt 文件。我还将名称文件添加到 dist 文件夹中,但仍然无法找到它
  • 我在上面的问题中添加了一个更新,可能会提供更多信息
猜你喜欢
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 2019-12-12
  • 2020-08-22
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
相关资源
最近更新 更多