" AttributeError:' _NotSet'对象没有属性' lower'"当使用Pyinstaller将PRAW python文件转换为exe时

时间:2018-04-19 08:30:04

标签: python pyinstaller attributeerror praw

正如标题所说。

当我执行转换的python文件(.exe)时,我得到以下输出:

Traceback (most recent call last):
  File "background.py", line 10, in <module>
  File "site-packages\praw\reddit.py", line 129, in __init__
  File "site-packages\praw\config.py", line 72, in __init__
  File "site-packages\praw\config.py", line 98, in _initialize_attributes
  File "site-packages\praw\config.py", line 31, in _config_boolean
AttributeError: '_NotSet' object has no attribute 'lower'
[1692] Failed to execute script background

我没有使用praw.ini文件,而是硬编码登录的值:

import praw
import praw.models
import urllib.request
from random import randint
from os import getcwd
import ctypes

r = praw.Reddit(client_id='client',
                     client_secret='secret',
                     user_agent='user')
sub = r.subreddit('earthporn')
choose = []
for i in sub.hot(limit=20):
    a = str(i.url)
    if "i.redd" in a or "i.imgur" in a:
        choose.append(i.url)
x = choose[randint(0,len(choose)-1)]
resource = urllib.request.urlopen(x)
output = open("daily_image.jpg","wb")
output.write(resource.read())
output.close()


direc = getcwd() + "\\daily_image.jpg"
ctypes.windll.user32.SystemParametersInfoW(20, 0, direc , 0)

上面的文件只能在python中运行,但在转换为exe时则不行。 (显然有客户端,秘密和用户ID设置,随意窃取idrc)

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

我遇到了此错误,发现要解决此错误,您需要在运行可执行文件(praw.ini)的目录中拥有your_app.exe的副本。您可以在已安装的praw.ini目录中找到\praw

答案 1 :(得分:1)

右。

因此,pyinstaller不是一个完美的.py到.exe转换器,所以有些东西会在翻译中丢失。

我首先在praw中注释掉了所有更新,因为这导致了pyinstaller创建的.exe崩溃(注意我在这里做的所有操作都会导致.exe中的错误,但从不在.py中)。

然后我必须手动设置一些变量,因为它们在.exe版本中调用时没有设置。在PRAW中使用线程,在.exe版本中使用线程无法跟上,或者有一些非常奇怪的蠢事。

是的,所以我基本上只是在整个过程中修改了代码,所以这个东西会运行。如果有人像我一样遇到这个问题并且无法在任何地方找到答案(因为相信我,我在地球上搜寻了它并且无处可寻),请给我发消息,我可以发给你我的praw版本。

愿上帝禁止你得到这个错误

答案 2 :(得分:1)

不要害怕!代替正确打包的 praw.ini,它包含的配置也可以作为参数显式提供给 Reddit 构造函数:

reddit = praw.Reddit(
    client_id="CHANGEME",
    client_secret="CHANGEME",
    user_agent="CHANGEME",
    check_for_updates=False,
    comment_kind="t1",
    message_kind="t4",
    redditor_kind="t2",
    submission_kind="t3",
    subreddit_kind="t5",
    trophy_kind="t6",
    oauth_url="https://oauth.reddit.com",
    reddit_url="https://www.reddit.com",
    short_url="https://redd.it",
    ratelimit_seconds=5,
    timeout=16,
)

即使在与 PyInstaller 打包之后,上述代码对我来说也很管用。请注意,未来的 PRAW 更新可能会为 praw.ini 添加更多默认值,因此您必须将它们复制过来,否则您将收到有关未设置配置选项的类似错误。

请参阅此 GitHub 问题:https://github.com/praw-dev/praw/issues/1016