exchangelib库在Python中使用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:UsersagulerAppDataRoamingPythonPython37
C:UsersagulerAppDataRoamingPythonPython37>ProjectEnvironmentScriptsactivate.bat
(ProjectEnvironment) C:UsersagulerAppDataRoamingPythonPython37>Scriptspyinstaller --onefile C:PyFilesEmail_TroubleshootTest_exchangelib.py --paths=C:UsersagulerAppDataRoamingPythonPython37site-packagestzdata --paths=C:UsersagulerAppDataRoamingPythonPython37site-packagestzdatazoneinfo --paths=C:usersagulerappdataroamingpythonpython37projectenvironmentlibsite-packagesexchangelib --paths=C:UsersagulerAppDataRoamingPythonPython37ProjectEnvironmentLibsite-packagesbackports

zoneinfo类是从后台调用的,在account.py文件中通过调用exchangelib实现。这意味着可执行文件没有正确地引入后端口,因为它遗漏了zoneInfo。

我错过了什么?如何将整个后台库转换为可执行文件?

错误消息意味着Python可以找到zoneinfo模块,但zoneinfo.ZoneInfoNotFoundError不存在。因此,您要么安装了一个非常旧的backports.zoneinfo版本(该类在v0.1.0中引入),要么从不是backports.zoneinfo包的东西中拾取zoneinfo模块-例如,如果您在路径中的某个地方有zoneinfo.py文件。

最新更新