How to launch python Idle from a virtual environment (virtualenv)
Short answer
- Start the virtual environment
- Run
python -m idlelib.idle
From this answer.
Long answer
This answer assumes Python 3.
There are a few different virtual environment managers, each of which has a slightly different way of handling where python is installed and how it's run, as detailed in this answer.
This answer assumes the venv
module is used, and that it was installed following the docs.
Note: Some Linux distributions package the venv module into a separate package: Ubuntu and Debian
If the virtual environment was installed in a folder called my_project-venv
by running python -m venv my_project-venv
from inside the folder my_project
, the virtual environment will be inside a new folder created by the module:
my_project_dir
│
┝━ my_project-venv
On Windows, with Python 3.7.1, the files inside the my_project-venv
folder will probably look like this:
my_project-venv
│
┝━ Include
┝━ Lib
┝━ Scripts
│ ┝━ ...
│ ┝━ activate.bat
│ ┝━ Activate.ps1
│ ┝━ deactivate.bat
│ ┕━ ...
│
┕━ pyvenv.cfg
The virtual environment can be started by running either the activate.bat
or Activate.ps1
script, depending on whether cmd
or PowerShell is used:
:: Using cmd.exe
cd my_project_dir
.\my_project-venv\Scripts\activate.bat
# Using PowerShell
cd my_project_dir
.\my_project-venv\Scripts\Activate.ps1
Note: These scripts don't keep the shell open if run by double-clicking them. Start a shell, then run them by typing the above commands, with the folder names changed for your project
On most other operating systems, the virtual environment folder will look like this:
my_project-venv
│
┝━ bin
│ ┝━ ...
│ ┝━ activate
│ ┝━ activate.csh
│ ┝━ activate.fish
│ ┕━ ...
│
┝━ include
┝━ lib
┝━ lib64
┕━ pyvenv.cfg
Then, from any shell other than csh
or fish, activate the environment by:
# Most operating systems
cd my_project_dir
. my_project-venv/bin/activate
For csh
and fish
there are shell-specific scripts for activating the virtual environment (activate.csh
and activate.fish
, respectively) and they can be run like the activate
script.
Once the virtual environment has been activated on all operating systems, running the following will start IDLE with access to the packages installed into the virtual environment:
python -m idlelib.idle
On Windows, a Python script run from command line like this some_script.py
might be run by other Python interpreter than the one used when using python some_script.py
command (it depends on py
files association). If one wants to avoid this problem it's best to create a batch file idle.bat
with the content python -c "from idlelib.PyShell import main; main()"
and place it in the Scripts
folder in the virtualenv. Also, like others noted idle needs both tcl
and tk
folders to work. The simplest solution is to create symbolic links from virtualenv to the base Python installation like this
(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tcl8.5 "c:\Program Files\Python\2.7\tcl\tcl8.5"
symbolic link created for tcl8.5 <<===>> c:\Program Files\Python\2.7\tcl\tcl8.5
(2.7) c:\python\virtualenv\2.7\Lib>mklink /d tk8.5 "c:\Program Files\Python\2.7\tcl\tk8.5"
symbolic link created for tk8.5 <<===>> c:\Program Files\Python\2.7\tcl\tk8.5
Python 3.6 modernized and refactored idlelib
. This change included the renaming of several methods. Because of this, idlelib.PyShell
must now be accessed with idlelib.pyshell
. The following snippet is based on the accepted answer and should work for any Python version:
#!/usr/bin/env python
"""Simple script to run Idle from a venv in PyCharm."""
try:
# Import for Python pre 3.6
from idlelib.PyShell import main
except ModuleNotFoundError:
# Import for Python version 3.6 and later
from idlelib.pyshell import main
if __name__ == '__main__':
main()
For Python 3.6+, please see Paul Wicking's answer below.
In Python prior to 3.6, IDLE is essentially
from idlelib.PyShell import main
if __name__ == '__main__':
main()
So you can launch it yourself unless you built the virtualenv without default packages.