我需要在Windows 2003服务器中提取一些有关系统进程的信息(是的,在2019年),我用python编写了该代码,并使用auto_py_to_exe
当我在服务器上运行.exe
文件时,我收到一条错误消息,说"LoadLibrary: The specified procedure could not be found."
指向python37.dll
我尝试像一个目录一样进行编译(包括特定的dll),并且尝试像一个文件一样进行编译,然后得到以下output。
答案 0 :(得分:1)
Python 3.7 和 Win 2003 之间的差距太大。在[Python.Wiki]: WindowsCompilers中,甚至没有列出 Python 3.7 (因为它是 VStudio 2017 构建的)。那(和 Python 本身)将需要/调用 Win 2003 系统 .dll s中不存在的函数。
这是一个例子。在下面的图像中,我用Dependency Walker打开了两个版本的( 2.7 和 3.7 )主 .dll :
如图所示,两者都从 kernel32.dll 导入了一堆函数。但是一个区别是 python37.dll 导入了 GetTickCount64 。根据{{3}},支持它的最低 Server 版本是 Win 2008 ,这意味着该版本在 Win 2003中将无法运行< / em> 。
因此,您必须回溯到 python 2.7 (顶部)。几年前,我已经使用 VStudio 2010 构建了 Python 2.7.10 ,并且在< em> Win 2003 (和 XP SP 1 );很有可能,这也适用于最新版本( 2.7 )。
请注意,您还必须安装脚本中使用的所有软件包(包括 auto-py-to-exe )。
@ EDIT0 :
我记得(并检查过)我的 XP ( SP 3 )上有 Python 3.4.3 >) PC 。因此, Python 3 (在 3.5 之前)也很有可能在 Win 2003 上运行。
@ EDIT1 :
最后,我有一些官方声明:在[MS.Docs]: GetTickCount64 function官方页面上,将鼠标悬停在“ 下载”按钮上会产生:
请注意,在Windows XP或更早版本上不能使用Python 3.5+ 。
或(甚至更清晰):
请注意,不一定意味着能够保证较早的版本能够正常工作。因此,您需要做一些测试(我建议在目标计算机上安装 Python 和必需的软件包,并且只有在一切都成功后,才对所有内容进行打包)。
@ EDIT2 :
我提到我已经构建了一个 Python2.7 版本。 psutil 是其中的一部分。
>>> import sys, platform, psutil >>> sys.version, sys.platform ('2.7.10 (default, Mar 8 2016, 15:08:43) [MSC v.1600 32 bit (Intel)]', 'win32') >>> platform.platform() 'Windows-XP-5.1.2600-SP3' >>> psutil.__version__ '3.1.1'
答案 1 :(得分:-1)
最后我使用了python 2.7.9和py2exe,它解决了,但是PSutil不兼容Windows 2003 Server:c