Sta*_*ama 1 python-3.x sublimetext3 sublime-text-plugin
所以我正在尝试创建一个插件并使用上下文菜单执行它.在我的插件中,我想使用机械汤模块.
我已按如下方式配置Context.sublime-menu文件以创建Context菜单选项:
[
{
"id": "SlackSnippets",
"caption": "SlackSnippets",
"children":
[
{"id": "wrap"},
{ "command": "slacksnippet" }
]
}
]
Run Code Online (Sandbox Code Playgroud)
现在,有了这个,上下文菜单的极端基本功能可以工作,当你右键单击它时会显示它,并且它的子命令是可点击的:
.
但是,当我遇到麻烦的时候,然后我尝试在python文件中导入机械汤模块,其中定义了'SlackSnippet'命令:
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
Run Code Online (Sandbox Code Playgroud)
我是Sublime Text 3中创建插件的新手,对此有任何帮助将不胜感激!
你的命令在第二种情况下变灰的原因是因为Sublime无法使用你提到的行加载插件,因此它不知道菜单条目告诉它执行的命令,所以它被禁用(如果您使用的是命令选项板,则在这种情况下该命令根本不会出现).
如果您打开Sublime控制台,Ctrl+`或者View > Show Console您将看到堆栈跟踪说明:
ImportError: No module named 'mechanicalsoup'
Run Code Online (Sandbox Code Playgroud)
首先要注意的是Sublime Text包含它自己的嵌入式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源文件(因为它认为它是一个包),这不是你的意思除了简单的情况外,我希望并且可能不会实际工作
Sublime忽略任何不在包文件夹顶层的Python文件,除非你明确地告诉它加载它(即通过import).因此,您可以将模块直接放在包文件夹中,然后从那里导入它们.
例如,如果您的包已命名SlackSnippets,则您的包文件夹可能如下所示:
SlackSnippets/
|-- mechanicalsoup
| |-- __init__.py
| |-- __version__.py
| |-- browser.py
| |-- form.py
| |-- stateful_browser.py
| `-- utils.py
`-- slack_snippet_cmd.py
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过指定模块名称来导入模块SlackSnippets.mechanicalsoup:
from __future__ import print_function
import os
import SlackSnippets.mechanicalsoup
import sublime
import sublime_plugin
class SlacksnippetCommand(sublime_plugin.TextCommand):
def run(self, edit):
pass
Run Code Online (Sandbox Code Playgroud)
(注意:这仍然无法工作,因为这个模块需要安装其他模块,例如requests.我不确定特定的兔子洞有多深,因为我不使用这个模块.)
根据所讨论的模块及其编写方式,可能会有更多的工作涉及以这种方式工作,例如是否需要操作系统特定的库.
这给我们留下了上面提到的第二个选项,即将模块放在Lib/python3.3文件夹中,以便Sublime能够找到它们.
在这种情况下,由于该文件夹位于搜索路径中,因此您最初发布的代码将加载模块而不进行任何更改(尽管由于没有requests可用的模块,它仍然无法在此处工作).
但是,您(和您的用户)仍然负责将模块放在那里; Sublime不会为你自己做那种事情.如果您计划在完成后使用Package Control分发您的包裹,您可以从中获得一点喘息的机会.
Package Control支持依赖模块的概念,并且一些设置将在安装软件包时为用户安装模块(如果它们尚未安装).
目前,这是由Package Control处理的,方法是将模块放入Packages具有特殊包布局的文件夹中,然后在后台进行一些工作,以便Sublime将其视为常规模块.
为了使其工作,您需要将所需的依赖项也存储在Package Control中,如果您感兴趣的模块尚不可用,则需要您进行更多的设置工作.
目前mechanicalsoup不可用,虽然requests是.可用依赖项列表在此处.
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |