Найти - Пользователи
Полная версия: Нужно собрать в py проект в exe так, чтобы exe работал в Windows XP на другом компьютере
Начало » Python для новичков » Нужно собрать в py проект в exe так, чтобы exe работал в Windows XP на другом компьютере
1
Timofei
Здравствуйте!

Преамбула: Я исследователь в области спектроскопии наноматериалов. Я пользуюсь спетрометром, железо которого управляется программой “wire” с графическим интерфейсом на компьютере под операционной системой виндоус XP без доступа в интернет. Эта данность, которую я поменять не в силах - спектрметром пользуюсь не один и замена компьютера на совреенный с современным софтом остановит проекты десятков людей на неопределенное время.
Сущесвтенная часть моего рабочего времеи уходит на стандартизированные и рутинные измерения - т.е. мое учатие заключается в том, что нужно много раз повторить определенне движения мышкой и ввести команды с клавиатуры и иногда принимать несложные решения о дальнейших действиях в зависимости от того, какие я вижу спетры. Я захотел эту процедуру автоматизироватть.

Поскольку wire не поддерживает API (я узнавал у производителя) я пошел обходным путем: Я скачал программу wire (это та которая упправляет спектрометром) на свой персональный ноутбук, и написал питон программу, которая эмулирует нажатия клавиш на клавиатуре и движения мышкой в нужной мне последовательности (а также просматривает txt файлы со спектрами, которые генерируются программой wire в процессе работы спектрометра и принимает решения на основе анализа спкектров). Я протестировал эту программу на своем компьютеретере: все нажатия просходят как надо, все хорошо. При сборке питон проекта в exe файл (через pyinstaller)тоже все работает хорошо - на моем персональном ноутбуке.

Но вот проблема:
Если запускать эти exe файлы на компьютере подключенном к спетрометру, то они не запускаются - windows XP не может выполнить эти файлы

Я вижу следующие пути решения:

Идея 1: Используя современный питон 3.12.4 на современном компьютере, упаковать мой проект в exe файл в режиме совместимости с XP. Протестировать также на современном ноутбуке но через винртуальную машину с XP. Возможно ли это?

Идея 2: снести с современного компа питон 3.12.4, установить на него последний питон из тех что совместимы с XP (это наверное 3.4?) и упаковать в exe. протестировать на виртуальной машине.

Идея 3: установить виртуальную машину с XP, на нее установить питон 3.4. и им же упаковать проект в exe.

Идея 4. Нарыть где нибуь в моем университете старый компьютер с XP но с доступом в интернет. Установить на него питон 3.4, упаковать проект в exe и протестировать.

В чем заключатеся мой вопрос:
Адекватны ли выше приведенные идеи или они обречены на провал? какая из них наиболее перспективная? может быть есть какой то совсем другой, очень простой путь?

Важное замечание: я не программист. Я устаовил питон, анаконду и VS code по инструкциям от чатгпт. Почти весь проект закодировали копайлот и чатгпт по моим запросам, а я только тестировал и подправлял немного. Слова “виртуальное окружение”, “интерпретатор” и т.д. мне не совсем понятны. Пожалуйста, если можно, имейте это ввиду, что я совсем новичок. Спасибо.

ниже приведу пример одной из функций, чтобы было понятно с чем я имею дело:

import sys
import os
import time
from pynput.keyboard import Controller as KeyboardController, Key
from pynput.mouse import Controller as MouseController, Button
from readConfig import readConfig

# Initialize the keyboard and mouse controllers
keyboard = KeyboardController()
mouse = MouseController()

def wireMoveTo(XYZ):
“”“Emulates mouse movements and keypresses to move to specified coordinates in Wire software.”“”


VpixelForX = readConfig(“VpixelForX:”)
VpixelForY = readConfig(“VpixelForY:”)
VpixelForZ = readConfig(“VpixelForZ:”)

HpixelForX = readConfig(“HpixelForX:”)
HpixelForY = readConfig(“HpixelForY:”)
HpixelForZ = readConfig(“HpixelForZ:”)

VpixelForGoTo = readConfig(“VpixelForGoTo:”)
HpixelForGoTo = readConfig(“HpixelForGoTo:”)

def enter_value(value):
“”“Deletes existing text and types a new value.”“”
for _ in range(5):
keyboard.press(Key.backspace)
keyboard.release(Key.backspace)
time.sleep(0.1)
keyboard.press(Key.delete)
keyboard.release(Key.delete)
time.sleep(0.1)

keyboard.type(str(value))
time.sleep(0.1)

def move_and_click(x, y):
“”“Moves mouse to a specific position and clicks.”“”
mouse.position = (x, y)
time.sleep(0.1)
mouse.click(Button.left, 1)
time.sleep(0.1)

print(f“Moving to position {XYZ} in Wire software…”)

for i in range(2):
# Enter X coordinate
print(f“Iteration {i+1}: Entering X coordinate…”)
move_and_click(HpixelForX, VpixelForX)
time.sleep(0.1)
enter_value(XYZ)
time.sleep(0.1)

time.sleep(0.1)

# Enter Y coordinate
print(f“Iteration {i+1}: Entering Y coordinate…”)
move_and_click(HpixelForY, VpixelForY)
time.sleep(0.1)
enter_value(XYZ)
time.sleep(0.1)

time.sleep(0.1)

# Enter Z coordinate
print(f“Iteration {i+1}: Entering Z coordinate…”)
move_and_click(HpixelForZ, VpixelForZ)
time.sleep(0.1)
enter_value(XYZ)
time.sleep(0.1)

time.sleep(0.1)

# Confirm the movement (simulating a click on ‘Go To’)
print(f“Iteration {i+1}: Executing move command…”)
move_and_click(HpixelForGoTo, VpixelForGoTo)
time.sleep(0.1)

time.sleep(0.1)

print(“Move command executed successfully.”)

if __name__ == ‘__main__’:
print('Start Testing of a function: wireMoveTo')
print('The key press emulation will start in 5 seconds. Please switch to the Wire application and do not touch anything.')

for i in range(5, 0, -1):
print(f'Starting in {i} seconds…')
time.sleep(1)

wireMoveTo()

print(“Finish Testing of a function: wireMoveTo”)
input(“Press Any Key to close.”)




В отедельном файле объявлен readconfig:
def readConfig(lineDescription):
configdata = “nothing”
with open(“config.txt”, “r”) as file:
for line in file:
if line.startswith(lineDescription):
configdata = int(line.strip())
break
return configdata

if __name__ == “__main__”:
# Example usage
lineDescription = “waterlineCPS785”
config_value = readConfig(lineDescription)
print(config_value)



Alex.Pro.
Timofei
под виндоус XP
Сочувствую. В который уже раз вижу человека, у которого возникают проблемы с промэлектроникой. Техника достаточно надёжная, может ещё работать и работать, но возникают новые пожелания, новые потребности, а компьютерные технологии меняются быстро и возникают проблемы с обновлением специализированного софта. Но это всё лирика. По существу… IMHO, идея №3 самая реальная. Будете устанавливать XP в виртуальной машине - обратите внимание на разрядность операционки. На рабочей машине, наверняка, установлена 32-бит. Соответственно, и Вам под ВМ надо установить тоже XP 32-бит. Потом установить Пайтон 3.4.4 и заняться переписыванием и отладкой Вашей программы под устаревший Пайтон. Уверен, что придётся переписывать и f-строки и много ещё чего. Потом сможете откомпилировать Вашу программу (перевести из .py в .exe) и заняться её окончательным тестированием.
Удачи!
Rodegast
> Нужно собрать в py проект в exe так, чтобы exe работал в Windows XP

Зачем “exe”? Установите python на машине со спектрометром и запускайте через него свой скрипт.
jeffreestar
If building the .exe is too complicated, you can try running the Python script directly on the spectrometer computer by installing Python 3.4 directly on it. You won't have to mess around with PyInstaller, but you will have to transfer dependencies (pynput) manually. This is risky because there is no internet, but it is possible via a flash drive. Escape Road City
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB