如何在Sublime Text 2插件中包含第三方Python包

如何在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目录中我

我正在编写一个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

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。如果请求库包含任何绝对导入,这很可能会中断。我还没有在该场景中进行测试,所以您可能是对的。但我们希望
请求
避免这样做,因为除非绝对必要,否则绝对路径几乎总是一个坏主意。