如何在Sublime Text 2插件中包含第三方Python包
我正在写一个Sublime Text 2的插件,这个插件使用了一个叫做SEAPI.py的模块,而这个模块又引入了requests模块。
因为Sublime Text 2使用的是自己内置的Python解释器,所以它看不到我在Ubuntu机器上安装的requests模块(我收到的错误是:ImportError: No module named requests)。
我找到的最佳解决办法是把'/usr/lib/python2.7/dist-packages/requests'目录下的整个'requests'模块复制到Sublime Text的插件目录里。但这样做后,它又提示找不到'urllib3'模块。
有没有更好的方法来导入requests模块,这样我就不需要把所有文件都复制到我的插件目录里呢?
我现在使用的代码如下:
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
...
补充:选中的答案是正确的,解决了我主要的问题,但在使用当前版本的'Requests'与内置的Sublime Text 2解释器时,出现了另一个问题。ST2的Python缺少一些在普通2.7 Python中存在的模块(比如'fileio')。
我通过使用这个地方的'Requests'模块解决了这个问题: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
2 个回答
Mikko的回答很好,但我可能找到了一种稍微简单一点的方法:
import MyAwesomePlugin.requests
这里的"MyAwesomePlugin"就是你插件的名字,当然了。
你需要把完整的请求库打包到你的Python项目里,然后修改Python的sys.path
(这是Python查找模块的地方),让它指向一个包含requests
文件夹的文件夹。
从PyPi下载Requests库,并手动解压到你的插件文件夹里。
在你的插件中导入requests之前,先把正确的文件夹添加到
sys.path
,这样Python才能找到requests这个模块。
(未经测试的)代码大概是这样的:
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
这也假设requests
的setup.py
在你用easy_install
或pip
安装模块时没有做什么特别的处理。
你也可以直接从ZIP文件中导入requests
,因为Python支持从ZIP文件导入,前提是requests以兼容的方式分发。示例(进阶):
https://github.com/miohtama/ztanesh/blob/master/zsh-scripts/python-lib/zipimporter.py
关于sys.path
的小技巧(2004)