web-dev-qa-db-ja.com

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の別の質問( 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にポイントする必要がありますか?

14
cantdutchthis

実際にははるかにエレガントな解決策があります。 pipがインストールされると、python内で次のようなこともできます:

import pip

def install(package):
   pip.main(['install', package])

install('requests') 

簡単です。 virtualenvにログインすると、現在のセッションで必要なものが手元にあることを確認できます。

編集する

もう1つの方法は、%%bashマジックを使用することです。

%%bash
pip install requests

edit2

標準出力が必要な場合は、感嘆符を使用することもできます。

! pip install requests
34
cantdutchthis

これが私がそれを機能させるためにしたことです。コマンドラインから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リストへの新しいパスを自動的に更新することがわかりました。

7
cantdutchthis

インストールされた新しいパッケージがターミナルにインポートされてもipythonノートブックにはインポートされない場合、ライブラリに2つのバージョンのpythonがインストールされている可能性があります。これにより、個別のサイトパッケージがあります。ターミナルとipythonノートブックでパッケージがインポートされるディレクトリ。これが当てはまるかどうかを確認するには、ターミナルで次を使用します:

import sys
sys.path

これは、pythonモジュールがpythonでターミナルで使用している場所にある場所を示しています。今、ipythonノートブックで次のように使用します。

import sys
sys.path

これは、pythonモジュールがpythonでターミナルで使用している場合に、モジュールがどこにあるかを示しています。

2つのパスが異なる場合、Pythonの2つの異なるインストールを使用していることがわかります。この問題を解決するには、インストール済みのパッケージをターミナルpythonのsite-packagesディレクトリからipythonのsite-packagesディレクトリにコピーします。

0
Dhananjay Mehta

Patoolをインストールしようとしたときにも同じ問題が発生しましたが、複数のインタープリターがインストールされていることが原因であることがわかりました。ipythonから実行したところ、問題なく動作しました。

0
Sinux1