繁体   English   中英

使用 PyInstaller 在 Python 中的 exchangelib 库失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM