安装 Sublime Text 内置程序包 Python?

Install package for Sublime Text build-in Python?

我需要在我的 Sublime 插件中导入第三方包。似乎 Sublime 使用非系统 Python 解释器,因此无法导入之前由 sudo pip install ... 为系统 Python.

全局安装的包

是否有安装内置 Sublime 包的解决方法 Python?或者让 Sublime 使用系统 Python 作为 运行 插件?但是,第二种情况 Python 包 (sublime, sublime_plugin) 是否可以导入?

我的主要版本是 Sublime Text 3。OSX10.10

谢谢。

我找到的一个解决方案是切换到 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

在我的包目录中,现在可以从 Sublime2 导入包 console/plugins。

仍然缺少 Sublime Text 3 解决方案。

请参阅我的回答 以获取完整详细信息,但基本上答案是将所需的包放入您的插件目录中(确保他们的许可证允许以这种方式重新分发)作为单独的文件夹,然后使用以下模型:

try: #ST3
    from .foobar import mymodule
    import .baz
except ImportError: #ST2
    from foobar import mymodule
    import baz

用于导入模块。 的主要问题是 A) 它是 Mac 特定的,B) 它是 ST2 特定的,以及 C) 它不可移植 - 你不能使用这种方法分发你的插件。

最简单的做法是仅使用同时适用于 2.6 和 3.3 的纯 Python 模块(如果您想同时针对 ST2 和 ST3)。如果您使用编译模块(lxmlnumpy,随便什么),您将需要为 2.6 和 3.3 单独编译版本(同样,如果您支持这两个编辑器版本),并且在为 OS X、Linux 和 Windows 编译。最后,对于 Linux 和 Windows,您将需要 32 位和 64 位版本(OS X 仅是 64 位)。我所知道的唯一可以做到这一点的软件包是 PyV8 node/js 引擎 Emmet,我认为可能还有 1 或 2 个。如您所见,支持和升级真是令人头疼。

如果第 3 方包本身导入另一个模块并且不使用相对导入(许多包不使用相对导入,PEP8),则相对导入不起作用。

我的解决方案是将所有第三方包及其依赖项放入您的插件子文件夹中。并将该子文件夹添加到 sys.path(它看起来像肮脏的 hack,但它有效):

假设插件的结构有点像这样:

插件文件夹/
-- 分机/
---- foo/ <-- 这个模块需要 bar 模块
---- bar/ <-- 所以我们也包含它
---- baz/ <-- 我们插件的另一个第 3 方 python 模块
-- plugin.py

所以在 plugin.py 里面我们可以这样写:

sys.path.append(os.path.join(os.path.dirname(__file__), "ext"))
import foo
from baz import foobaz

优点:

  • ST 2&3 兼容
  • 跨平台
  • 便携

缺点:

  • 看起来我们要 depency-hell 因为其他插件可能包含相同 python 模块的不同版本,甚至是具有相同名称的完全不同的模块。

对于没有依赖关系的第三方包,保持显式相对导入的最佳方式。