I'm writing a sublime text 2 plugin that uses a module SEAPI.py which in itself imports the requests module.
Since sublime text 2 uses it's own embedded python interpreter, it doesn't see the requests module installed in my ubuntu machine (I get the following error: ImportError: No module named requests).
Best solution I could find so far was to copy the 'requests' module (the whole directory of files) from /usr/lib/python2.7/dist-packages/requests into my plugin directory in the sublime text packages dir. But after that, it says that it can't find the 'urllib3' module.
Is there a better way to import the requests module so that I won't have to copy all the files into my plugin directory ?
The current code I'm using is as follows:
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: The selected answer is correct and fixes my main question, but a different problem exists with using the current version of 'Requests' with the embedded sublime text 2 interpreter. ST2's python is missing various modules which exist in regular 2.7 python (such as 'fileio').
I've solved it with using the 'Requests' module from here: https://github.com/bgreenlee/sublime-github
And I had to edit the 'urllib3/response.py' file to this:
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
On Sublime Text > Tools > Build System > New Build System... and change "path_to_your_desired_python_version" to point to your desired version of python. Now save the build you just created, for example "Python3. 7X.
You're going to have to turn to plugins (also known as packages) for your Sublime Text. It's worth noting that our list of our favorite Sublime Text plugins is fairly versatile and is (mostly) random in order.
You need to bundle full requests distribution with your Python package and then modify Python's sys.path
(where it looks for modules) to point to a folder containing requests
folder.
Download Requests library from a PyPi and extract it manually under your plugin folder
Before importing requests in your plugin, append the corrcet folder to sys.path to point a folder where it can found requests import
The (untested) code should look like something like this:
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
This also assumes that requests
setup.py
does not do any hacks when you install the module using easy_install
or pip
.
You also could import requests
zip directly as Python supports importing from ZIP files, assuming requests is distributed in compatible way. Example (advanced):
https://github.com/miohtama/ztanesh/blob/master/zsh-scripts/python-lib/zipimporter.py
More about sys.path trick (2004)
http://www.johnny-lin.com/cdat_tips/tips_pylang/path.html
Mikko's answer is good, but I may have found a slightly easier way:
import MyAwesomePlugin.requests
"MyAwesomePlugin" being the name of your plugin, of course.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With