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

30 投票
2 回答
17567 浏览
提问于 2025-04-17 17:43

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

5

Mikko的回答很好,但我可能找到了一种稍微简单一点的方法:

import MyAwesomePlugin.requests

这里的"MyAwesomePlugin"就是你插件的名字,当然了。

22

你需要把完整的请求库打包到你的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

这也假设requestssetup.py在你用easy_installpip安装模块时没有做什么特别的处理。

你也可以直接从ZIP文件中导入requests,因为Python支持从ZIP文件导入,前提是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

撰写回答