我需要在Sublime插件中导入第三方软件包。 Sublime似乎使用非系统Python解释器,因此不能导入先前由sudo pip install ...
为系统Python全局安装的软件包。
是否有为内置Sublime Python安装软件包的解决方法?或者让Sublime使用系统Python来运行插件?但是,第二种情况是Python包(sublime, sublime_plugin
)可以导入吗?
我的主要版本是Sublime Text 3. OSX 10.10
谢谢。
答案 0 :(得分:1)
请查看我的回答here以获取完整的详细信息,但基本上答案是将插件目录中所需的软件包(确保其许可证允许以这种方式重新分发)作为单独的文件夹,然后使用以下模型:
try: #ST3
from .foobar import mymodule
import .baz
except ImportError: #ST2
from foobar import mymodule
import baz
用于导入模块。 your answer的主要问题是:A)它是特定于Mac的,B)是ST2特定的,C)它不可移植 - 您不能使用此方法分发您的插件。
最简单的方法是只使用兼容2.6和3.3的纯Python模块(如果你想同时使用ST2和ST3)。如果您使用已编译的模块(lxml
,numpy
,无论如何),您需要为2.6和3.3单独编译版本(同样,如果您支持两个编辑器版本) ),以及为OS X,Linux和Windows编译的内容。最后,对于Linux和Windows,您需要32位和64位版本(OS X仅为64位)。我唯一知道的包是Emmet
的PyV8
节点/ js引擎,我认为可能是1或2个其他。正如您所看到的,支持和升级是一个真正的痛苦。
答案 1 :(得分:0)
我发现的一个解决方案是切换到Sublime Text 2.它使用系统Python 2.6,因此可以为它安装Python的插件:
>>> import os
>>> print(os.__file__)
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.pyc
所以,我刚刚跑了
sudo /System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 setup.py install
在我的包dir中,现在可以从Sublime2 console / plugins导入包。
Sublime Text 3解决方案仍然缺失。
答案 2 :(得分:0)
如果第三方软件包本身导入另一个模块并且不使用相对导入(许多软件包不使用相对导入,PEP8),则相对导入不起作用。
我的解决方案是将所有第三方软件包及其依赖项放在您的插件子文件夹中。并且该子文件夹添加到sys.path(它看起来像脏黑客但它可以工作):
假设插件的结构有点像这样:
插件文件夹/
- 分机/
---- foo /< - 此模块需要条形模块
---- bar /< - 所以我们也包括它
---- baz /< - 我们插件的另一个第三方python模块
- plugin.py
所以在plugin.py中我们可以这样写:
sys.path.append(os.path.join(os.path.dirname(__file__), "ext"))
import foo
from baz import foobaz
优点:
缺点:
对于没有依赖关系的第三方软件包,保留显式相对导入的最佳方法。