ipython 安装新模块
Posted
技术标签:
【中文标题】ipython 安装新模块【英文标题】:ipython install new modules 【发布时间】:2013-04-05 03:25:18 【问题描述】:我已经习惯了安装包的 R 功能,我正在尝试对 ipython
做同样的事情。有时以下方法有效,但有时又无效,我想最终找出为什么它只在一半时间内有效。
通常要安装一个模块(例如requests
模块),我会在打开一个新终端后键入以下内容:
$ sudo pip install requests
Password: *******
随后会出现一条消息,指示安装成功或已安装。
Requirement already satisfied (use --upgrade to upgrade):
requests in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Cleaning up...
这表明可以访问代码。事实上,如果我现在从终端运行 python,它会显示一个很好的响应,没有任何错误。
$ python
ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:20:15)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>>
我现在通过 Alfred 打开PyLab
,它给了我一个错误。
Welcome to pylab, a matplotlib-based Python environment [backend: WXAgg].
For more information, type 'help(pylab)'.
In [1]: import requests
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
/Users/vincentwarmerdam/<ipython-input-1-686486c241c8> in <module>()
----> 1 import requests
ImportError: No module named requests
我从 *** (here) 上的另一个问题中阅读了一些帮助,该问题建议我从 ipython
shell 安装模块。这给出了一个更加莫名其妙的反应:
In [2]: !pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Cleaning up...
In [3]: import requests
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
/Users/vincentwarmerdam/<ipython-input-3-686486c241c8> in <module>()
----> 1 import requests
ImportError: No module named requests
这对我来说似乎很奇怪。系统上是否安装了多个版本的python?我怎么能检查这个?我需要将ipython
指向安装代码的位置吗?
【问题讨论】:
我不知道 Alfred 是什么,但是如果你只是尝试在没有 pylab/alfred 的 ipython 会话中导入请求会发生什么? Alfred 是一个快捷应用。我尝试运行 ipython 而不是 pylab。我得到以下信息:$ ipython
In [1]: import request
ImportError: No module named request
似乎是同样的错误。
在 iPython 中尝试import sys ; print sys.path
看看是否包含安装目录。
当您使用纯 Python 和 IPython 时,要检查的一件事是 sys.executable
的值,或者是 head -n 1 $(which ipython)
和 head -n 1 $(which pip)
的值,以确保它们使用相同的 Python。
$ head -n 1 $(which ipython)
给出#!/Library/Frameworks/Python.framework/Versions/7.3/Resources/Python.app/Contents/MacOS/Python
和$ head -n 1 $(which pip)
给出#!/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
所以如果我理解正确,我需要将'pip-folder' 包含到'ipython-folder' 中?我仍然不明白为什么 ipython 中的pip install requests
告诉我库已安装而文件夹不正确。
【参考方案1】:
这就是我所做的让它工作的事情;通过命令行打开 iypthon 并输入
import sys
sys.path
这显示了其他 python 模块所在的文件夹列表。对我来说这是:
['',
'/Library/Frameworks/Python.framework/Versions/7.3/bin',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/pandas-0.10.0-py2.7-macosx-10.5-i386.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/googlemaps-1.0.2-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/oauth-1.0.1-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/oauth2-1.5.211-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/httplib2-0.7.7-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/selenium-2.28.0-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/jellyfish-0.2.0-py2.7-macosx-10.5-i386.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/python_yelp-0.1.1-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/pymongo-2.4.2_-py2.7-macosx-10.5-i386.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/lucene_querybuilder-0.1.6-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/html2text-3.200.3-py2.7.egg',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python27.zip',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-darwin',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/plat-mac/lib-scriptpackages',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-old',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-dynload',
'/Users/vincentwarmerdam/Library/Python/2.7/lib/python/site-packages',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/PIL',
'/Library/Python/2.7/site-packages',
'/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/IPython/extensions]
有了这些信息,我现在知道 ipython 在哪里寻找可以导入的模块。所以我手动下载了请求库,将其添加到相同的根目录中,这样就存在以下目录:
/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site-packages/requests
此文件夹包含属于请求的 python 模块。我现在唯一要做的就是确保 ipython 知道这个文件夹存在。这是通过更新 sys.path 完成的。
req_link = '/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/requests'
sys.path.append(req_link)
在此之后我不再收到错误。
import requests
只是工作。
同样在重启ipython后,我发现ipython会自动将新路径更新到sys.path
列表中。
【讨论】:
【参考方案2】:实际上有一个更优雅的解决方案。安装 pip 后,在 python 中您也可以执行以下操作:
import pip
def install(package):
pip.main(['install', package])
install('requests')
这更容易。登录到 virtualenv 后,您只需确保在您所在的会话中拥有所需的内容。简单。
编辑
另一种选择是使用%%bash
魔法。
%%bash
pip install requests
编辑2
如果您想要标准输出,甚至可以使用感叹号。
! pip install requests
编辑3
在ipython
内,这是最安全的安装方法。
%pip install requests
这可确保所有内容都安装在您的 ipython
所在的 virtualenv 中。
【讨论】:
据我所知。但是您可以从 easy_install 轻松安装 pip,也许您应该:***.com/questions/3220404/… 第一种方法的权限被拒绝,是否有可能以某种方式将其作为 sudo 运行? 小心。您可以运行sudo jupyter notebook
后跟这些命令,但这会导致 EVERY 命令以 sudo
特权运行,这可能是一个巨大的安全风险。
如果您可以从命令行确保您处于正确的环境中,您还可以使用更安全的sudo pip install <package>
。你只需要确保你有正确的python环境。【参考方案3】:
如果安装的新软件包是在终端上导入但未导入到 ipython 笔记本,那么很可能您的库中安装了两个版本的 python。因此,在终端和 ipython 笔记本上导入包的位置有单独的 site-packages 目录。检查是否是这种情况。 关于终端使用:
import sys
sys.path
这将为您在终端上使用的 python 显示 python 模块的位置。 现在,在 ipython notebook 中使用:
import sys
sys.path
这将为您在终端上使用的 python 显示 python 模块的位置。
现在,如果这两个路径不同,您就知道您使用的是两个不同的 python 安装。为了解决这个问题,将安装好的包从终端python的site-packages目录复制到ipython的site-packages目录。
【讨论】:
【参考方案4】:我在尝试安装 patool 时遇到了同样的问题,但事实证明这是由于安装了多个解释器,当我从 ipython 运行它时它工作正常。
【讨论】:
【参考方案5】:这解决了我在 Windows 上运行 Spyder 的问题。 如上答案,找到目录:
import sys
sys.path
这个网站: www.geeksforgeeks.org/how-to-install-pip-on-windows/
将我引至此:https://bootstrap.pypa.io/get-pip.py
使用 cmd 从要添加模块的 Python 版本的目录中运行该脚本。然后只需使用 pip 再次从命令行添加模块。 我什至没有费心将它添加到我的 PATH 中,但你可以这样做。
【讨论】:
以上是关于ipython 安装新模块的主要内容,如果未能解决你的问题,请参考以下文章