Ale*_*sky 29 python plugins distutils python-requests sublimetext2
我正在编写一个使用模块SEAPI.py的sublime text 2插件,该模块本身导入了请求模块.
由于sublime text 2使用它自己的嵌入式python解释器,它没有看到我的ubuntu机器中安装的请求模块(我收到以下错误:ImportError:没有名为requests的模块).
到目前为止我能找到的最佳解决方案是将"请求"模块(文件的整个目录)从/usr/lib/python2.7/dist-packages/requests复制到我的插件目录中的sublime文本包目录中.但在那之后,它说它找不到'urllib3'模块.
有没有更好的方法导入请求模块,以便我不必将所有文件复制到我的插件目录?
我正在使用的当前代码如下:
MyPlugin.py
import sublime
import sublime_plugin
import SEAPI
...
Run Code Online (Sandbox Code Playgroud)
SEAPI.py
import requests
try:
import simplejson as json
except:
import json
from time import time, sleep
...
Run Code Online (Sandbox Code Playgroud)
编辑: 所选答案是正确的并修复了我的主要问题,但使用当前版本的"请求"与嵌入式sublime text 2解释器存在不同的问题.ST2的python缺少常规2.7 python中存在的各种模块(例如'fileio').
我已经使用"请求"模块解决了这个问题: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
Run Code Online (Sandbox Code Playgroud)
Mik*_*maa 22
您需要将完整的请求分发与Python包捆绑在一起,然后修改Python sys.path(它查找模块的位置)以指向包含requests文件夹的文件夹.
从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
Run Code Online (Sandbox Code Playgroud)
这也假设requests setup.py使用easy_install或安装模块时不会发生任何黑客攻击pip.
requests假设请求以兼容的方式分发,您也可以直接导入zip,因为Python支持从ZIP文件导入.示例(高级):
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
Mikko的答案很好,但我可能找到了一个更简单的方法:
import MyAwesomePlugin.requests
Run Code Online (Sandbox Code Playgroud)
当然,"MyAwesomePlugin"是你插件的名字.