Use IPython REPL in VS Code - python

Using the Python extension of Visual Studio Code, I can select some code, right-click it, and select "Run Selection/Line in Python Terminal" (alternatively, I can hit Shift+Enter). However, this sends the selected code to a plain old Python REPL in the Terminal pane, whereas I'd like to have this code run in IPython instead (not the QtConsole, just the terminal-based IPython).
Is it possible to set IPython as the default REPL? I tried setting /usr/local/bin/ipython3 as my default Python environment, but that doesn't work (it still executes the plain Python interpreter). FWIW, I'm on macOS.

Adding the following setting (Preference: Open Settings JSON; or Preference -> Settings -> Search launchArgs -> edit in json) works without any extension. It also fixes the issue that multiple lines cannot be sent to Python.
"python.terminal.launchArgs": [
"-c",
"\"import subprocess; subprocess.call(['ipython', '--no-autoindent'])\""
],
Update (2020-12-27): the following setting seems to work better because it supports Ctrl+C keyboard interrupt without existing IPython:
"python.terminal.launchArgs": [
"-m",
"IPython",
"--no-autoindent",
],

Type Ipython inside the terminal window. Then select the line or lines you want to run from the editor window and then click on the Terminal menu at the top of VScode window. One option in the Terminal menu is to "Run Selected Text". This will be run in the Ipython terminal window. I don't know how to make this the default but it appears to remain in that state unless Ipython is stopped. Note: You have to run your selections using the Menu item. Right-clicking in the editor window and clicking on "Run Selection" will not use the Ipython window. I hope this is clear. If not just drop a comment.

Use "IPython for VSCode" plugin.
Install it and then use Send Select Text (or current line) To IPython
If you want use shortcut setting with original shift+enter to execute command above, Use One of below methods.
Shortcut setting - Normal
open shortcut setting: Macos it's cmd+k cmd+s.
search command above and right click to modify the keyboard binding as shift+enter.
Next, right click again to modify the When expression as:
editorTextFocus && !findInputFocussed && !python.datascience.ownsSelection && !replaceInputFocussed && editorLangId == 'python'
Right click and select show same key bindings
Find command Python: Run Selection/Line in Python Terminal and Right click to disable it.
Shortcut setting - JSON
Open shortcut setting and click Upper right corner to open JSON config
Append these settings:
{
"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'"
}

I start IPython from inside the standard Python REPL that's spawned by Shift-Enter with
import IPython
IPython.embed()
See IPython docs.

You could also set the "python.pythonPath" in your settings.json as follows:
{
"python.pythonPath": "~/miniconda3/bin/ipython3",
"python.dataScience.sendSelectionToInteractiveWindow": false
}
or
{
"python.pythonPath": "~/miniconda3/envs/<yourEnv>/bin/ipython3",
"python.dataScience.sendSelectionToInteractiveWindow": false
}
shift+enter will then trigger ipython and send the line to the terminal.

IPython support is provided by "IPython for VSCode" plugin.
Just select the text and invoke 'Send Selected Text (or current line) To IPython' in command palette.
Also official Microsoft Python plugin now supports interactive Jupiter windows, with similar functionality.

How to create a Jupiter Notebook in VS Code
Go to the command palette (Command + Shift + P)
Search for: "Jupyter: Create New Blank Notebook", and hit enter

If you have a default vanilla installation of the Python extension in VSCode, by default you can highlight python code and do "SHIFT+ENTER" to "Run Selection/Line in Python Terminal".
That command will use the default python.exe interpreter. However, this is the trick that works for me to use the IPython shell instead.
First run a dummy line of python code by highlighting it and doing SHIFT+ENTER. This launches a terminal named "python" and starts the python shell to run the code in the REPL.
Now issue exit() in that python shell to return to the regular terminal prompt.
Run ipython in that terminal to start the IPython REPL where the plain old Python REPL used to be.
Now subsequent uses of SHIFT+ENTER (single or multiple lines highlighted) will run the code in the IPython shell.
(Note, if SHIFT+ENTER is sending code to the Python Interactive split window instead of a terminal REPL, make sure your settings.json has "jupyter.sendSelectionToInteractiveWindow": false,)
[EDIT]. Various comments on this thread remark that using the various solutions, code is copied to the IPython terminal, but not run. I realized I also have this experience depending on my active conda environment. If I do conda install -c conda-forge prompt-toolkit in the environment I'm using, I get the expected behavior where SHIFT+ENTER actually runs code. I don't know if that package is the key, one of its dependencies, or just using conda-forge. But it works!

Related

vscode 'jupyter run selection/line in interactive window' shortcut not working

I want to use a keyboard shortcut for jupyter run selection/kine in interactive window in vscode but it's not working.
I also checked VS Code "Run selection/line in Python interactive window" not working at all which implies that there is a version problem but I don't have that version(my version is v2022.4.1), besides it says "it's not working at all" but mine is working when I right click and click on "Run selection/line in Python interactive window".
the when expression also follows by editorTextFocus && isWorkspaceTrusted && jupyter.ownsSelection && !findInputFocussed && !notebookEditorFocused && !replaceInputFocussed && editorLangId == 'python'
by the way there is no other conflict wit my key bindings. so is there any way to solve this?
Despite this working for me via a right click, i still had to select this in the GUI version of settings -> Jupyter: Send Selection To Interactive Window. Then my chosen keybinding also worked. This solution was found and explained more fully at:
https://superuser.com/questions/1461655/vs-code-shiftenter-does-not-send-code-to-python-interactive-why
Could you try to switch the shortcut of this command? Maybe some other programs occupy this shortcut.

How to properly debug Python in vscode?

I am confused with the Run Selection/Line in Python Terminal command. In my VsCode (Windows 11). I have two commands with the same shortcut Shift+Enter.
One is launching an Interactive Jupyter notebook (awful). The other sends it to a Python Terminal (better). My ideal case would be to send it to an Ipython terminal.
How to configure that properly?
Could you try this?
"terminal.integrated.defaultProfile.windows": "IPython",
"IPython": {
"path": "C:\\Work\\python3.10\\.venv\\Scripts\\ipython.exe" //The path to the ipython.exe, please take care of which ipython you have selected, this means which python interpreter selected in the terminal.
},

VS Code execute selection to IPython shell in terminal (no notebook)

I wanted to use IPython interactive in VSC (not using a notebook). By using a keybiding for workbench.action.terminal.runSelectedText, I can successfully execute a selection to a python interactive shell, but with iPython it fails to run the cell and I have to change selection to the terminal and press enter.
Here's my keybidings.json file:
[
{
"key": "ctrl+enter",
"command": "workbench.action.terminal.runSelectedText"
}
]
Any help to solve this is much appreciated! Ideally, a keybinding configuration that includes an extra enter.
I have this problem when I upgraded IPython to version 7.30.1
The solution I found is that add "--simple-prompt", this is not perfect (just no color theme or auto completion), but at very least, you don't need to press enter when sending codes to run.
IPython is not officially supported by the Python extension and this is part of the reason: IPython's design simply requires you to press Enter an extra time based on how VS Code sends text into the terminal.
This is an issue with IPython's autoindent feature. You can disable this by passing --no-autoindent when launching IPython (i.e. ipython --no-autoindent).
edit: added gif.
I was annoyed by this quirk in vs-code too.
I noticed that when using a python virtual environment (I use pipenv) my selected line was executed in an Ipython terminal and no extra Enter key press was needed.
To reproduce or test out:
Launch VS Code
Open a python file and a terminal window
In the terminal run pipenv shell (requires pip install pipenv && pipenv install ipython)
Then in the terminal run ipython (or ipython --no-autoindent)
Select a line in your python file and from a vs-code command palette execute Terminal: Run Selected Text in Active Terminal (or use a keyboard shortcut)

How to set ipython/jupyter as the default python terminal for vscode?

How can I choose ipython/jupyter as the DEFAULT python terminal? I use both a windows 10 and a linux machine with the anaconda distribution.
If I type "ipython" on the terminal, it opens an ipython session. If I run the debugger or shift+enter a line, it automatically runs on a "barebones" python shell. Should be simple...but I have been googling and messing with the settings for half an hour with no success.
Looked up
https://code.visualstudio.com/docs/python/tutorial-flask
Use IPython REPL in VS Code
but could not find a way to set it up on my linux or win10 machines. Any ideas?
A slightly neater way to achieve #TwoUnderscorez's answer is to just launch the module with -m IPython:
"python.terminal.launchArgs": [
"-m",
"IPython"
]
Edit: For anyone struggling with IndentationError: unexpected indent errors, try the following:
"python.terminal.launchArgs": [
"-m",
"IPython",
"--no-autoindent",
]
(wouldn't have just added a comment to the existing answer, but not enough rep)
In your VSCode, press ctrl+shift+P, start typing settings and click on Preferences: Open Settings (JSON)
Add this key-value pair to tell python to start ipython:
"python.terminal.launchArgs": [
"-c",
"\"from IPython import start_ipython; start_ipython()\""
]
There currently isn't support to specify an alternative REPL that isn't the Python interpreter you use to execute code. One trick some people do if you want this just for sending code to the REPL is they launch the REPL once, exit it, and then launch ipython manually as the extension will continue to use that terminal instance for future code sent to the REPL.

How to Execute a Python Script in Notepad++?

I prefer using Notepad++ for developing,
How do I execute the files in Python through Notepad++?
First option: (Easiest, recommended)
Open Notepad++. On the menu go to: Run -> Run.. (F5). Type in:
C:\Python26\python.exe "$(FULL_CURRENT_PATH)"
Now, instead of pressing run, press save to create a shortcut for it.
Notes
If you have Python 3.1: type in Python31 instead of Python26
Add -i if you want the command line window to stay open after the script has finished
Second option
Use a batch script that runs the Python script and then create a shortcut to that from Notepad++.
As explained here: http://it-ride.blogspot.com/2009/08/notepad-and-python.html
Third option: (Not safe)
The code opens “HKEY_CURRENT_USER\Software\Python\PythonCore”, if the key exists it will get the path from the first child key of this key.
Check if this key exists, and if does not, you could try creating it.
#Ramiz Uddin's answer definitely deserves more visibility :
Open Notepad++
On the menu go to: Run → Run.. (F5)
Type in: cmd /K python "$(FULL_CURRENT_PATH)"
Here is what's worked for me:
Open notepad++ and press F5. You'll get a little popup box:
Type: C:\Python27\python.exe -i "$(FULL_CURRENT_PATH)" for Python 2.7.
and then Save As..., and pick your own key combo to start it each time you want to run something
I also wanted to run python files directly from Notepad++.
Most common option found online is using builtin option Run. Then you have two options:
Run python file in console (in Windows it is Command Prompt) with code something like this (links: ):
C:\Path\to\Python\python.exe "$(FULL_CURRENT_PATH)"
(If your console window immediately closes after running then you can add cmd /k to your code. Links: ) This works fine, and you can even run files in interactive mode by adding -i to your code (links: ).
Run python program in IDLE with code something like this (links: , in these links C:\Path\to\Python\Lib\idlelib\idle.py is used, but I am using C:\Path\to\Python\Lib\idlelib\idle.bat instead, because idle.bat sets the right current working directory automatically):
C:\Path\to\Python\Lib\idlelib\idle.bat "$(FULL_CURRENT_PATH)"
Actually, this doesn't run your program in IDLE Shell, but instead it opens your python file in IDLE Editor and then you need to click Run Module (or click F5) to run the program. So it opens your file in IDLE Editor and then you need run it from there, which defeats the purpose of running python files from Notepad++.
But, searching online, I found option which adds '-r' to your code (links: ):
C:\Path\to\Python\Lib\idlelib\idle.bat -r "$(FULL_CURRENT_PATH)"
This will run your python program in IDLE Shell and because it is in IDLE it is by default in interactive mode.
Problem with running your python files via builtin Run option is that
each time you run your python file, you open new console or IDLE window and lose all output from previous executions. This might not be important to some, but when I started to program in python, I used Python IDLE, so I got used to running python file multiple times in same IDLE Shell window. Also problem with running python programs from Notepad++ is that you need to manually save your file and then click Run (or press F5). To solve these problems (AFAIK*) you need to use Notepad++ Plugins. The best plugin for running python files from Notepad++ is
NppExec. (I also tried PyNPP and Python Script. PyNPP runs python files in console, it works, but you can do that without plugin via builtin Run option and Python Script is used for running scripts that interact with Notepad++ so you can't run your python files.) To run your python file with NppExec plugin you need to go to Plugins -> NppExec -> Execute and then type in something like this (links: ):
C:\Path\to\Python\python.exe "$(FULL_CURRENT_PATH)"
With NppExec you can also save your python file before run with npp_save command, set working directory with cd "$(CURRENT_DIRECTORY)" command or run python program in interactive mode with -i command. I found many links ( ) online that mention these options, but best use of NppExec to run python programs I found at NppExec's Manual which has chapter 4.6.4. Running Python & wxPython with this code:
npp_console - // disable any output to the Console
npp_save // save current file (a .py file is expected)
cd "$(CURRENT_DIRECTORY)" // use the current file's dir
set local #exit_cmd_silent = exit() // allows to exit Python automatically
set local PATH_0 = $(SYS.PATH) // current value of %PATH%
env_set PATH = $(SYS.PATH);C:\Python27 // use Python 2.7
npp_setfocus con // set the focus to the Console
npp_console + // enable output to the Console
python -i -u "$(FILE_NAME)" // run Python's program interactively
npp_console - // disable any output to the Console
env_set PATH = $(PATH_0) // restore the value of %PATH%
npp_console + // enable output to the Console
All you need to do is copy this code and change your python directory if you use some other python version (e.g.* I am using python 3.4 so my directory is C:\Python34). This code works perfectly, but there is one line I added to this code so I can run python program multiple times without loosing previous output:
npe_console m- a+
a+ is to enable the "append" mode which keeps the previous Console's text and does not clear it.
m- turns off console's internal messages (those are in green color)
The final code that I use in NppExec's Execute window is:
npp_console - // disable any output to the Console
npp_save // save current file (a .py file is expected)
cd "$(CURRENT_DIRECTORY)" // use the current file's dir
set local #exit_cmd_silent = exit() // allows to exit Python automatically
set local PATH_0 = $(SYS.PATH) // current value of %PATH%
env_set PATH = $(SYS.PATH);C:\Python34 // use Python 3.4
npp_setfocus con // set the focus to the Console
npe_console m- a+
npp_console + // enable output to the Console
python -i -u "$(FILE_NAME)" // run Python's program interactively
npp_console - // disable any output to the Console
env_set PATH = $(PATH_0) // restore the value of %PATH%
npp_console + // enable output to the Console
You can save your NppExec's code, and assign a shortcut key to this NppExec's script. (You need to open Advanced options of NppExec's plugin, select your script in the Associated script drop-down list, press the Add/Modify, restart Notepad++ , go to Notepad++'es Settings -> Shortcut Mapper -> Plugin commands, select your script, click Modify and assign a shortcut key. I wanted to put F5 as my shortcut key, to do that you need to change shortcut key for builtin option Run to something else first.) Links to chapters from NppExec's Manual that explain how to save you NppExec's code and assign a shortcut key: NppExec's "Execute...", NppExec's script.
P.S.*: With NppExec plugin you can add Highlight Filters (found in Console Output Filters...) that highlight certain lines. I use it to highlight error lines in red, to do that you need to add Highlight masks: *File "%FILE%", line %LINE%, in <*> and Traceback (most recent call last): like this.
First install Python from https://www.python.org/downloads/
Run the installer
** IMPORTANT **
Be sure you check both :
Install launcher for all users
Add Python 3.6 to path
Click install now and finish the installation.
Open notepad++ and install plugin PyNPP from Plugin Manager. I'm using N++ 6.9.2
Save a new file as new.py
Type in N++
import sys
print("Hello from Python!")
print("Your Python version is: " + sys.version)
Press Alt+Shift+F5
Simple as that.
On the menu go to: "Run" --> "Run..." (or just press F5).
For Python 2 type in:
py -2 -i "$(FULL_CURRENT_PATH)"
For Python 3 type in:
py -3 -i "$(FULL_CURRENT_PATH)"
References:
To understand the py command better:
py -h
Another helpful link to understand the py command: How do I run python 2 and 3 in windows 7?
Thanks to Reshure for his answer that got me on the right track to figure this out.
All the answers for the Run->Run menu option go with the "/K" switch of cmd, so the terminal stays open, or "-i" for python.exe so python forces interactive mode - both to preserve the output for you to observe.
Yet in cmd /k you have to type exit to close it, in the python -i - quit(). If that is too much typing for your liking (for me it sure is :), the Run command to use is
cmd /k C:\Python27\python.exe "$(FULL_CURRENT_PATH)" & pause & exit
C:\Python27\python.exe - obviously the full path to your python install (or just python if you want to go with the first executable in your user's path).
& is unconditional execution of the next command in Windows - unconditional as it runs regardless of the RC of the previous command (&& is "and" - run only if the previous completed successfully, || - is "or").
pause - prints "Press any key to continue . . ." and waits for any key (that output can be suppressed if need).
exit - well, types the exit for you :)
So at the end, cmd runs python.exe which executes the current file and keeps the window opened, pause waits for you to press any key, and exit finally close the window once you press that any key.
None of the previously proposed solutions worked for me. Slight modification needed.
After hitting F5 in Notepad++, type:
cmd /k "C:\Python27\python.exe $(FULL_CURRENT_PATH)"
The command prompt stays open so you can see the output of your script.
I use the NPP_Exec plugin (Found in the plugins manager). Once that is installed, open the console window (ctrl+~) and type:
cmd
This will launch command prompt. Then type:
C:\Program Files\Notepad++> **python "$(FULL_CURRENT_PATH)"**
to execute the current file you are working with.
I wish people here would post steps instead of just overall concepts. I eventually got the cmd /k version to work.
The step-by-step instructions are:
In NPP, click on the menu item: Run
In the submenu, click on: Run
In the Run... dialog box, in the field The Program to Run, delete any existing text and type in: cmd /K "$(FULL_CURRENT_PATH)"
The /K is optional, it keeps open the window created when the script runs, if you want that.
Hit the Save... button.
The Shortcut dialogue box opens; fill it out if you want a keyboard shortcut (there's a note saying "This will disable the accelerator" whatever that is, so maybe you don't want to use the keyboard shortcut, though it probably doesn't hurt to assign one when you don't need an accelerator).
Somewhere I think you have to tell NPP where the Python.exe file is (e.g., for me: C:\Python33\python.exe). I don't know where or how you do this, but in trying various things here, I was able to do that--I don't recall which attempt did the trick.
My problem was, as it was mentioned by copeland3300, that my script is running from notepad++ folder, so it was impossible to locate other project files, such as database file, modules etc. I solved the problem using standard notepad++ "Run" command (F5) and typing in:
cmd /k "cd /d "$(CURRENT_DIRECTORY)" & python "$(FULL_CURRENT_PATH)""
Python WAS in my PATH. Cmd window stayed open after script finished.
No answer here, or plugin i found provided what i wanted. A minimalist method to launch my python code i wrote on Notepad++ with the press of a shortcut, with preferably no plugins.
I have Python 3.6 (64-bit), for Windows 8.1 x86_64 and Notepad++ 32bit. After you write your Python script in Notepad++ and save it, Hit F5 for Run. Then write:
"C:\Path\to\Python\python.exe" -i "$(FULL_CURRENT_PATH)"
and hit the Run button. The i flag forces the terminal to stay still after code execution has terminated, for you to inspect it. This command will launch the script in a cmd terminal and the terminal will still lie there, until you close it by typing exit().
You can save this to a shortcut for convenience (mine is CTRL + SHIFT + P).
I would like to avoid using full python directory path in the Notepad++ macro. I tried other solutions given in this page, they failed.
The one working on my PC is:
In Notepad++, press F5.
Copy/paste this:
cmd /k cd /d "$(CURRENT_DIRECTORY)" && py -3 -i "$(FULL_CURRENT_PATH)"
Enter.
There is one issue that I didn't see resolved in the above solutions. Python sets the current working directory to wherever you start the interpreter from. If you need the current working directory to be the same directory as where you saved the file on, then you could hit F5 and type this:
cmd /K cd "$(CURRENT_DIRECTORY)"&C:\Users\username\Python36-32\python.exe -i "$(FULL_CURRENT_PATH)"
Except you would replace C:\Users\username\Python36-32\python.exe with whatever the path to the python interpreter is on your machine.
Basically you're starting up command line, changing the directory to the directory containing the .py file you're trying to run, and then running it. You can string together as many command line commands as you like with the '&' symbol.
Extending Reshure's answer
Open Run → Run... from the menubar in Notepad++ (shortcut: F5)
In the given space, enter:
"$(FULL_CURRENT_PATH)" -1
Click Run
ta da!
I started using Notepad++ for Python very recently and I found this method very easy. Once you are ready to run the code,right-click on the tab of your code in Notepad++ window and select "Open Containing Folder in cmd". This will open the Command Prompt into the folder where the current program is stored. All you need to do now is to execute:
python
This was done on Notepad++ (Build 10 Jan 2015).
I can't add the screenshots, so here's a blog post with the screenshots - http://coder-decoder.blogspot.in/2015/03/using-notepad-in-windows-to-edit-and.html
In Notepad++, go to Run → Run..., select the path and idle.py file of your Python installation:
C:\Python27\Lib\idlelib\idle.py
add a space and this:
"$(FULL_CURRENT_PATH)"
and here you are!
Video demostration:
https://www.youtube.com/watch?v=sJipYE1JT38
In case someone is interested in passing arguments to cmd.exe and running the python script in a Virtual Environment, these are the steps I used:
On the Notepad++ -> Run -> Run , I enter the following:
cmd /C cd $(CURRENT_DIRECTORY) && "PATH_to_.bat_file" $(FULL_CURRENT_PATH)
Here I cd into the directory in which the .py file exists, so that it enables accessing any other relevant files which are in the directory of the .py code.
And on the .bat file I have:
#ECHO off
set File_Path=%1
call activate Venv
python %File_Path%
pause
You can run your script via cmd and be in script-directory:
cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)
I usually prefer running my python scripts on python native IDLE interactive shell rather than from command prompt or something like that. I've tried it, and it works for me. Just open "Run > Run...", then paste the code below
python -m idlelib.idle -r "$(FULL_CURRENT_PATH)"
After that, you can save it with your hotkey.
You must ensure your desired python is added and registered in your environment variables.
In addition to the many other answers about using a system-wide installation of a Python interpreter, there is also a Python plugin for Notepad++. I've used it many times, and it works quite well. You can even assign shortcut keys to run specific Python scripts.
It is open-source and gratis (free of charge).
The source code and plugin are located here:
https://github.com/bruderstein/PythonScript/

Categories

Resources