2013-03-02 2 views
26

Я пишу возвышенный текстовый плагин 2, в котором используется модуль SEAPI.py, который сам по себе импортирует requests module.Как включить сторонние пакеты Python в плагины Sublime Text 2

Поскольку возвышенный текст 2 использует собственный встроенный интерпретатор python, он не видит модуль запросов, установленный на моем компьютере ubuntu (я получаю следующую ошибку: ImportError: No module named 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 
... 

Edit: Выбранный ответ является правильным и исправляет мой главный вопрос, но существует другая проблема с использованием текущей версии «Запросов» со встроенным sublime tex t 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 

ответ

21

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

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

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

The (непроверенные) код должен выглядеть как-то вроде этого:

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 

Это также предполагает, что requestssetup.py не делает никаких взломов при установке модуля с использованием easy_install или pip.

Вы также можете импортировать requests zip напрямую, поскольку Python поддерживает импорт из 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

+0

благодарит за быстрый ответ. Я пробовал это - sys.path.append (os.path.join (os.path.dirname (__ file__) ", /usr/lib/python2.7/dist-packages/")). Кажется, что и модуль «запросов», и модуль «urllib3», которые были установлены вместе с pip. Но теперь он имеет следующую ошибку: «Файл /usr/lib/python2.7/dist-packages/urllib3/filepost.py», строка 15, в из io import BytesIO Файл «. \ Io.py», line 63, in ImportError: Нет модуля с именем _fileio –

+0

Я отредактировал свой вопрос с решением проблемы. Еще раз спасибо Микко! –

+3

Информация в этом ответе ** невероятно важна ** для создания плагинов Sublime Text. Это действительно должно быть в официальных документах ... – zakdances

5

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

import MyAwesomePlugin.requests 

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

+1

Это, скорее всего, ломается, если библиотека запросов содержит абсолютный импорт. –

+0

Я не тестировал в этом сценарии, поэтому вы можете быть правы. Но будем надеяться, что «запросы» избегают этого, потому что абсолютные пути - это почти всегда плохая идея, если это абсолютно необходимо. – zakdances