web-dev-qa-db-ja.com

サードパーティを含める方法PythonパッケージをSublime Text 2プラグインに含める

私はモジュール SEAPI.py を使用する崇高なテキスト2プラグインを作成しています---それ自体が requests module をインポートします。

崇高なテキスト2は独自の埋め込みpythonインタープリターを使用しているため、ubuntuマシンにインストールされているリクエストモジュールが表示されません(次のエラーが表示されます:ImportError:No named named requests)。

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

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

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

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'など))。

ここから「リクエスト」モジュールを使用して解決しました: 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
29
Alexey Zagalsky

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

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

  • プラグインでリクエストをインポートする前に、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

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

Pythonは、リクエストが互換性のある方法で分散されていると仮定して、Zipファイルからのインポートをサポートしているため、requests 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

22
Mikko Ohtamaa

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

import MyAwesomePlugin.requests

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

5
zakdances