Используя расширение Python для Visual Studio Code, я могу выбрать код, щелкнуть его правой кнопкой мыши и выбрать «Выполнить выделение / строку в терминале Python» (в качестве альтернативы я могу нажать Shift + Enter). Однако это отправляет выбранный код в простой старый Python REPL на панели «Терминал», тогда как я бы хотел, чтобы этот код запускался вместо этого в IPython (не в QtConsole, а только в IPython на основе терминала).
Можно ли установить IPython как REPL по умолчанию? Я попытался установить /usr/local/bin/ipython3
в качестве среды Python по умолчанию, но это не сработало (он по-прежнему выполняет простой интерпретатор Python). FWIW, я использую macOS.
В документации обсуждается Jupyter (ноутбуки), но вместо этого я хотел бы запустить терминальный IPython. code-runner, похоже, не работает с IPython: github.com/formulahendry/vscode-code-runner/issues/360
См. Ответ в Как установить ipython / jupyter в качестве терминала Python по умолчанию для vscode?
Введите Ipython в окне терминала. Затем выберите строку или строки, которые вы хотите запустить, в окне редактора, а затем щелкните меню «Терминал» в верхней части окна VScode. Один из вариантов в меню «Терминал» - «Запустить выделенный текст». Это будет запущено в окне терминала Ipython. Я не знаю, как сделать это по умолчанию, но, похоже, он останется в этом состоянии, если Ipython не будет остановлен. Примечание. Вы должны выполнить свой выбор с помощью пункта меню. Если щелкнуть правой кнопкой мыши в окне редактора и щелкнуть «Выполнить выделение», окно Ipython не будет использоваться. Надеюсь, это понятно. Если не просто оставьте комментарий.
Отлично, это работает! Я не могу поверить, что это так сложно найти, похоже, что плагин Python должен по умолчанию использовать это поведение, а не то, что он делает прямо сейчас. Я сопоставил эту функцию с сочетанием клавиш Shift + Enter, и она отлично работает!
Хм, к сожалению, это работает не совсем так, как ожидалось. Если я выберу несколько строк, в терминале будет запущена только первая строка выбора. Похоже на ошибку, посмотрю, сообщил ли уже кто-нибудь об этом.
У меня это сработало с несколькими строками. Я не понимаю, почему у тебя это не сработало.
Я попробовал еще раз с несколькими строками, но это НЕ сработало. Мой предыдущий комментарий был неправильным. Я пробовал несколько вещей, но мне не удалось запустить более одной строки.
Я разместил там вопрос: github.com/Microsoft/vscode/issues/61892
Не уверен, почему, но ipython останавливается на первой пустой строке. Если у вас несколько строк смежные, он запустит их все. С другой стороны, если вы копируете и вставляете их прямо в терминал, все они целиком помещаются в одну входную запись, но вам все равно нужно дважды нажать Enter, чтобы запустить ее.
В лучшем случае утомительное решение
Чтобы не использовать мышь для выбора пункта меню (Терминал> Выполнить выделенный текст), можно использовать специальный ярлык. У меня Shift+Enter
, чтобы следовать другому соглашению.
Я запускаю IPython из внутри, стандартного REPL Python, созданного Shift-Enter с
import IPython
IPython.embed()
См. Документы IPython.
хотя это сработало для добавления кода в экземпляр IPython, он по-прежнему не запускает код, вместо этого нажатие Shift + Enter только добавляет код + "\ n" (т. е. следующую строку).
За исключением раскраски текста, это наиболее предпочтительный вариант.
Я использую Ctrl + D, чтобы закрыть простой Python REPL, созданный Shift + Enter, а затем просто запустить IPython REPL из командной строки в окне терминала (я использую WSL с VS Code), что дает мне цвета. Здесь интерпретируется код, отправленный от редактора.
Поддержка IPython обеспечивается плагином «IPython for VSCode».
Просто выделите текст и вызовите «Отправить выделенный текст (или текущую строку) в IPython» в палитре команд.
Также официальный плагин Microsoft Python теперь поддерживает интерактивные окна Jupiter с аналогичной функциональностью.
Используйте плагин «IPython for VSCode».
Установите его, а затем используйте Send Select Text (or current line) To IPython
Если вы хотите использовать настройку ярлыка с оригинальным shift+enter
для выполнения команды выше, используйте методы Один из ниже.
настройка открытого ярлыка: Macos это cmd+k cmd+s
.
команду поиска выше и щелкните правой кнопкой мыши, чтобы изменить привязку клавиатуры как shift+enter
.
Затем щелкните правой кнопкой мыши еще раз, чтобы изменить When expression
как:
editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'
Щелкните правой кнопкой мыши и выберите show same key bindings
.
Найдите команду Python: Run Selection/Line in Python Terminal
и щелкните правой кнопкой мыши, чтобы отключить ее.
Откройте настройку ярлыка и щелкните в правом верхнем углу, чтобы открыть конфигурацию JSON.
Добавьте эти настройки:
{
"key": "shift+enter",
"command": "ipython.sendSelectedToIPython",
"when": "editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'"
},
{
"key": "shift+enter",
"command": "-python.execSelectionInTerminal",
"when": "editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'"
}
Спасибо! Есть ли способ автоматически переместить фокус обратно в редактор после отправки текста в IPython?
Привет, извините за комментарий позже. В большинстве случаев мне нужен курсор курсора на ipython. Если вы хотите, чтобы он снова сфокусировался, возможно, вы можете использовать ярлык Cmd + number
в зависимости от вашей группы.
Добавление следующего параметра (предпочтение: открыть настройки JSON; или предпочтение -> настройки -> поиск launchArgs
-> редактировать в json) работает без какого-либо расширения. Это также устраняет проблему, заключающуюся в том, что несколько строк не могут быть отправлены в Python.
"python.terminal.launchArgs": [
"-c",
"\"import subprocess; subprocess.call(['ipython', '--no-autoindent'])\""
],
Обновление (2020-12-27): следующий параметр работает лучше, потому что он поддерживает прерывание клавиатуры Ctrl + C без существующего IPython:
"python.terminal.launchArgs": [
"-m",
"IPython",
"--no-autoindent",
],
Это отлично работает, спасибо! Все, что я делаю, когда хочу запустить код Python через ipython в vscode, - это открывать терминал в vscode и набирать ipython
в начале сеанса. Затем shift + enter в моем скрипте отправляет его на ipython. Если бы у меня не было этого фрагмента кода в моих настройках, он бы добавил ненужные отступы. Спасибо еще раз!
Вы также можете установить "python.pythonPath"
в свой settings.json
следующим образом:
{
"python.pythonPath": "~/miniconda3/bin/ipython3",
"python.dataScience.sendSelectionToInteractiveWindow": false
}
или
{
"python.pythonPath": "~/miniconda3/envs/<yourEnv>/bin/ipython3",
"python.dataScience.sendSelectionToInteractiveWindow": false
}
shift+enter
запустит ipython и отправит строку на терминал.
Это работает, но похоже, что это может испортить другие вещи, потому что настройка python.pythonPath
может понадобиться в других местах. Я обнаружил, что отображение Shift + Enter на «Терминал: запуск выбранного текста в активном терминале» (workbench.action.terminal.runSelectedText
) запускает выбранные строки в активном терминале (где я сначала вручную запускаю IPython). Теперь это также работает с несколькими линиями и уровнями отступа. Требуется только переназначение одного сочетания клавиш.
Как создать блокнот Jupiter в VS Code
Вы проверяли официальный документы? Вы также можете попробовать расширение
code runner
.