Python 3.x 升华文本3创建插件添加外部python库
所以我尝试创建一个插件,并使用上下文菜单执行它。在我的插件中,我想使用mechanical soup模块 我已按如下方式配置Context.sublime-menu文件以创建上下文菜单选项:Python 3.x 升华文本3创建插件添加外部python库,python-3.x,sublimetext3,sublime-text-plugin,Python 3.x,Sublimetext3,Sublime Text Plugin,所以我尝试创建一个插件,并使用上下文菜单执行它。在我的插件中,我想使用mechanical soup模块 我已按如下方式配置Context.sublime-menu文件以创建上下文菜单选项: [ { "id": "SlackSnippets", "caption": "SlackSnippets", "children": [ {"id": "wrap"}, { "command": "slacksnippet" } ] }
[
{
"id": "SlackSnippets",
"caption": "SlackSnippets",
"children":
[
{"id": "wrap"},
{ "command": "slacksnippet" }
]
}
]
现在,上下文菜单的极端基本功能开始发挥作用,当您右键单击时,它会显示出来,并且它的子命令是可单击的:
但是,我遇到的问题是,我尝试在定义了“SlackSnippet”命令的python文件中导入mechanical soup模块:
from __future__ import print_function
import os
import mechanicalsoup """If Commented out, I can click the command in the context window"""
import sublime
import sublime_plugin
class SlacksnippetCommand(sublime_plugin.TextCommand):
def run(self, edit):
## Code
关联菜单中的命令随后变灰,我无法使用它:
我是新创建的插件在升华文本3和任何帮助与此将不胜感激 在第二种情况下,您的命令变灰的原因是因为Sublime无法加载您提到的插件行,因此它不知道菜单项告诉它执行的命令,因此它被禁用(如果您使用命令调色板,在这种情况下,该命令根本不会出现) 如果使用Ctrl+`或
View>Show console
打开Sublime控制台,您将看到一个堆栈跟踪:
ImportError:没有名为'mechanicalsoup'的模块
首先要注意的是,Sublime文本包含它自己的Python 3.3.6嵌入式版本,它与您在计算机上安装的任何Python版本完全不同
因此,默认情况下,它无法加载系统安装的Python模块,因为它对这些模块一无所知。可以让Sublime查看系统位置,但这通常不是一个好主意,因为它引入了许多外部依赖项,插件/包的用户在代码运行之前需要安装这些依赖项(包括安装Python 3.3.6本身)
一般来说,Sublime中嵌入的Python解释器会在几个位置查找Python文件/模块,但只有以下位置是供用户交互的:
Packages
文件夹,您可以通过从菜单中选择Preferences>Browse Packages
进入该文件夹Lib/python3.3
的文件夹(Lib
存储在与Packages
文件夹相同的位置;使用该命令并上升一个文件夹级别)mechanicalsoup
放入Packages
文件夹中。但是,这不是一个特别好的主意,因为Sublime将尝试自动加载顶级Python源文件(因为它认为它是一个包)这不是你想要的,除了在简单的情况下,它可能实际上不起作用
升华会忽略任何不在包文件夹顶层的Python文件,除非您明确告诉它加载它(即通过import
)。因此,您可以将模块直接放在包文件夹中,然后从那里导入它们
例如,如果您的包名为SlackSnippets
,则您的包文件夹可能如下所示:
SlackSnippets/
|--机械组
||--uuu init_uuuuuuuuuuuuuuuuuy.py
||--uuu版本_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
||--browser.py
||--form.py
||--stateful_browser.py
|`--utils.py
`--slack_snippet_cmd.py
现在,您可以通过指定模块名称来导入模块。mechanicalsoup:
from\uuuuu future\uuuuu导入打印功能
导入操作系统
导入SlackSnippets.mechanicalsoup
进口升华
导入升华插件
类SlacksnippetCommand(升华插件.TextCommand):
def运行(自我,编辑):
通过
(注意:此模块仍然无法工作,因为此模块需要安装其他模块,例如请求
。但是,我不确定特定的兔子洞有多深,因为我不使用此模块。)
根据所讨论的模块及其编写方式,以这种方式工作可能需要更多的工作,例如是否需要特定于操作系统的库
这就给我们留下了上面提到的第二个选项,即将您的模块放在Lib/python3.3
文件夹中,以便Sublime能够找到它们
在这种情况下,由于该文件夹位于搜索路径中,您最初发布的代码将加载模块而不做任何更改(尽管由于没有可用的请求
模块,因此它在此处仍然无法工作)
不过,您(和您的用户)仍然有责任将模块放在那里;Sublime不会单独为您做这类事情。如果您计划在完成后使用Package Control分发包,您可以从中获得一点喘息的机会
软件包控制支持在安装软件包时为用户安装模块(如果尚未安装)的概念,并通过一些设置
目前,这是由软件包控制来处理的,方法是将模块放入带有特殊软件包布局的Packages
文件夹,然后在后台进行一些工作,以便升华将其视为常规模块
为了实现这一点,您需要将所需的依赖项也存储在Package Control中,如果您感兴趣的模块还不可用,则需要您进行更多的设置工作
目前,
mechanicalsoup
不可用,尽管请求
可用。可用依赖项列表为。在第二种情况下,您的命令变灰的原因是,升华无法加载您提到的插件行,因此它不知道菜单项告诉它的命令执行,因此它被禁用(如果您使用的是命令选项板,则在本例中该命令根本不会出现)
如果用Ctr打开Sublime控制台