ipython 安装新模块

新手上路,请多包涵

我习惯了安装包的 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

我从 StackOverflow 上的另一个问题( 此处)阅读了一些帮助,这表明我从 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 指向已安装代码的位置?

原文由 cantdutchthis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 650
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 中。

原文由 cantdutchthis 发布,翻译遵循 CC BY-SA 4.0 许可协议

这就是我所做的使它起作用的方法;通过命令行打开 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 在哪里寻找可以导入的模块。所以我手动下载了 requests 库,将它添加到同一个根目录,这样就存在以下目录:

 /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 列表中。

原文由 cantdutchthis 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题