2013-03-02 2 views
26

मैं एक उत्कृष्ट पाठ 2 प्लगइन लिख रहा हूं जो मॉड्यूल SEAPI.py का उपयोग करता है जो स्वयं requests module आयात करता है।सब्लिमे टेक्स्ट 2 प्लगइन्स में तीसरे पक्ष के पायथन पैकेज को कैसे शामिल करें

चूंकि उत्कृष्ट टेक्स्ट 2 अपने स्वयं के एम्बेडेड पायथन दुभाषिया का उपयोग करता है, इसलिए यह मेरे यूबंटू मशीन में स्थापित अनुरोध मॉड्यूल नहीं देखता है (मुझे निम्न त्रुटि मिलती है: आयात त्रुटि: अनुरोध मॉड्यूल अनुरोध नहीं)।

सबसे अच्छा समाधान मैं अब तक खोज सकता था 'अनुरोध' मॉड्यूल (फाइलों की पूरी निर्देशिका) /usr/lib/python2.7/dist-packages/requests से मेरी प्लगइन निर्देशिका में उत्कृष्ट पाठ पैकेज में कॉपी करना था 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 
... 

संपादित करें: चयनित जवाब सही है और मेरे मुख्य प्रश्न को ठीक करता है, लेकिन एम्बेडेड सब्लिम टेक्क्स के साथ 'अनुरोध' के वर्तमान संस्करण का उपयोग करने के साथ एक अलग समस्या मौजूद है टी 2 दुभाषिया। एसटी 2 के पायथन में विभिन्न मॉड्यूल गायब हैं जो नियमित 2.7 पायथन (जैसे 'फाइलियो') में मौजूद हैं।

मैं यहाँ से 'अनुरोध' मॉड्यूल का उपयोग कर के साथ इसका समाधान कर लिया: 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

आप अपने पायथन पैकेज के साथ पूर्ण अनुरोध वितरण को बंडल करने की आवश्यकता है और उसके बाद requests फ़ोल्डर वाले फ़ोल्डर को इंगित करने के लिए पाइथन के sys.path (जहां यह मॉड्यूल की तलाश करता है) को संशोधित करें।

  • डाउनलोड एक PyPi से पुस्तकालय अनुरोध और अपने प्लगइन फ़ोल्डर के अंतर्गत मैन्युअल रूप से इसे निकालने के अपने प्लगइन में

  • से पहले का आयात अनुरोध, संलग्न corrcet फ़ोल्डर एक फ़ोल्डर बात जहां यह कर सकते हैं करने के लिए sys.path को पाया अनुरोध

(untested) कोड आयात कुछ इस तरह दिखना चाहिए:

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.pyeasy_install या pip का उपयोग कर मॉड्यूल स्थापित करते समय कोई हैक नहीं करता है।

आप requests ज़िप सीधे आयात कर सकते हैं क्योंकि पाइथन ज़िप फ़ाइलों से आयात करने का समर्थन करता है, मानते हैं कि अनुरोध संगत तरीके से वितरित किए जाते हैं।उदाहरण (उन्नत):

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' मॉड्यूल दोनों को पाइप के साथ स्थापित किया गया था। लेकिन अब इसमें निम्न त्रुटि है - फ़ाइल "/usr/lib/python2.7/dist-packages/urllib3/filepost.py", पंक्ति 15, आईओ आयात बाइट्सियो फ़ाइल "। \ Ioio", लाइन 63, आयात त्रुटि: _fileio –

+0

नामक कोई मॉड्यूल मैंने इस समस्या के समाधान के साथ अपना प्रश्न संपादित नहीं किया है। धन्यवाद फिर Mikko! –

+3

सब्लिमे टेक्स्ट प्लगइन बनाने के लिए इस उत्तर में जानकारी ** अविश्वसनीय रूप से महत्वपूर्ण ** है। यह वास्तव में आधिकारिक दस्तावेज़ों में होना चाहिए ... – zakdances

5

मिक्को का जवाब अच्छा है, लेकिन मैं एक से थोड़ा आसान तरीका मिल गया है हो सकता है:

import MyAwesomePlugin.requests 

"MyAwesomePlugin" निश्चित रूप से आपकी प्लगइन का नाम है।

+1

अनुरोध पुस्तकालय में कोई पूर्ण आयात होने पर यह सबसे अधिक संभावना तोड़ता है। –

+0

मैंने उस परिदृश्य में परीक्षण नहीं किया है, इसलिए आप सही हो सकते हैं। लेकिन आइए आशा करते हैं कि 'अनुरोध' ऐसा करने से बचा जाए क्योंकि पूर्ण पथ लगभग हमेशा एक बुरा विचार नहीं है जब तक कि बिल्कुल जरूरी न हो। – zakdances

संबंधित मुद्दे