2

我已经通过 pip 下载并安装了Pyinstaller,目的是制作一个可以在 Windows 上独立使用的 .exe 二进制文件。我的应用程序/脚本与这个最相似,从某个 subreddit 下载图像(无需 reddit 帐户即可访问)。

通过控制台或通过我的 IDE 运行 .py 脚本可以在LinuxWindows上按预期工作。根据PRAW 文档,PRAW 安装后必须有一个C:\Users\myName\AppData\praw.ini配置文件,但我的系统目前缺少它,但是,正如我所提到的,脚本在 python 解释器上运行得很好。

使用 Pyinstaller 将其打包成 .exe 工作正常,但运行它(有或没有管理员权限)失败并出现以下错误

C:\Users\John\IdeaProjects\monsteraday-subreddit-image-downloader\dist>monsteraday-image-downloader.exe
Traceback (most recent call last):
  File "<string>", line 5, in <module>
  File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py",
 line 363, in load_module
    exec(bytecode, module.__dict__)
  File "C:\Python27\lib\site-packages\praw\__init__.py", line 40, in <module>
    from praw.settings import CONFIG
  File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyimod03_importers.py",
 line 363, in load_module
    exec(bytecode, module.__dict__)
  File "C:\Python27\lib\site-packages\praw\settings.py", line 47, in <module>
    CONFIG = _load_configuration()
  File "C:\Python27\lib\site-packages\praw\settings.py", line 45, in _load_configuration    .format(locations))
Exception: Could not find config file in any of: [u'C:\\Users\\John\\AppData\\Local\\Temp\\_MEI52442\\praw\\praw.ini', u'C:\\Users\\John\\AppData\Roaming\\praw.ini', u'praw.ini']
monsteraday-image-downloader returned -1

在这一点上,我应该澄清一下

  • python myscript.py在控制台中运行
  • myscript.exe执行通过控制台或双击 生成的pyinstaller

在同一台 Win8.1 x64 机器上进行了尝试,安装了所有必需的库(包括 PRAW),Python 2.7 32 位(为了与目标 .exe 兼容)和/AppData/ 目录中缺少用户praw.ini 配置,而全局praw.ini 正确地在C:\Python27\Lib\site-packages\praw\praw.ini

Pyinstaller 文档提到了使用.spec 文件将外部文件包含在包装的 .exe 中,但我看不出这有什么作用,因为我已经缺少/不需要 praw.ini 配置。Py2exe 也产生相同的结果。我怎样才能解决这个问题并产生一个简单的方法来使用这个工具?

4

1 回答 1

0

基于输出的最后一行

Exception: Could not find config file in any of: [u'C:\\Users\\John\\AppData\\Local\\Temp\\_MEI52442\\praw\\praw.ini', u'C:\\Users\\John\\AppData\Roaming\\praw.ini', u'praw.ini']

从打包的 .exe 运行时,PRAW 似乎在 3 个不同的位置寻找其配置文件“praw.ini”

  1. 在用户的系统目录中创建的临时文件夹,大概是按照 pyinstaller 的指示
  2. 用户的漫游文件夹(在 Windows 中)
  3. .,在同一路径中运行 .exe

现在,让我们看看我们可以做些什么来获得至少其中一种情况的资格。

  1. 可以调整 pyinstaller 的设置和 .spec 文件,使其采用特定的 praw.ini 文件(例如在 Pytho 的 PRAW 安装包文件夹中找到的全局文件)并将其放在临时文件夹中,以便脚本可以使用,但似乎没有一种简单/直接的方法可以做到这一点。不过,这绝对是最“正确”的方式。
  2. 让每个用户在其中放置一个配置文件对 UX 不利,应该避免,除非当然涉及到自动安装,如果我们谈论的是一个小程序,这可能是矫枉过正。
  3. 最后一个并不理想,但它是一个不错的折衷方案,并且绝对容易与开发人员一起使用。用户只需将 praw.ini 放在他/她运行 .exe 的文件夹中即可。可执行文件也可以在包含 praw.ini 副本的 .zip 存档中共享,这样当用户运行时,它就可以完全运行,而无需代表他们付出额外的努力。

尽管它实际上是一种解决方法,但最后一个选项将为该工具提供足够的简单性,以便为普通用户开箱即用。

于 2015-11-12T20:17:08.310 回答