Flask包的消息上的ImportError - cx_freeze和Pyinstaller

时间:2017-02-05 03:27:01

标签: python flask pyinstaller cx-freeze werkzeug

我目前正在尝试为我的Python-Flask网站创建一个独立的Windows可执行文件。我已经尝试过cx_freeze和PyInstaller,但每次我都遇到了导入问题。具体来说,我得到以下追溯:

 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 941-349-200
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 12, in <module>
    __import__(name + "__init__")
  File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 24, in <module>
    exec(code, m.__dict__)
  File "runserver.py", line 7, in <module>
  File "C:\Python27\lib\site-packages\flask\app.py", line 841, in run
    run_simple(host, port, self, **options)
  File "C:\Python27\lib\site-packages\werkzeug\serving.py", line 706, in run_simple
    reloader_type)
  File "C:\Python27\lib\site-packages\werkzeug\_reloader.py", line 263, in run_with_reloader
    reloader.run()
  File "C:\Python27\lib\site-packages\werkzeug\_reloader.py", line 144, in run
    self.extra_files):
  File "C:\Python27\lib\site-packages\werkzeug\_reloader.py", line 22, in _iter_module_files
    filename = getattr(module, '__file__', None)
  File "C:\Python27\lib\site-packages\email\__init__.py", line 79, in __getattr__
    __import__(self.__name__)
ImportError: No module named message

这两个工具都有一个方法,用于指定要包含的确切模块,以防工具无法检测到它需要的所有内容。我使用以下命令运行cx_freeze,其中包括:

python cxfreeze runserver.py --target-dir DB --include-modules=message,email

和pyinstaller:

python pyinstaller.py runserver.py --debug --onedir --hidden-import=message --hidden-import=email 

但没有任何效果。在cx_freeze生成所有内容之后,存在电子邮件和消息.pyc文件,并且删除它们会导致其他错误,但由于某种原因,它们不足以支持这部分内容。

我能够通过python自己成功运行该站点,正如您所看到的,在它开始运行该站点后发生错误。

我一直在研究这个漏洞,并且之前已经有过一些错误,但无论什么时候出现它似乎都没有解决它 - 有些人已表示它可能是werkzeug处理&懒惰导入&#34;的方式的问题,但对话通常以&#34;如果你想这样做而不使用烧瓶&#34;。这对我来说不是一个可行的解决方案,所以如果有人能帮到它,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

在隐藏导入中,您必须指定电子邮件mime类型。我在spec文件中执行了以下操作并且它有效

hiddenimports=['email.mime.message', 'email.mime.image', 'email.mime.text', 'email.mime.multipart', 'email.mime.nonmultipart', 'email.mime.base', 'email.mime.audio']

或者也可以将Debug设置为False

答案 1 :(得分:0)

我通过在email__init __。py

中注释掉一些行来修复它

Python 2.7.12, trying to build an executable file using pyinstaller. I keep getting the below error