108

When I run !pip install geocoder in Jupyter Notebook I get the same output as running pip install geocoder in the terminal but the geocoder package is not available when I try to import it.

I'm using Ubuntu 14.04, Anaconda 4.0.0 and pip 8.1.2

Installing geocoder:

!pip install geocoder

The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting geocoder
  Downloading geocoder-1.15.1-py2.py3-none-any.whl (195kB)
    100% |████████████████████████████████| 204kB 3.2MB/s 
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local/lib/python2.7/dist-packages (from geocoder)
Requirement already satisfied (use --upgrade to upgrade): ratelim in /usr/local/lib/python2.7/dist-packages (from geocoder)
Requirement already satisfied (use --upgrade to upgrade): six in /usr/local/lib/python2.7/dist-packages (from geocoder)
Requirement already satisfied (use --upgrade to upgrade): click in /usr/local/lib/python2.7/dist-packages (from geocoder)
Requirement already satisfied (use --upgrade to upgrade): decorator in /usr/local/lib/python2.7/dist-packages/decorator-4.0.10-py2.7.egg (from ratelim->geocoder)
Installing collected packages: geocoder
Successfully installed geocoder-1.15.1

Then try to import it:

import geocoder

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-4-603a981d39f2> in <module>()
----> 1 import geocoder

ImportError: No module named geocoder

I also tried shutting down the notebook and restarting it without any luck.

Edit: I found that using the terminal installs the geocoder package in /home/ubuntu/.local/lib/python2.7/site-packages and using a notebook installs it in /usr/local/lib/python2.7/dist-packages which is not in the path. sys.path.append('/usr/local/lib/python2.7/dist-packages') solves the problem for the current session.

So how can I permanently modify the path or tell pip where to install geocoder?

Chris Tang
  • 567
  • 7
  • 18
Mikhail Janowski
  • 4,209
  • 7
  • 28
  • 40

12 Answers12

135

In IPython (jupyter) 7.3 and later, there is a magic %pip and %conda command that will install into the current kernel (rather than into the instance of Python that launched the notebook).

%pip install geocoder

In earlier versions, you need to use sys to fix the problem like in the answer by FlyingZebra1

import sys
!{sys.executable} -m pip install geocoder
Eponymous
  • 6,143
  • 4
  • 43
  • 43
  • 5
    Indeed a good solution. Does "install in current kernel" mean that package installed through this method will be available to use while the kernel is running. When it is stopped and run the next time, install command has to be executed again? Correct? – Meet Mar 18 '21 at 12:45
  • How we can create other kernal di Jupyter Notebook? Is a kernel in Jupyter Notebook actually the same as environment in Python? – dudung Feb 02 '23 at 22:46
89
! pip install --user <package>

The ! tells the notebook to execute the cell as a shell command.

nbro
  • 15,395
  • 32
  • 113
  • 196
Ajinkya
  • 1,071
  • 7
  • 3
  • 2
    Question itself mentions use of '!', as per my understanding initially the question was asked to find out why geocoder module is not working even after successful installation. – amandeep1991 Oct 18 '18 at 15:12
  • 12
    This doesn't always work, because sometimes the `pip` that's called with a shell command is not actually the installer for the python version in your virtualenv. Using `%pip` magic instead of `!pip` (shell command) is the way to go, as in the answer by @eponymous . – waterproof Sep 03 '19 at 19:35
40
%pip install fedex    #fedex = package name

in 2019.

In older versions of conda:

import sys
!{sys.executable} -m pip install fedex     #fedex = package name

*note - you do need to import sys

FlyingZebra1
  • 1,285
  • 1
  • 18
  • 28
4

The problem is that pyarrow is saved by pip into dist-packages (in your case /usr/local/lib/python2.7/dist-packages). This path is skipped by Jupyter so pip won't help.

As a solution I suggest adding in the first block

import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')

or whatever is path or python version. In case of Python 3.5 this is

import sys
sys.path.append("/usr/local/lib/python3.5/dist-packages")
Dawid Laszuk
  • 1,773
  • 21
  • 39
4

This worked for me in Jupyter nOtebook /Mac Platform /Python 3 :

import sys
!{sys.executable} -m pip install -r requirements.txt
Fredrik Widerberg
  • 3,068
  • 10
  • 30
  • 42
3

In jupyter notebook under python 3.6, the following line works:

!source activate py36;pip install <...>
The Hungry Dictator
  • 3,444
  • 5
  • 37
  • 53
robinary
  • 39
  • 1
0

Try using some shell magic: %%sh %%sh pip install geocoder let me know if it works, thanks

casper
  • 19
  • 1
0
conda create -n py27 python=2.7 ipykernel

source activate py27

pip install geocoder
Nissa
  • 4,636
  • 8
  • 29
  • 37
cococ0j
  • 11
  • 3
0

Alternative option : you can also create a bash cell in jupyter using bash kernel and then pip install geocoder. That should work

Mattony
  • 104
  • 3
0

I had the same problem.

I found these instructions that worked for me.

# Example of installing handcalcs directly from a notebook
!pip install --upgrade-strategy only-if-needed handcalcs

ref: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

Issues may arise when using pip and conda together. When combining conda and pip, it is best to use an isolated conda environment. Only after conda has been used to install as many packages as possible should pip be used to install any remaining software. If modifications are needed to the environment, it is best to create a new environment rather than running conda after pip. When appropriate, conda and pip requirements should be stored in text files.

We recommend that you:

Use pip only after conda

Install as many requirements as possible with conda then use pip.

Pip should be run with --upgrade-strategy only-if-needed (the default).

Do not use pip with the --user argument, avoid all users installs.

0

You should never start pip with an exclamation point. There's no guarantee that it'll use the python from your running kernel.

Nowadays you can just run pip or conda without any signal:

pip install pandas

Since automagic is the now the default, Jupyter will automatically call %pip and use the correct pip for you kernel.

Remember that it's always better to have your dependencies in an external file called requirements.txt and fix their version number. Than you can just run in your first cell:

pip install -r requirements.txt
neves
  • 33,186
  • 27
  • 159
  • 192
-3

Using pip2 worked for me:

!pip2 install geocoder
...
import geocoder
g = geocoder.google('Mountain View, CA')
g.latlng
[37.3860517, -122.0838511]
elwarren
  • 327
  • 4
  • 8