Pyinstaller二进制文件不能与PRAW配置

时间:2015-11-12 00:09:01

标签: python python-2.7 pyinstaller praw

我已经通过pip下载并安装了 Pyinstaller ,目标是创建一个可以在Windows上独立使用的.exe二进制文件。 My app/scriptthis one大致类似,从某个subreddit下载图片(可以在没有reddit帐户的情况下访问)。

通过控制台或我的IDE运行.py脚本按预期工作,无论是在 Linux 还是 Windows 上。根据{{​​3}},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
  • 通过控制台执行pyinstaller生成myscript.exe或双击

在相同的Win8.1 x64机器上进行了尝试,安装了所有必需的库(包括PRAW),Python 2.7 32位(用于目标.exe的兼容性)和用户 praw。 / appData / dir中缺少ini配置,而C:\Python27\Lib\site-packages\praw\praw.ini

中正确全局 praw.ini

Pyinstaller文档提到了使用 .spec文件将外部文件包含在包装的.exe中但是我不知道这个角色是如何起作用的,因为我已经缺少/不要#39 ; t需要praw.ini配置。 Py2exe也会产生相同的结果。如何解决此问题并生成一种使用此工具的简单方法?

1 个答案:

答案 0 :(得分: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
  4. 现在,让我们看看我们可以做些什么来获得至少一个这些案例的资格。

    1. 有可能调整pyinstaller的设置和.spec文件的方式需要一个特定的praw.ini文件(就像在Pytho的安装包文件夹中找到的全局文件一样)并将它放在temp文件夹中,这样就可以了脚本可以使用,但似乎没有一个简单/直接的方法来做到这一点。尽管如此,这似乎是最“适当”的方式。
    2. 让每个用户放置一个配置文件对用户体验不利,应该避免,除非当然有涉及自动安装,如果我们谈论的是一个小程序,这可能有点过分。
    3. 最后一个并不理想,但它是一个体面的妥协,并且很容易与开发者方面滚动。只需要用户将praw.ini放在他/她运行.exe的同一文件夹中即可。可执行文件也可以在包含praw.ini副本的.zip存档中共享,这样当用户运行时,它将完全正常运行,而无需代表他们付出额外的努力。
    4. 尽管它实际上是解决方法,但最后一个选项将为该工具提供足够的简单性,使其能够为普通用户提供开箱即用的功能。