在Jupyter Notebook中安装pip包无法正常工作

112

当我在Jupyter Notebook中运行!pip install geocoder时,输出结果与在终端中运行pip install geocoder的结果相同,但是当我尝试导入它时,geocoder包不可用。

我正在使用Ubuntu 14.04,Anaconda 4.0.0和pip 8.1.2。

安装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

然后尝试进行导入:

import geocoder

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

ImportError: No module named geocoder

我也试过关闭笔记本电脑并重新启动它,但没有成功。

编辑: 我发现使用终端安装geocoder包会将其安装在/home/ubuntu/.local/lib/python2.7/site-packages中,而使用笔记本电脑安装则会将其安装在/usr/local/lib/python2.7/dist-packages中,而此路径不在路径中。sys.path.append('/usr/local/lib/python2.7/dist-packages')解决了当前会话中的问题。

那么,我该如何永久修改路径或告诉pip在哪里安装geocoder呢?


2
这些是Python 2的软件包。你的笔记本电脑使用的是Python 2内核还是Python 3内核? - nitind
1
它正在使用Python 2。 - Mikhail Janowski
1
PYTHONPATH - Konstantin
请检查位于C:\Users<username>.jupyter\jupyter_notebook_config的Jupyter笔记本配置。 - amandeep1991
你尝试过这个吗?https://stackoverflow.com/questions/45695158/python-2-7-cannot-import-geocoder-library - Murtaza Haji
12个回答

141
在IPython(jupyter)7.3及更高版本中,有一个魔术命令%pip和%conda,它会安装到当前的内核中(而不是启动笔记本的Python实例)。
%pip install geocoder

在早期版本中,您需要使用sys来解决问题,例如FlyingZebra1的回答中所述

import sys
!{sys.executable} -m pip install geocoder

7
确实是个不错的解决方案。“在当前内核中安装”是指通过这种方法安装的包将在内核运行时可供使用。当它停止并重新运行时,需要再次执行安装命令,是吗?正确的吗? - Meet
我们如何在 Jupyter Notebook 中创建其他内核?Jupyter Notebook 中的内核实际上与 Python 中的环境相同吗? - dudung

90
! pip install --user <package>

!表示让笔记本将该单元格作为shell命令执行。


2
问题本身提到了使用“!”符号,据我理解,最初的问题是要找出为什么即使成功安装了地理编码器模块,它仍然无法正常工作。 - amandeep1991
14
这种方法并不总是有效,因为有时候在 shell 命令中调用的 pip 实际上并不是你的虚拟环境中 Python 版本的安装程序。使用 %pip 魔法命令而不是 !pip(shell 命令)是正确的方法,就像 @eponymous 的回答中所述。 - waterproof

42
%pip install fedex    #fedex = package name

在2019年。

在旧版本的conda中:

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

*注意 - 您确实需要导入sys


4
这对我在 Jupyter Notebook /Mac 平台 /Python 3 上的操作有效:
import sys
!{sys.executable} -m pip install -r requirements.txt

4
问题在于pyarrowpip保存到dist-packages中(在您的情况下是/usr/local/lib/python2.7/dist-packages)。这个路径被Jupyter跳过,所以pip将无法帮助解决问题。
作为解决方案,我建议在第一个块中添加以下代码。
import sys
sys.path.append('/usr/local/lib/python2.7/dist-packages')

无论是路径还是Python版本,都需要进行相应的更改。在Python 3.5中,这个位置是

import sys
sys.path.append("/usr/local/lib/python3.5/dist-packages")

3
在Python 3.6下的Jupyter Notebook中,以下代码行可用:
!source activate py36;pip install <...>

0

替代方案:您还可以在Jupyter中使用bash内核创建一个bash单元格,然后pip install geocoder。那应该可以工作。


0

尝试使用一些shell魔法:%%sh %%sh pip install geocoder 如果可以,请告诉我,谢谢


1
这对我没有起作用。根据我在SageMaker上的经验,看起来它是一个不同的Python环境。 - Victor 'Chris' Cabral

0

我有相同的问题。

我找到了这些指令,对我有用。

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

参考文献: https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html

当同时使用pip和conda时可能会出现问题。在结合使用conda和pip时,最好使用隔离的conda环境。只有在使用conda安装尽可能多的软件包后,才应该使用pip安装任何剩余的软件。如果需要修改环境,则最好创建一个新环境,而不是在pip之后运行conda。在适当的情况下,conda和pip的要求应存储在文本文件中。

我们建议您:

只有在conda之后使用pip

尽可能使用conda安装所需的软件包,然后再使用pip。

Pip应该使用--upgrade-strategy only-if-needed(默认值)运行。

不要使用pip与--user参数一起使用,避免所有用户安装。


0

你绝对不应该在 pip 命令前加上感叹号。这样做不能保证使用的是当前运行内核中的 Python。

现在,你可以直接运行 pipconda 命令而无需任何信号:

pip install pandas

由于自动化现在是默认设置,Jupyter将自动调用 %pip 并为您的内核使用正确的 pip。

请记住,最好将依赖项放在一个名为 requirements.txt 的外部文件中,并修复它们的版本号。然后,您只需在第一个单元格中运行:

pip install -r requirements.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接