Мне нужно извлечь некоторые вещи о системном процессе на сервере Windows 2003 (да, в 2019 году), я сделал этот код на python и скомпилировал его с помощью auto_py_to_exe
Когда я запускаю файл .exe
на сервере, я получаю сообщение об ошибке "LoadLibrary: The specified procedure could not be found."
ссылаясь на python37.dll
Я пытаюсь скомпилировать как один каталог (с включенным конкретным dll), и я пытаюсь скомпилировать как один файл, и я получаю следующий вывод.
Между Python 3.7 и Win 2003 слишком большой разрыв. Глядя на [Python.Wiki]: WindowsCompilers Python 3.7 там даже не указан (так как он собран с VStudio 2017). Для этого (и самого Python) потребуются функции /call, которых нет в системных библиотеках Win 2003.
Вот пример. На изображениях ниже я открыл 2.dll(2.7 и 3.7) main.dll с помощью Dependency Walker:
Как видно, оба импортируют кучу функций из kernel32.dll. Но одно отличие состоит в том, что python37.dll импортирует GetTickCount64. Согласно [MS.Docs]: функция GetTickCount64, минимальная версия Сервера, которая поддерживает это, является Win 2008, то есть она не будет работать в Win 2003.
Итак, вам придется вернуться к Python 2.7 (вершины). Несколько лет назад я собрал Python 2.7.10 с VStudio 2010, и он работал на Win 2003 (и XP SP 1); скорее всего, это относится и к самой последней (2.7) версии.
Обратите внимание, что вам также необходимо установить все пакеты, которые вы используете в своем скрипте (включая auto-py-to-exe).
@EDIT0:
Я вспомнил (и только что проверил), что у меня есть Python 3.4.3 на моем ПК с XP (SP 3). Таким образом, существует высокая вероятность того, что Python 3 (до 3.5) будет работать и на Win 2003.
@EDIT1:
Наконец, у меня есть официальное выражение: на официальной странице Python при наведении курсора мыши на кнопку "Скачать" вы увидите:
Обратите внимание, что Python 3. 5+ нельзя использовать в Windows XP или более ранней версии.
или (еще яснее):
Обратите внимание, что это не обязательно означает, что старые версии гарантированно будут работать. Итак, вам нужно будет немного протестировать (я бы рекомендовал установить 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'
Я не упомянул, что я собрал psutil из исходных кодов, но готовые установщики .whls и Win доступны для скачивания: [PyPI]: psutil 3.1.1 - Загрузка файлов.
наконец, я использовал Python 2.7.9 и py2exe, он решил, но PSutil его не совместим с сервером Windows 2003: c