在Python中安装升华文本构建包?
我需要在我的Sublime插件中导入第三方软件包。Sublime似乎使用非系统Python解释器,因此无法导入以前由在Python中安装升华文本构建包?,python,sublimetext2,pip,sublimetext3,sublime-text-plugin,Python,Sublimetext2,Pip,Sublimetext3,Sublime Text Plugin,我需要在我的Sublime插件中导入第三方软件包。Sublime似乎使用非系统Python解释器,因此无法导入以前由sudopip install…为系统Python全局安装的包 是否有一个变通方法来安装Sublime Python内置包?或者让Sublime使用系统Python来运行插件?然而,在第二种情况下,Python包(sublime,sublime_plugin)是否可以导入 我的主要版本是《升华文本3》。OSX 10.10 谢谢。我找到的一个解决方案是切换到Sublime Text
sudopip install…
为系统Python全局安装的包
是否有一个变通方法来安装Sublime Python内置包?或者让Sublime使用系统Python来运行插件?然而,在第二种情况下,Python包(sublime,sublime_plugin
)是否可以导入
我的主要版本是《升华文本3》。OSX 10.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
在我的包目录中,现在可以从Sublimite2控制台/插件导入包
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)。如果您使用编译模块(
lxml
,numpy
,无论什么),您都需要分别编译2.6和3.3版本(同样,如果您同时支持这两个编辑器版本),并在其中编译OS X、Linux和Windows版本。最后,对于Linux和Windows,您需要32位和64位版本(OSX仅为64位)。我所知道的唯一一个实现这一点的软件包是PyV8
node/js引擎,我想可能还有一两个。如您所见,支持和升级将是一个真正的难题。如果第三方软件包本身导入另一个模块并且不使用相对导入(许多软件包不使用相对导入),则相对导入不起作用
我的解决方案是将所有第三方软件包及其依赖项放在插件子文件夹中。并将该子文件夹添加到sys.path(看起来像脏黑客,但可以正常工作):
假设插件的结构有点像这样:
插件文件夹/--ext/
----foo/有几个选项,取决于您想做什么。您可以更改Sublime使用的解释器(请参阅),找出它已经在使用的解释器,并针对该解释器()进行安装,……第二个选项的破坏性似乎更小
>>>导入os>>>打印(os.\uuuuu文件\uuuuu)/Applications/Sublime Text.app/Contents/MacOS/python3.3.zip/os.pyo
因此,python3.3.zip
是压缩python解释器的路径。有没有办法强迫pip使用PythoniInterpreter的压缩版本并为其安装软件包?@jornsharpe您的第一个链接并没有描述如何执行OP想要的操作。该链接描述了如何设置任意Python解释器,使其使用。OP想要更改用于运行内部Sublime插件的Python版本,这是不可能的,因为(除了在使用ST2的OS X上)解释器本身被编译成二进制文件,而在使用ST2/OS X时,解释器链接到用户系统上特定版本的Python,如果使用另一个版本,它将崩溃。谢谢你,你帮了我很多忙!
sys.path.append(os.path.join(os.path.dirname(__file__), "ext"))
import foo
from baz import foobaz