2013-03-02 30 views
26

SEAPI.py modülünü kullanan ve kendisi de requests module ürününü kullanan bir modül 2 eklentisi yazıyorum.Sublime Text 2 eklentilerinde üçüncü taraf Python paketleri nasıl eklenir

Yüce metin 2 kendi gömülü python yorumlayıcısını kullandığı için, ubuntu makinemde yüklenen istek modülünü görmez (Şu hatayı alıyorum: ImportError: İstek adlı bir modül yok).

Şimdiye kadar bulabildiğim en iyi çözüm, 'istekler' modülünü (dosyaların tüm dizini) /usr/lib/python2.7/dist-packages/requests adresinden, metinler içindeki eklenti dizinindeki plugin dizinine kopyalamaktı. dir. Ama ondan sonra o 'urllib3' modülünü bulamadığını söylüyor.

benim eklenti dizine tüm dosyaları kopyalamak zorunda kalmazsınız böylece istekleri modülü almak için daha iyi bir yolu var mı?

aşağıdaki kullanıyorum geçerli kod gibi:

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 
... 

Düzenleme: seçilen yanıt doğrudur ve benim ana soru giderir, ancak farklı bir sorun gömülü yüce tex ile 'Taleplerin' geçerli sürümünü kullanarak mevcut t 2 tercüman. ST2'nin pitonu, normal 2.7 pythonda ('fileio') var olan çeşitli modülleri kaçırıyor.

buradan 'İstekler' modülünü kullanarak bunu çözdük: https://github.com/bgreenlee/sublime-github

Ve buna 'urllib3/response.py' dosyasını düzenlemek zorunda kaldı:

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 

cevap

21

Sen Python paketi ile tam istekler dağılımını paket ve daha sonra değiştirmek gerekir Python en sys.pathrequests klasörü içeren bir klasöre işaret edecek (o modüllerin nerede arayacağını).

  • İndir bir PyPi gelen kütüphane İstekleri ve nereye yapabilirsiniz klasör noktası sys.path için corrcet klasörü, sizin eklenti klasörü altında elle Eklentinizde

  • önce ithal isteklerini bunu ayıklamak ekleme

    : bulunan istekler böyle bir şey gibi görünmelidir

(denenmemiş) kodu içe

Bu aynı zamanda easy_install veya pip kullanarak modülünü yüklerken requestssetup.py herhangi kesmek yapmaz varsayar.

Ayrıca uyumlu bir şekilde dağıtıldığı istekleri varsayarak Python ZIP dosyalarını içe aktarmayı destekler doğrudan olarak requests zip alabiliriz.Örnek (gelişmiş):

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

sys.path hile hakkında daha fazla (2004)

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

+0

teşekkürler. Bunu denedim - sys.path.append (os.path.join (os.path.dirname (__ file__), "/usr/lib/python2.7/dist-packages/")). Pip ile yüklenen 'istek' modülü ve 'urllib3' modülünü görüyor gibi görünüyor. Ama şimdi aşağıdaki hata var - Dosya "/usr/lib/python2.7/dist-packages/urllib3/filepost.py", satır 15, içinde io import BytesIO dosya ". \ Io.py", satır 63, ImportError: _fileio adlı bir modül yok –

+0

Sorunu bu sorun için bir çözümle düzenledim. Tekrar teşekkürler Mikko! –

+3

Bu yanıtdaki bilgiler, ** Olağanüstü Metin eklentileri oluşturmak için ** son derece önemlidir. Gerçekten resmi belgelerde olması gerekir ... – zakdances

5

Mikko cevabı iyidir, ama ben biraz daha kolay bir yol bulmuş olabilir:

import MyAwesomePlugin.requests 

"MyAwesomePlugin", eklentinizin adıdır elbette. Hızlı yanıt için

+1

Kitaplık istekleri herhangi bir mutlak ithalat içeriyorsa, büyük olasılıkla bu kesmeler. –

+0

Bu senaryoda test olmadım, bu yüzden haklı olabilirsiniz. Ama umuyoruz ki 'istekleri' bunu yapmayı engeller çünkü mutlak yollar, kesinlikle gerekli olmadıkça neredeyse her zaman kötü bir fikirdir. – zakdances

İlgili konular