Как я должен без проблем запускать приложение Portable Python Tkinter в Windows? - PullRequest
4 голосов
/ 11 января 2011

Я написал простую программу с графическим интерфейсом на Python, используя Tkinter.Давайте назовем эту программу «gui.py».Мои пользователи запускают gui.py на компьютерах с Windows с USB-ключа, используя Portable Python ;установка чего-либо на хост-компьютере нежелательна.

Я бы хотел, чтобы мои пользователи запустили файл gui.py, дважды щелкнув значок в корне USB-ключа.Моих пользователей не волнует, что такое python, и они не хотят использовать командную строку, если им это не нужно.Я не хочу, чтобы им было все равно, какой букве назначен USB-ключ.Я хотел бы, чтобы это работало на XP, Vista и 7.

Моим первым уродливым решением было создать ярлык в корневом каталоге USB-ключа и установить для свойства "Target" ярлыка значениечто-то вроде «(root) \ App \ pythonw.exe (root) \ App \ gui.py», но я не мог понять, как сделать относительный путь в ярлыке Windows и использовать абсолютный путь, например «E:"кажется хрупким.

Моим следующим решением было создание сценария .bat в корневом каталоге USB-ключа, что-то вроде этого:

@echo off
set basepath=%~dp0
"%basepath%App\pythonw.exe" "%basepath%\App\gui.py"

Похоже, это не имеет значениябуква диска, которой назначен USB-ключ, но он оставляет окно DOS открытым во время работы моей программы.Функционально, но некрасиво.

Затем я попробовал скрипт .bat, подобный этому:

@echo off
set basepath=%~dp0
start "" "%basepath%App\pythonw.exe" "%basepath%\App\gui.py"

(см. здесь для объяснения забавных цитат)

Теперь окно DOS кратковременно мигает на экране, прежде чем открывается мой графический интерфейс.Менее некрасиво!Все еще некрасиво.

Как настоящие мужчины справляются с этой проблемой?Какой наименее уродливый способ запустить графический интерфейс Tkinter Python на компьютере с Windows с USB-накопителя?

РЕДАКТИРОВАТЬ: Все ответы ниже были очень хорошими (py2exe, pyinstaller, small .exe, .wsf script.)Решение .wsf было самым простым, поэтому я использую его сейчас.Я, вероятно, в конечном итоге переключусь на одно из трех других решений, если захочу более симпатичный значок и стандартное расширение .exe.Спасибо всем!

Ответы [ 7 ]

4 голосов
/ 11 января 2011

Этот сценарий Windows Scripting Host (расширение файла .wsf) можно использовать вместо командного файла:

<job>
<script language="VBScript">
set WshShell = WScript.CreateObject("WScript.Shell")
CMDFile = "App\\pythonw.exe App\\gui.py"
WshShell.Run CMDFile, 1
</script>
</job> 

Обновление: альтернативно скомпилируйте эту программу на C и свяжите ресурс значка:

#include <windows.h>
#include <process.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                   LPSTR lpCmdLine, int nCmdShow)
{
    return _spawnl(_P_NOWAIT, "App/pythonw.exe", " App/gui.py", lpCmdLine, NULL);
}

Обновление 2: чтобы создать App.exe со значком, сохраните код C в app.c, создайте файл значков Windows app.ico и сохраните следующую строку в app.rc:

appicon ICON "app.ico"

Используя Visual Studio 2008 Express, выполните следующие команды:

"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
rc.exe app.rc
cl.exe app.c /FeApp.exe /link app.res

В качестве альтернативы используйте «Visual Studio 2010 Express» или «Microsoft Windows SDK v7.0 для Windows 7 и .NET Framework 3.5 с пакетом обновления 1» и измените команды соответствующим образом.

Обратите внимание, что значок будет использоваться только для стартовой программы App.exe, а не для программы Python.

4 голосов
/ 11 января 2011

Используйте pyinstaller для архивации вашего дистрибутива (преимущество перед py2exe заключается в том, что он knows отличается от сторонних библиотек и, как правило, более современен).может затем создать .exe для ваших пользователей, чтобы щелкнуть, чтобы запустить ваше приложение.Если вы просто скопируете результаты сборки pyinstaller на свой USB-накопитель, все будет в порядке.

3 голосов
/ 11 января 2011

Создайте его для одного исполняемого файла, используя py2exe .

2 голосов
/ 20 октября 2013

Краткий ответ:

Этот вопрос был задан несколько лет назад, но недавно я нашел решение для программы, над которой я работал, которая все еще может быть полезна для других. С помощью этого метода вы сможете создать автономный лаунчер exe-программы, который можно разместить в любом месте и ссылаться на файл в той же папке или подкаталоге, имея при этом симпатичную иконку по вашему выбору и не выскакивая экран DOS. Другими словами, действительно красивый переносимый ярлык с относительным путем:)

Решение должно быть простым и понятным даже для непрограммистов, и оно выглядит следующим образом:

  1. открыть блокнот
  2. запись:% windir% \ system32 \ cmd.exe / c start "" "% CD% \ необязательно вложенная папка \ mainpy2exeGUI.exe "
  3. сохранить как "what.bat"
  4. преобразовать bat-файл в exe-файл, используя программу под названием «BAT to EXE converter» во время проверки опции «невидимое приложение» и выбора значок файла, который вы хотите на вкладке "versioninformations". Вы можете назвать выходной файл exe на что угодно. Ссылка на конвертер программу можно найти на http://www.freewaregenius.com/how-to-create-shortcuts-with-a-relative-path-for-use-on-usb-drives/ Загрузка программы-конвертера содержит 32- и 64-разрядную версию, используйте 32-разрядную версию, чтобы ярлык можно было использовать как на старых, так и на новых ПК.

(обратите внимание, что это решение почти такое же, как предложено на http://www.freewaregenius.com/how-to-create-shortcuts-with-a-relative-path-for-use-on-usb-drives/. Однако текущее решение отличается с точки зрения кода, который он использует на шаге 2, который позволяет размещать программу запуска в любом месте компьютера, а не только в верхнем каталоге USB-флешки и является новым, чтобы подчеркнуть необходимость проверки невидимой опции. Эти различия имеют решающее значение.)

Подробнее (необязательно):

Первоначальный вопрос был: «Какой наименее уродливый способ запустить Python Tkinter GUI на компьютере с Windows с USB-накопителя?»

То, что было нужно, можно разбить на четыре вещи: 1. Программа запуска exe. 2. Это работает на любом компьютере и в любом каталоге (то есть поддерживает относительные пути). 3. Это имеет значок. 4. Это не открывает "уродливое" окно DOS.

Было предложено несколько возможных решений, но ни одно до сих пор не удовлетворяло всем критериям. В первоначальном постере использовалась опция «.wsf», которая позволяла указывать относительные пути и не отображала уродливое окно DOS, но не позволяла использовать собственный значок или распознаваемый exe-файл.

Часть проблемы с ранее предложенными решениями включает:

  1. у вас нет навыков программирования или C / VB.
  2. Вы хотите иконку для вашей программы запуска. Использование файла ярлыка, который выполняет «cmd» и использует его для открытия файла GUI, позволит вам установить файл значков, НО ссылка на файл значков является абсолютной и не будет работать на любом другом компьютере, кроме того, на котором вы создали файл ярлыка.
  3. Вы не хотите, чтобы "мерзкая" вспышка окна DOS. Упрощенное решение cmd, упомянутое в предыдущем пункте, создает окно DOS, которое мигает перед открытием графического интерфейса пользователя.
  4. Создание основного исполняемого файла py2exe в качестве средства запуска программы было бы почти идеальным решением, поскольку оно удовлетворяет всем критериям, но отступление от него заключается в том, что для исполняемого файла py2exe потребуется разместить некую уродливую папку "tlc" в той же самой верхней части. -directory. Поэтому лучше скрыть основной модуль запуска py2exe в красиво названной подпапке. Кроме того, во многих случаях хотелось бы сохранить средство запуска программы и саму программу в виде отдельных исполняемых файлов, например, если вы используете только свою основную программу py2exe для работы как python-runner, который может запускать открытый редактируемый python Сценарии, которые можно редактировать на ходу, не создавая новый файл py2exe для каждого изменения одного из ваших сценариев.
2 голосов
/ 11 января 2011

Вы можете сделать это хакерским способом, написав свое собственное маленькое C-приложение, которое вызывает system('start "" "%basepath%App\pythonw.exe" "%basepath%\App\gui.py"'). Затем вы компилируете его без консоли и используете его как «ярлык».

1 голос
/ 09 ноября 2013

Вы также можете разветвлять Переносимые исходники Python на GitHub и создавать ярлыки таким же образом, как и другие ярлыки Portable Python.

Это дает вам хороший способ запустить приложение, значок, вы можете установить собственные переменные реестра / env, если вам нужно, и т. Д. И т. Д.

В качестве примера вы можете взять, например, Ярлык IDLE из Portable Python источников.

0 голосов
/ 29 мая 2014

Я создал пакетный скрипт (PyRunEXE), который компилирует простой код на языке ассемблера, чтобы сделать для вас запуска EXE:

https://github.com/SzieberthAdam/pyrunexe

...