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

问题描述 投票:0回答:2

我目前正在尝试为我的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自己成功运行该站点,并且您可以看到在它开始运行该站点后发生错误。

我一直在研究这个bug,之前提到过它的一些事情,但是无论什么时候它都被提出来似乎从来没有一个解决方案 - 有些人表示它可能是werkzeug处理方式的问题“懒惰的进口”,但谈话通常以“如果你想这样做不要使用烧瓶”结束。这对我来说不是一个可行的解决方案,所以如果有人能提供帮助,那将非常感激。

python flask pyinstaller cx-freeze werkzeug
2个回答
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


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.