【问题标题】:Install package for Sublime Text build-in Python?为 Sublime Text 内置 Python 安装包?
【发布时间】:2015-06-14 11:33:31
【问题描述】:

我需要在我的 Sublime 插件中导入第三方包。看来 Sublime 使用了非系统 Python 解释器,所以无法导入包,以前由 sudo pip install ... 全局安装用于系统 Python。

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

我的主要版本是 Sublime Text 3。OSX 10.10

谢谢。

【问题讨论】:

  • 有几个选项,具体取决于您要执行的操作。您可以更改 Sublime 使用的解释器(请参阅stackoverflow.com/q/12342004/3001761),找出它已经在使用的解释器并针对它安装(stackoverflow.com/q/10919569/3001761),...
  • 第二个选项似乎破坏性较小。 >>> import os >>> print(os.__file__) /Applications/Sublime Text.app/Contents/MacOS/python3.3.zip/os.pyo 所以,python3.3.zip — 是压缩 python 解释器的路径。有没有办法强制 pip 使用压缩版本的 python 解释器并为其安装软件包?
  • @jonrsharpe 您的第一个链接没有描述如何执行 OP 想要的操作。该链接描述了如何设置任意 Python 解释器以使用 build system 在 Sublime 中运行 .py 文件。 OP 希望更改用于运行内部 Sublime 插件的 Python 版本,这是不可能的,因为(在带有 ST2 的 OS X 上除外)解释器被编译到二进制文件本身中,而对于 ST2/OS X,它链接到用户系统上特定版本的 Python,如果使用另一个版本,则会中断。

标签: python sublimetext2 pip sublimetext3 sublime-text-plugin


【解决方案1】:

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

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

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

插件文件夹/
-- 分机/
---- foo/ ---- bar/ ---- baz/ -- 插件.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模块的不同版本,甚至完全不同的同名模块。

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

【讨论】:

    【解决方案2】:

    请查看我的回答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)。如果您使用已编译的模块(lxmlnumpy 等),则需要分别为 2.6 和 3.3 编译版本(同样,如果您同时支持两个编辑器版本),并在其中编译为 OS X、Linux 和 Windows。最后,对于 Linux 和 Windows,您将需要 32 位和 64 位版本(OS X 仅 64 位)。我知道的唯一一个包是PyV8 node/js engine for Emmet,我想可能还有1或2个。如您所见,支持和升级确实令人头疼。

    【讨论】:

    • 谢谢你,你帮了我很多!
    【解决方案3】:

    我发现的一个解决方案是切换到 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 控制台/插件导入包。

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

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      相关资源
      最近更新 更多