PyInstaller/Py2exe - включает системный вызов os.sith со сторонними скриптами при компиляции одного файла
Я использую tkinter и pyinstaller/py2exe (любой из них подойдет), чтобы создать исполняемый файл как отдельный файл из моего скрипта python. Я могу создать исполняемый файл, и он запускается по желанию, когда не используется опция bundle с py2exe или опция -F с pyinstaller. Я запускаю сторонние скрипты Python в своем коде с помощью os.system() и могу просто поместить эти скрипты в каталог 'dist' после того, как он будет создан, чтобы он работал. Команда имеет несколько параметров: входной файл, выходной файл, количество потоков... и т. Д., Поэтому я не уверен, как добавить это в мой код с помощью импорта. К сожалению, это в Windows, поэтому некоторые коллеги могут использовать графический интерфейс и хотели бы иметь один исполняемый файл для распространения.
** РЕДАКТИРОВАТЬ:** Я могу заставить его объединить в один исполняемый файл и предоставить сценарии вместе с исполняемым файлом. Однако проблема по-прежнему заключается в os.system("python script.py -1 inputfile -n numbthreads -o outputfile..")
при запуске сторонних скриптов в моем коде. У меня был коллега, тестирующий исполняемый файл с помощью прилагаемых к нему скриптов, однако на этом этапе им необходимо установить Python, что недопустимо, так как будет несколько пользователей.
1 ответ
После нескольких дней тестов я смог понять, как обойти эту проблему. Вместо os.system
, Я использую subprocess.call("script.py arg1 arg2 ..., shell=True)
для каждого скрипта мне нужно запустить. Также я использовал chmod +x
(в linux) перед переносом сценариев в windows, чтобы убедиться, что они исполняемые (надеюсь, кто-то скажет мне, действительно ли это необходимо). Затем, без необходимости установки python, коллега смог запустить программу, после того как я скомпилировал ее в один файл с pyInstaller. Я также смог сделать то же самое с исполняемыми файлами blast (где пользователю не нужно было устанавливать blast локально - если exe также сопровождал распространение скрипта). Это позволило избежать необходимости вызова bipython ncbiblastncommandline и установки.