2013-03-02 11 views
26

Piszę sublime text 2 plugin, który używa modułu SEAPI.py, który sam w sobie importuje requests module.Jak dołączyć pakiety Pythona innych firm do wtyczek Sublime Text 2

Ponieważ wysublimowany tekst 2 używa własnego wbudowanego interpretera pythonów, nie widzi modułu zapytań zainstalowanego na moim komputerze ubuntu (pojawia się następujący błąd: ImportError: Brak modułu o nazwie żądania).

Najlepszym rozwiązaniem, jakie mogłem znaleźć, było skopiowanie modułu "request" (cały katalog plików) z /usr/lib/python2.7/dist-packages/requests do mojego katalogu wtyczek w wysublimowanych pakietach tekstowych reż. Po tym jednak mówi, że nie może znaleźć modułu "urllib3".

Czy istnieje lepszy sposób na import modułu żądań, aby nie musiałem kopiować wszystkich plików do mojego katalogu wtyczek?

Obecny kod używam jest następująco:

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: Wybrana odpowiedź jest poprawna i naprawia moje główne pytanie, ale istnieje inny problem z używaniem bieżącej wersji "Żądań" z wbudowanym wysublimowanym tekstem t 2 tłumacza. Pythona ST2 brakuje różnych modułów, które istnieją w zwykłym pytonie 2.7 (takim jak "fileio").

mam rozwiązać go za pomocą modułu do 'żądań' stąd: https://github.com/bgreenlee/sublime-github

I musiałem edytować 'urllib3/response.py' plik do tego:

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 

Odpowiedz

21

Ty należy połączyć pełną dystrybucję żądań z pakietem Python, a następnie zmodyfikować plik Pythona sys.path (gdzie szuka modułów), aby wskazać folder zawierający folder requests.

  • Pobierz kupna bibliotekę z PyPI i rozpakować go ręcznie pod folderze wtyczek

  • Before importowania wnioski w swojej wtyczki, dołącz folder corrcet do sys.path wskazać folder gdzie to możliwe Znaleziono wnioski importować

The (niesprawdzone) Kod powinien wyglądać mniej więcej tak:

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 

Zakłada się również, że requestssetup.py nie wykonuje żadnych ataków hakerskich podczas instalacji modułu przy użyciu easy_install lub pip.

Możesz również importować zip requests bezpośrednio, ponieważ Python obsługuje importowanie z plików ZIP, zakładając, że żądania są dystrybuowane w kompatybilny sposób.Przykład (zaawansowane):

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

Więcej o sys.path sztuczki (2004)

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

+0

dzięki za szybką odpowiedź. Próbowałem tego - sys.path.append (os.path.join (os.path.dirname (__ file__), "/usr/lib/python2.7/dist-packages/")). Wygląda na to, że zarówno moduł "request", jak i "urllib3" zostały zainstalowane razem z pip. Ale teraz ma następujący błąd - Plik "/usr/lib/python2.7/dist-packages/urllib3/filepost.py", wiersz 15, w od io import BytesIO Plik ". \ Io.py", linia 63, w ImportError: Brak modułu o nazwie _fileio –

+0

Edytowałem moje pytanie z rozwiązaniem tego problemu. Jeszcze raz dziękuję Mikko! –

+3

Informacje w tej odpowiedzi są ** niezwykle ważne ** do tworzenia wtyczek Sublime Text. To naprawdę powinno być w oficjalnych dokumentach ... – zakdances

5

Mikko odpowiedź jest dobra, ale może znaleźć się nieco łatwiejszy sposób:

import MyAwesomePlugin.requests 

"MyAwesomePlugin" to nazwa twojej wtyczki, oczywiście.

+1

To najprawdopodobniej zepsuje się, jeśli biblioteka żądań zawiera bezwzględny import. –

+0

Nie testowałem w tym scenariuszu, więc możesz mieć rację. Ale miejmy nadzieję, że 'prośby' unikają tego, ponieważ absolutne ścieżki są prawie zawsze złym pomysłem, chyba że jest to absolutnie konieczne. – zakdances