簡體   English   中英

在 Python 中使用 cx_freeze 時未添加 VCRUNTIME140.DLL

[英]VCRUNTIME140.DLL is not getting added when using cx_freeze in Python

我對 Python 很陌生。 我剛剛編寫了一個程序來檢查服務器上次重新啟動的時間並向我們的團隊發送電子郵件。 我們有 30 多台服務器,不可能在每台服務器上都安裝 python。 所以我用 cx_freeze 創建了一個可執行文件。 下面是我的 setup.py 文件。

from cx_Freeze import setup, Executable

setup(
    name = "RebootChecker",
    version = "1.0",
    description = "A Script to check the last reboot time of servers",
    options = {
        "build_exe": {              
            "include_msvcr": True,
            "add_to_path": True,
        }
    },
    executables = [Executable("RebootTester.py", base = "Win32GUI")]
)

exe 文件在我的計算機上運行文件,但是當我在服務器上嘗試它時它不起作用。 它因錯誤而崩潰 - “程序無法啟動,因為您的計算機中缺少 VCRUNTIME.DLL” ,即使 DLL 在 C:\\Windows\\System32 中可用。 我發現在 python 可執行文件的構建文件夾中缺少 DLL。 因此,我手動將 DLL 復制到存在 exe 的文件夾中,但出現錯誤 -應用程序無法正確啟動 (0xc000007b)。 單擊確定關閉應用程序

我還嘗試通過將以下幾行添加到 setup.py 文件來修改 build_exe 來添加 DLL 文件,但得到了與上述相同的錯誤。

python_dir = os.path.dirname(sys.executable)
"include_files": [os.path.join(python_dir, "vcruntime140.dll")]

我什至嘗試修復“Microsoft C++ Redistributable”應用程序,但無濟於事。

我在 github 帖子上看到,這是 cx_freeze 5.0.2 版上的一個已知問題,即使在添加"include_msvcr": True之后也不會添加 Visual Studio 包,但我使用的是 6.1 版。

SO 上的其他答案僅提供上述方法作為解決方案,它們對我不起作用。

我如何讓這個工作? 我已經做了幾個小時了。 對此的任何幫助表示贊賞。

謝謝!

看來您真正的問題是 32 位 Python 在 64 位 Windows 下的那台機器上運行。 我猜您安裝的 Microsoft C++ Redistributable 也是 64 位的。

  • vcruntime140.dll文件,因為它的 32 位版本(應該在C:\\Windows\\SysWOW64 )可能不存在。
  • 當從C:\\Windows\\System32 (這將是 64 位版本!)手動復制文件時,它以0xc000007b失敗,這是STATUS_INVALID_IMAGE_FORMAT的代碼,因為現在 32 位python.exe正在嘗試加載 64-位vcruntime140.dll

我建議在 64 位機器上使用 64 位 Python。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM