[英]exchangelib Library failure in Python with PyInstaller
我正在编写一个应用程序,它将连接到 Exchange Server 并按计划向收件人发送电子邮件。 此应用程序依赖于成功的导入 exchanglib。
当我将程序作为 .py 文件执行时,我能够导入 exchangelib 并获取我需要的所有组件。 我可以从命令行以及 Jupyter Notebook 成功运行它,但是当我使用 PyInstaller 将其转换为可执行文件时它会失败。
以下是相关的代码行:
print("Attempting: import exchangelib")
try:
import exchangelib
print("SUCCESS: import exchangelib")
except Exception as expOutput:
print("FAILED: import exchangelib")
print(expOutput)
print("Attempting: from exchangelib import DELEGATE, Account, Credentials, Configuration, Message, Mailbox, FileAttachment, HTMLBody")
try:
from exchangelib import DELEGATE, Account, Credentials, Configuration, Message, Mailbox, FileAttachment, HTMLBody
print("SUCCESS: import DELEGATE, Account, Credentials, Configuration, Message, Mailbox, FileAttachment, HTMLBody")
except Exception as expNewOutput:
print(expNewOutput)
当我从 .py 文件 (Test_exchangelib.py) 运行它时,我得到了我的期望:
"SUCCESS: import exchangelib"
"SUCCESS: import DELEGATE, Account, Credentials, Configuration, Message, Mailbox, FileAttachment, HTMLBody"
当我将它作为 exe 运行时,我得到以下输出:
Attempting: import exchangelib
FAILED: import exchangelib
module 'zoneinfo' has no attribute 'ZoneInfoNotFoundError'
Attempting: from exchangelib import DELEGATE, Account, Credentials, Configuration, Message, Mailbox, FileAttachment, HTMLBody
module 'zoneinfo' has no attribute 'ZoneInfoNotFoundError'
这是我用来将 Test_exchangelib.py 转换为可执行文件的 PyInstaller 命令:
C:\>cd C:\Users\aguler\AppData\Roaming\Python\Python37
C:\Users\aguler\AppData\Roaming\Python\Python37>ProjectEnvironment\Scripts\activate.bat
(ProjectEnvironment) C:\Users\aguler\AppData\Roaming\Python\Python37>Scripts\pyinstaller --onefile C:\PyFiles\Email_Troubleshoot\Test_exchangelib.py --paths=C:\Users\aguler\AppData\Roaming\Python\Python37\site-packages\tzdata --paths=C:\Users\aguler\AppData\Roaming\Python\Python37\site-packages\tzdata\zoneinfo --paths=C:\users\aguler\appdata\roaming\python\python37\projectenvironment\lib\site-packages\exchangelib --paths=C:\Users\aguler\AppData\Roaming\Python\Python37\ProjectEnvironment\Lib\site-packages\backports
zoneinfo 类是从 backports 调用的,在 account.py 文件中是通过调用 exchangelib 实现的。 这意味着可执行文件没有正确引入反向移植,因为它遗漏了 zoneInfo。
我错过了什么? 如何将整个 backports 库放入可执行文件中?
错误信息表示 Python 可以找到zoneinfo
模块,但zoneinfo.ZoneInfoNotFoundError
不存在。 因此,您要么安装了一个非常旧版本的backports.zoneinfo
(该类是在 v0.1.0 中引入的),要么是从不是backports.zoneinfo
包的东西中获取zoneinfo
模块的——例如,如果你有一个zoneinfo.py
文件在你的路径某处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.