30

私は、それ自体がリクエストモジュールをインポートするモジュールSEAPI.pyを使用する崇高なテキスト2プラグインを書いています。

sublime text 2は独自の埋め込みPythonインタープリターを使用しているため、ubuntuマシンにインストールされているrequestsモジュールが表示されません(次のエラーが発生します:ImportError:No module namesedrequests)。

これまでに見つけた最善の解決策は、「requests」モジュール(ファイルのディレクトリ全体)を/usr/lib/python2.7/dist-packages/requestsから崇高なテキストパッケージディレクトリのプラグインディレクトリにコピーすることでした。しかしその後、「urllib3」モジュールが見つからないと表示されます。

すべてのファイルをプラグインディレクトリにコピーする必要がないように、リクエストモジュールをインポートするより良い方法はありますか?

私が使用している現在のコードは次のとおりです。

MyPlugin.py

import sublime
import sublime_plugin
import SEAPI
...

SEAPI.py

import requests
try:
    import simplejson as json
except:
    import json
from time import time, sleep
...

編集: 選択した答えは正しく、私の主な質問を修正しますが、埋め込まれた崇高なテキスト2インタープリターで現在のバージョンの「リクエスト」を使用すると別の問題が存在します。ST2のPythonには、通常の2.7 pythonに存在するさまざまなモジュール(「fileio」など)がありません。

ここから「Requests」モジュールを使用して解決しました: https ://github.com/bgreenlee/sublime-github

そして、「urllib3/response.py」ファイルを次のように編集する必要がありました。

try:
    from cStringIO import StringIO as BytesIO
except ImportError:
    pass  # _fileio doesn't seem to exist in ST's python in Linux, but we don't need it
4

2 に答える 2

22

完全なリクエスト配布をPythonパッケージにバンドルしてから、Python sys.path(モジュールを検索する場所)を変更して、フォルダーを含むrequestsフォルダーを指すようにする必要があります。

  • PyPiからRequestsライブラリをダウンロードし、プラグインフォルダーの下に手動で抽出します

  • プラグインにリクエストをインポートする前に、corrcetフォルダーをsys.pathに追加して、リクエストのインポートを見つけることができるフォルダーを指定します。

(テストされていない)コードは次のようになります。

  import sys 
  import os

  # request-dists is the folder in our plugin
  sys.path.append(os.path.join(os.path.dirname(__file__), "requests-dist"))

  import requests

これは、またはrequests setup.pyを使用してモジュールをインストールするときに、がハッキングを行わないことも前提としています。easy_installpip

requestsリクエストが互換性のある方法で配布されると仮定すると、PythonはZIPファイルからのインポートをサポートしているため、zipを直接インポートすることもできます。例(高度):

https://github.com/miohtama/ztanesh/blob/master/zsh-scripts/python-lib/zipimporter.py

sys.pathトリックの詳細(2004)

http://www.johnny-lin.com/cdat_tips/tips_pylang/path.html

于 2013-03-03T00:08:17.980 に答える
5

ミッコの答えは良いですが、私は少し簡単な方法を見つけたかもしれません:

import MyAwesomePlugin.requests

もちろん、「MyAwesomePlugin」はプラグインの名前です。

于 2013-08-26T11:02:07.103 に答える