簡體   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