首页 文章

Pyinstaller二进制文件不使用PRAW配置

提问于
浏览
1

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

通过控制台或通过我的IDE运行.py脚本按预期工作,在 LinuxWindows 上 . 根据PRAW documentation,我的系统中当前缺少一个 C:\Users\myName\AppData\praw.ini 配置文件PRAW 's installation but it',但正如我所提到的,在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的兼容性)和/ AppData / dir中缺少的用户praw.ini配置,同时全球praw.ini正确地在 C:\Python27\Lib\site-packages\praw\praw.ini

Pyinstaller文档提到了 .spec file 的用法,以包含.exe中的外部文件,但我不需要praw.ini配置 . Py2exe也会产生相同的结果 . 我该如何解决这个问题并生成一种使用此工具的简单方法?

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']
    

    看来PRAW从打包的.exe运行时,正在3个不同的位置寻找配置文件 'praw.ini'

    • 在用户的系统目录中创建的临时文件夹,可能是由pyinstaller指示的

    • 用户的漫游文件夹(在Windows中)

    • . ,在.exe运行的同一路径中

    现在,让我们看看我们可以做些什么来获得这些案件的资格 .

    • 可能可以为PRAW调整pyinstaller 's settings and .spec file in a way that it takes a certain praw.ini file (like the global one found in Pytho' s已安装的包文件夹并将其放在temp文件夹中,以便脚本可以使用,但似乎没有简单/直接的方法来做到这一点 . 尽管如此,这似乎是最常见的方式 .

    • 让每个用户放置一个配置文件,这对用户体验有害,应该避免,除非当然有涉及自动安装,如果我们谈论的是一个小程序,这可能有点过头了 .

    • 最后一个并不理想,但它是一个不错的折衷方案,并且很容易与开发者方面滚动 . 只需要用户将praw.ini放在他/她运行.exe的同一文件夹中即可 . 可执行文件也可以在包含praw.ini副本的.zip存档中共享,这样当用户运行时,它将完全正常运行,而无需代表他们付出额外的努力 .

    尽管它实际上是 workaround ,但最后一个选项将为该工具提供足够的简单性,使其能够为普通用户提供开箱即用的功能 .

相关问题