[英]How to include components of psutil in py2exe that py2exe can't find?
我在Windows 7上使用py2exe來使用psutil制作應用程序。 我正在使用python 2.7。 我正在制作單個文件可執行文件。 當我嘗試用psutil編譯python python程序時,它接近結尾說:
The following modules appear to be missing
['_psutil_bsd', '_psutil_linux', '_psutil_osx', '_psutil_posix', '_psutil_sunos', '_scproxy', '_sysconfigdata', 'builtins']
但是,該程序編譯良好。 當我運行編譯的程序時,它崩潰並生成一個日志文件:
回溯(最近一次調用最后一次):文件“TaskManager.py”,第27行,在文件“zipextimporter.pyc”,第82行,在load_module文件“psutil__init __。pyc”,第135行,在文件“zipextimporter.pyc”中,行82,在load_module文件“psutil_psmswindows.pyc”,第14行,在文件“zipextimporter.pyc”,第98行,在load_module中導入錯誤:MemoryLoadLibrary加載失敗_psutil_mswindows.pyd
我已嘗試在設置的選項部分列出:
"includes": ["_psutil_mswindows.pyd"]
以及公正
"includes": ["psutil"]
我也嘗試將所有列出的模塊py2exe列為缺失。 除了包含沒有做任何事情的psutil之外,py2exe找不到這些文件。
關於這個主題在網上有相當多的類似問題,但沒有一個有很好的答案(如果有任何答案),許多錯誤都不是我的問題。
更新:奇怪的是,我在py2exe的構建目錄的build \\ bdist.win32 \\ winexe \\ collect-2.7中找到了_psutil_mswindows.pyd。 我想由於某種原因它沒有得到正確的包裝。
所有這些問題都來自py2exe,包括一堆系統dll。
添加以下排除列表。 (主要是最后4個)。 解決了這個問題。
dll_excludes=['msvcr71.dll', "IPHLPAPI.DLL", "NSI.dll", "WINNSI.DLL", "WTSAPI32.dll"]
您可以使用系統文件夾中的.dll查看/交叉引用.dll,以獲取其中包含的不應存在的列表。
我遇到了這個:
ImportError: MemoryLoadLibrary failed loading psutil\_psutil_windows.pyd
它與文件名中的問題略有不同。
在閱讀了psutil的源代碼之后,我找到了根本原因: psutil的目標Windows平台取決於它構建在哪個平台上。
_psutil_windows.c中存在以下代碼,表明引用了GetIfEntry2。 您可以通過在Windows XP上運行depends.exe來加載_psutil_windows.pyd來輕松確認這一點。
#if (_WIN32_WINNT >= 0x0600) // Windows Vista and above
SecureZeroMemory((PVOID)pIfRow, sizeof(MIB_IF_ROW2));
pIfRow->InterfaceIndex = pCurrAddresses->IfIndex;
dwRetVal = GetIfEntry2(pIfRow);
#else // Windows XP
pIfRow->dwIndex = pCurrAddresses->IfIndex;
dwRetVal = GetIfEntry(pIfRow);
#endif
並且setup.py根據當前系統環境生成宏,如下所示:
# Windows
if WINDOWS:
def get_winver():
maj, min = sys.getwindowsversion()[0:2]
return '0x0%s' % ((maj * 100) + min)
macros.extend([
# be nice to mingw, see:
# http://www.mingw.org/wiki/Use_more_recent_defined_functions
('_WIN32_WINNT', get_winver()),
('_AVAIL_WINVER_', get_winver()),
('_CRT_SECURE_NO_WARNINGS', None),
# see: https://github.com/giampaolo/psutil/issues/348
('PSAPI_VERSION', 1),
])
所以解決這個問題的方法是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.