Python с флешки, как запустить IDLE?

Я пытался запустить Python 3.3 с моей флешки. Я уже пробовал Portable Python, но большая часть того, что у него не открылось, и он разбил мой ноутбук.

Итак, я удалил его и установил обычный Python. Затем я хотел начать добавлять свои любимые модули. И мне нужен был способ запустить IDLE без оригинального ярлыка.

Для установки модулей я добавил установку Python в переменную PATH.

Чтобы сделать все это проще, я создал командный файл, используя код, который нашел по этому вопросу.

Пока у меня есть это. Он также запрашивает букву диска, потому что она меняется с компьютера на компьютер.

@echo off
echo This only works if your Python install is added to the system-wide PATH variable
set /p Path="Enter the Drive Letter on this computer. No Symbols, Just the Letter, Capital"
cd %Path%:\Program Files\Python33
echo type this when python comes up...
echo import idlelib.PyShell
echo idlelib.PyShell.main()
echo.
echo.
echo.
echo.
python

Это выводит это:IDLE Bringer Output

Если вы продолжите и будете следовать инструкциям и наберете то, что там написано, это вызовет IDLE. Я не мог понять, как заставить командный файл на самом деле печатать в приглашении Python, поэтому я попросил его указать пользователю, что нужно вводить.

Что мне нужно знать, как я могу изменить переменную PATH из пакетного файла. Кроме того, как я могу удалить его, когда я закончу (это не так важно, и даже может быть в отдельном командном файле).

Или, альтернативно, есть ли способ просто ярлык для IDLE?

Кроме того, есть ли способ запустить.py файлы без командной строки с установкой Python на мою флешку?

Спасибо!

2 ответа

Решение

Вы можете вызвать Python с помощью этой командной строки:

python -c"import idlelib.PyShell;idlelib.PyShell.main()"

и он вызовет оболочку IDLE без необходимости что-либо печатать пользователем.

Изменить: Кстати, вы уверены, что вам действительно нужно изменить настройки глобального пути. Попробуйте посмотреть, может ли следующий скрипт запустить Python так, как вы хотите. Вы должны поместить его в корневой каталог USB-накопителя, на котором установлена ​​программа Python.

@echo off
setlocal
set SCRIPT_DIR=%~dp0
:: Removes trailing backslash (for readability in the following)
set SCRIPT_DIR=%SCRIPT_DIR:~0,-1%
set PYTHON_HOME=%SCRIPT_DIR%\Program Files\Python33
set PATH=%PYTHON_HOME%;%PATH%
"%PYTHON_HOME%\python.exe" -c"import idlelib.PyShell;idlelib.PyShell.main()"

Редактировать: Каждый процесс имеет связанную среду, которая представляет собой набор пар имя-значение, называемых переменными среды. Когда процесс запускается, он получает копию среды своего родительского процесса. Глобальные настройки ОС для переменных среды используются для процессов, запускаемых непосредственно из оболочки ОС (GUI или командной строки). set Команда в пакетных файлах устанавливает или изменяет переменную среды в среде текущего процесса (не глобально).

Все set Команды, которые вы видите в приведенном выше скрипте, изменяют только среду текущего процесса. Эти изменения будут видны процессом, созданным последней строкой (python.exe) потому что это дочерний процесс командной оболочки (cmd.exe) процесс, выполняющий пакетный файл.

Линия

set PATH=%PYTHON_HOME%;%PATH%

предвосхищает содержание PYTHON_HOME переменная к PATH переменная текущего процесса. Например, если PATH мы c:\foo\bar;d:\aaa\bbb а также PYTHON_HOME мы c:\python тогда новое значение PATH будет c:\python;c:\foo\bar;d:\aaa\bbb

Невозможно гарантировать, что это возможно, если у вас недостаточно системных привилегий, чтобы изменить глобальный путь. На большинстве компьютеров, которыми вы не владеете, действительно нет никакого способа обойти это, что я считаю главной целью. В тех случаях, когда у вас достаточно привилегий (стоит попробовать, некоторые системы по-прежнему разрешают это для обычных пользователей, но многие другие этого не делают), вы можете использовать:

setx PATH "%path%;yourpath"

редактировать и пс:

Вы можете определить букву диска без ввода, если вы знаете метку диска, примерно так:

@echo off
set label=DRIVENAME
set cmd=WMIC logicaldisk WHERE volumename^^="%label%" GET caption


FOR /F "tokens=1" %%G IN ('%cmd% ^| find ":"')DO set pydrive=%%G

echo %pydrive%\pathtopython
rem do your stuff here

простой, запущенный внутри пакета, унаследует путь, а другие экземпляры - нет. Трудно проверить окончательно жестко.

Объяснение пакетного сценария выше. Команда wmic коротка для командной строки инструментария управления Windows. Можно использовать WMI для выполнения многих задач, и одна из них состоит в том, чтобы выдавать запросы WQL (SQL for WMI), как если бы окна были базой данных. Базы данных содержат много таблиц, в этом случае компьютер получает указание выбрать таблицу с именем logicdisk. Таблица логического диска имеет 38 столбцов и одну строку для каждого диска, подключенного к системе. Это способ много данных для этой цели. Таким образом, данные фильтруются. WHERE заставляет базу данных только выплевывать строки, содержащие определенное значение, в этом случае ее интересуют только те строки, у которых имена столбцов равны DRIVENAME, также вы можете использовать размер серийного номера или любые другие критерии. Наконец, GET используется для ограничения столбцов, которые вы возвращаете как результаты, так как вас интересует только буква имени диска, это то, что вы спрашиваете. Это называется заголовком в таблице, так что то, что вы спрашиваете.

Поскольку команда немного длинная, поэтому я помещаю команду в переменную (а не в результат), это сокращает строку for, чтобы она соответствовала переполнению стека. Поскольку = нужно экранировать, мне нужно слишком часто использовать escape-последовательность ^, чтобы она все еще была способна в цикле for.

Цикл for используется для захвата возвращаемого значения команды wmic. Поскольку в ответе много строк, я фильтрую только те строки, которые содержат символ двоеточия. И поместите его в переменную pydrive.

Другие вопросы по тегам