Flask 包的消息导入错误 - cx_freeze 和 Pyinstaller
ImportError on message for Flask package - cx_freeze and Pyinstaller
我目前正在尝试为我的 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
但没有任何效果。电子邮件和消息 .pyc 文件在 cx_freeze 生成所有内容后存在,删除它们会导致其他错误发生,但由于某些原因它们不足以完成这一部分。
我能够通过 python 自行成功 运行 站点,正如您所看到的,错误发生在它开始 运行 站点之后。
我一直在研究这个错误,之前提到过几次,但无论何时提出,似乎都没有解决方案 - 有些人表示这可能是个问题werkzeug 处理 "lazy imports" 的方式,但对话通常以 "Don't use flask if you want to do this" 结束。这对我来说不是一个可行的解决方案,所以如果有人能提供帮助,我们将不胜感激。
我已经通过在 email__init__.py
中注释掉一些行来修复它
Python 2.7.12, trying to build an executable file using pyinstaller. I keep getting the below error
在隐藏导入中,您必须指定电子邮件 mime 类型。我在规范文件中执行了以下操作并且有效
hiddenimports=['email.mime.message', 'email.mime.image', 'email.mime.text', 'email.mime.multipart', 'email.mime.nonmultipart', 'email.mime.base', 'email.mime.audio']
或者也可以将 Debug 设置为 False
我目前正在尝试为我的 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
但没有任何效果。电子邮件和消息 .pyc 文件在 cx_freeze 生成所有内容后存在,删除它们会导致其他错误发生,但由于某些原因它们不足以完成这一部分。
我能够通过 python 自行成功 运行 站点,正如您所看到的,错误发生在它开始 运行 站点之后。
我一直在研究这个错误,之前提到过几次,但无论何时提出,似乎都没有解决方案 - 有些人表示这可能是个问题werkzeug 处理 "lazy imports" 的方式,但对话通常以 "Don't use flask if you want to do this" 结束。这对我来说不是一个可行的解决方案,所以如果有人能提供帮助,我们将不胜感激。
我已经通过在 email__init__.py
中注释掉一些行来修复它Python 2.7.12, trying to build an executable file using pyinstaller. I keep getting the below error
在隐藏导入中,您必须指定电子邮件 mime 类型。我在规范文件中执行了以下操作并且有效
hiddenimports=['email.mime.message', 'email.mime.image', 'email.mime.text', 'email.mime.multipart', 'email.mime.nonmultipart', 'email.mime.base', 'email.mime.audio']
或者也可以将 Debug 设置为 False