![](/img/trans.png)
[英]Statically link python37.dll and vcruntime140.dll when using cython --embed
[英]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.