I'm running Python2.7 on windows 10 doing env and most pkg management with Anaconda. After upgrading a number of packages, my ipython console now fails to start in any IDE or at the console. When I attempt to run it at the console I get this error:
Traceback (most recent call last):
File "C:\Anaconda3\Scripts\ipython-script.py", line 3, in <module>
import IPython
File "C:\Anaconda3\lib\site-packages\IPython\__init__.py", line 48, in <module>
from .core.application import Application
File "C:\Anaconda3\lib\site-packages\IPython\core\application.py", line 24, in <module>
from IPython.core import release, crashhandler
File "C:\Anaconda3\lib\site-packages\IPython\core\crashhandler.py", line 28, in <module>
from IPython.core import ultratb
File "C:\Anaconda3\lib\site-packages\IPython\core\ultratb.py", line 121, in <module>
from IPython.utils.terminal import get_terminal_size
File "C:\Anaconda3\lib\site-packages\IPython\utils\terminal.py", line 27, in <module>
import backports.shutil_get_terminal_size
ImportError: No module named backports.shutil_get_terminal_size
The first thing I tried to do was:
pip install --upgrade backports.shutil_get_terminal_size
output:
Requirement already up-to-date: backports.shutil_get_terminal_size in c:\anaconda3\lib\site-packages
I've uninstalled and reinstalled ipython with both
conda uninstall ipython
conda install ipython
and
pip uninstall ipython
pip install ipython
Still won't work. Help please!
Try this
conda config --add channels conda-forge
conda install backports.shutil_get_terminal_size
According to this thread this is due to a bug in conda which leads to a conflict with pip installs and can be solved with a force re-install. For the thread author, $ conda install --force ipython
solved the issue, for me it was $ conda install --force backports
.
I am on CentOS 7, and I needed to change my terminal.py as shown below.
On the import statements I messed around with the prefixes and got it to work -
import os
import sys
import warnings
try:
from backports import get_terminal_size as _get_terminal_size
except ImportError:
# use backport on Python 2
from shutil_backports import get_terminal_size as _get_terminal_size
The only thing which worked for me was to download the tarball from pypi and run python setup.py install
It worked like a charm
Virtualenv can prove very useful in a case like this, and even more specifically, a virtualenv with no global site packages allowed. Rule out many causes just by doing a clean install in an isolated virtualenv.
In my experience IPython and its dependencies really want to be in the same site. If you have the backports package installed globally but IPython installed in the user roaming site, you might expect runtime import errors such as the ones described in the OP.
I realize that sometimes we need global site packages but the penalty is a more complicated site
and dependency handling within pip/setuptools. Depending on several python configuration and windows environment conditions, your packages may be spread across global sites, user (roaming) sites, and virtualenv sites.
Rule out weird site
problems by building and installing clean in a virtualenv with no access to global or user packages. The virtualenvwrapper and add2virtualenv
command can be used to cleanly allow certain global packages.
In case this helps anybody, the problem for me seemed to be having installed configparser
with pip locally, and then trying to install everything else using conda. To fix:
pip uninstall configparser
# You may need to install configparser now using conda...
ipython
# No ImportError now.
It seems like the configparser install puts a backports package in the import namespace, which took precedence over the conda installed package.