如何在Sublime Text 2插件中包含第三方Python包
我正在编写一个sublime text 2插件,它使用了一个模块来导入 由于sublime text 2使用了自己的嵌入式python解释器,因此在我的ubuntu机器上看不到安装的requests模块(我得到以下错误:ImportError:没有名为requests的模块) 到目前为止,我能找到的最佳解决方案是将/usr/lib/python2.7/dist-packages/requests中的'requests'模块(文件的整个目录)复制到sublime text packages目录中我的插件目录中。 但是在那之后,它说它找不到“urllib3”模块 有没有更好的方法导入requests模块,这样我就不必将所有文件复制到插件目录中 我目前使用的代码如下: MyPlugin.py如何在Sublime Text 2插件中包含第三方Python包,python,plugins,sublimetext2,distutils,python-requests,Python,Plugins,Sublimetext2,Distutils,Python Requests,我正在编写一个sublime text 2插件,它使用了一个模块来导入 由于sublime text 2使用了自己的嵌入式python解释器,因此在我的ubuntu机器上看不到安装的requests模块(我得到以下错误:ImportError:没有名为requests的模块) 到目前为止,我能找到的最佳解决方案是将/usr/lib/python2.7/dist-packages/requests中的'requests'模块(文件的整个目录)复制到sublime text packages目录中我
import sublime
import sublime_plugin
import SEAPI
...
西皮
import requests
try:
import simplejson as json
except:
import json
from time import time, sleep
...
编辑:
选择的答案是正确的,并修复了我的主要问题,但使用嵌入sublime text 2解释器的当前版本“Requests”时存在不同的问题。ST2的python缺少常规2.7 python中存在的各种模块(如“fileio”)
我在这里使用“请求”模块解决了这个问题:
我必须将“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
您需要将完整的请求分发包与Python包捆绑在一起,然后修改Python的
sys.path
(在其中查找模块)以指向包含请求的文件夹
- 从PyPi下载请求库,并在插件文件夹下手动提取它
- 在插件中导入请求之前,将corrcet文件夹附加到sys.path,指向一个可以找到导入请求的文件夹
(未测试的)代码应该如下所示:
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
这还假设当您使用easy\u install
或pip
安装模块时,请求setup.py
不会进行任何黑客攻击
您还可以直接导入请求
zip,因为Python支持从zip文件导入,假设请求以兼容的方式分发。示例(高级):
有关sys.path技巧的更多信息(2004)
米科的回答很好,但我可能找到了一个稍微简单一点的方法:
import MyAwesomePlugin.requests
“MyAwesomePlugin”当然是您插件的名称。谢谢您的快速回复。我尝试过这个-sys.path.append(os.path.join(os.path.dirname(文件),“/usr/lib/python2.7/dist packages/”)。似乎可以看到与pip一起安装的“requests”模块和“urllib3”模块。但是现在它有以下错误-文件“/usr/lib/python2.7/dist packages/urllib3/filepost.py”,第15行,在from io import BytesIO文件“\io.py”,第63行,在ImportError中:没有名为_fileioI的模块用此问题的解决方案编辑了我的问题。再次感谢Mikko!这个答案中的信息对于创建Sublime文本插件非常重要。它真的应该出现在官方文档中……或者ST应该让他们的插件像任何普通的Python应用程序一样开发(允许使用virtualenv等)。然后我们可以在插件的main.py
@yourfriendzak中安装请求,然后导入请求。不幸的是,最好的、最有前途的开源崇高克隆是用GoLang编写的,而不是python。如果请求库包含任何绝对导入,这很可能会中断。我还没有在该场景中进行测试,所以您可能是对的。但我们希望请求避免这样做,因为除非绝对必要,否则绝对路径几乎总是一个坏主意。