Как включить сторонние пакеты Python в плагины Sublime Text 2


Я пишу плагин sublime text 2, который использует модуль SEAPI.py , который сам по себе импортирует модульзапросов .

Поскольку sublime text 2 использует собственный встроенный интерпретатор python, он не видит модуль requests, установленный на моей машине ubuntu (я получаю следующую ошибку: ImportError: нет модуля с именем requests).

Лучшим решением, которое я смог найти до сих пор, было скопировать модуль "запросы" (весь каталог файлов) из /usr / lib/python2. 7 / dist-packages / requests into my plugin directory in the sublime text packages dir. Но после этого он говорит, что не может найти модуль '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
...

Редактировать: Выбранный ответ верен и исправляет мой основной вопрос, но другая проблема существует с использованием текущей версии "запросов"со встроенным интерпретатором sublime text 2. В python ST2 отсутствуют различные модули, которые существуют в обычном 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
2 28

2 ответа:

Вам нужно связать полный дистрибутив запросов с вашим пакетом Python, а затем изменить Python sys.path (где он ищет модули), чтобы указать на папку, содержащую папку requests.

  • Загрузите библиотеку запросов из PyPi и распакуйте ее вручную в папке плагина

  • Перед импортом запросов в ваш плагин добавьте папку corrcet в sys.путь к папке, в которой можно найти запросы импорта

В (непроверенный) код должен выглядеть примерно так:

  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_install или pip.

Вы также можете импортировать requests zip напрямую, поскольку Python поддерживает импорт из ZIP-файлов, предполагая, что запросы распространяются совместимым образом. Пример (расширенный):

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

Подробнее о sys.путь трюк (2004)

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

Ответ Микко хорош, но я, возможно, нашел немного более простой способ:

import MyAwesomePlugin.requests

"MyAwesomePlugin" - это название вашего плагина, конечно.