我没有找到,如何Sublime文本插件开发人员可以使用Sublime文本找到全局Python包,而不是Python包的Sublime文本目录。
Sublime文本使用自己的Python环境,而不是机器的Python环境。开发人员需要sys.path
来设置not内置的Sublime Text Python包。
是否有任何方法,使用全局安装的Python包在Sublime的文本插件?例如,如果有人告诉我,我可以如何改变我的插件,这将是很好的-参见本题3.2项。
例如,我编写了Python代码--将替换为
[**][**][**](https://github.com/kristinita/kristinita.github.io)
,其中https://github.com/kristinita/kristinita.github.io
-DuckDuckGo查询的第一个链接。
# -*- coding: utf-8 -*-
import re
import urllib
from bs4 import BeautifulSoup
from w3lib.url import safe_url_string
# ASCII link for solved encoding problems —
# https://stackoverflow.com/a/40654295/5951529
ascii_link = safe_url_string(
u'http://duckduckgo.com/html/?q=' + 'Поиск Кристиниты',
encoding="UTF-8")
print(ascii_link)
# SERP DuckDuckGo
serp = urllib.request.urlopen(ascii_link)
# Reading SERP
read_serp = serp.read()
# BeautifulSoup — https://stackoverflow.com/a/11923803/5951529
parsed = BeautifulSoup(read_serp, "lxml")
# Parsed first link
first_link = parsed.findAll(
'div', {'class': re.compile('links_main*')})[0].a['href']
# Remove DuckDuckGo specific characters —
# https://stackoverflow.com/a/3942100/5951529
remove_duckduckgo_symbols = first_link.replace("/l/?kh=-1&uddg=", "")
# https://stackoverflow.com/a/32451970/5951529
final_link = (urllib.parse.unquote(remove_duckduckgo_symbols))
# Markdown link
markdown_link = '[' + 'Поиск Кристиниты' + ']' + \
'(' + final_link + ')'
print(markdown_link)
如果我在terminal或SublimeREPL中运行这个文件,我会得到输出:
[**Поиск Кристиниты**](https://github.com/Kristinita/Kristinita.github.io/)
现在,基于此代码,我编写了Sublime Text插件,用于将
示例文本
替换为[**示例文本**](http://
:
import re
import urllib
from bs4 import BeautifulSoup
from w3lib.url import safe_url_string
import sublime_plugin
class KristinitaLuckyLinkCommand(sublime_plugin.TextCommand):
def run(self, edit):
# Get selection text
print('KristinitaLuckyLink called')
select = self.view.sel()
selection_region = select[0]
selection_text = self.view.substr(selection_region)
print(selection_text)
# ASCII link for solved encoding problems —
# https://stackoverflow.com/a/40654295/5951529
ascii_link = safe_url_string(
u'http://duckduckgo.com/html/?q=' + (selection_text),
encoding="UTF-8")
print(ascii_link)
# SERP DuckDuckGo
serp = urllib.request.urlopen(ascii_link)
# Reading SERP
read_serp = serp.read()
# BeautifulSoup — https://stackoverflow.com/a/11923803/5951529
parsed = BeautifulSoup(read_serp, "lxml")
# Parsed first link
first_link = parsed.findAll(
'div', {'class': re.compile('links_main*')})[0].a['href']
# Remove DuckDuckGo specific characters —
# https://stackoverflow.com/a/3942100/5951529
remove_duckduckgo_symbols = first_link.replace("/l/?kh=-1&uddg=", "")
# Final link — https://stackoverflow.com/a/32451970/5951529
final_link = (urllib.parse.unquote(remove_duckduckgo_symbols))
markdown_link = '[' + selection_text + ']' + \
'(' + final_link + ')'
print(markdown_link)
# Replace selected text to Markdown link
self.view.replace(
edit, selection_region, markdown_link)
如果用户已经安装了Python并安装了软件包
PIP安装BeautifulSoup4
PIP安装lxml
PIP安装W3lib
我想,我的插件从2.2项成功为用户工作。
如果我保存了我的插件,我会得到堆栈跟踪:
Traceback (most recent call last):
File "D:\Sublime Text Build 3126 x64 For Debug\sublime_plugin.py", line 109, in reload_plugin
m = importlib.import_module(modulename)
File "./python3.3/importlib/__init__.py", line 90, in import_module
File "<frozen importlib._bootstrap>", line 1584, in _gcd_import
File "<frozen importlib._bootstrap>", line 1565, in _find_and_load
File "<frozen importlib._bootstrap>", line 1532, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 584, in _check_name_wrapper
File "<frozen importlib._bootstrap>", line 1022, in load_module
File "<frozen importlib._bootstrap>", line 1003, in load_module
File "<frozen importlib._bootstrap>", line 560, in module_for_loader_wrapper
File "<frozen importlib._bootstrap>", line 868, in _load_module
File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed
File "D:\Sublime Text Build 3126 x64 For Debug\Data\Packages\Grace Splitter\kristi.py", line 4, in <module>
from bs4 import BeautifulSoup
ImportError: No module named 'bs4'
- 如何在Sublime Text 2插件中包含第三方Python包,
- 在ST2插件中使用paramiko库,
- 插件的最佳实践-部署和打包,
- 如何导入包并调用其全局函数/以获取其全局html" target="_blank">变量值?
I安装
- Sublime-美丽4,
- Sublime-lxml,
我在Sublime Text 3控制台中运行:
>>> window.run_command("kristinita_lucky_link")
我得到堆栈跟踪:
Traceback (most recent call last):
File "D:\Sublime Text 3 x64\sublime_plugin.py", line 818, in run_
return self.run(edit)
File "D:\Sublime Text 3 x64\Data\Packages\KristinitaLuckyLink\KristinitaLuckyLink.py", line 32, in run
parsed = BeautifulSoup(read_serp, "lxml")
File "D:\Sublime Text 3 x64\Data\Packages\bs4\__init__.py", line 165, in __init__
% ",".join(features))
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
我没有找到,我如何可以设置
lxml
。
例如,我在同一个目录中有
kristinitaluckylink.py
和krisduckduckgo.py
文件。
我的
kristinitaluckylink.py
文件:
import re
import requests
import sublime_plugin
import subprocess
import sys
sys.path.append(
'D:\Sublime Text 3 x64\Data\Packages\KristinitaLuckyLink\KrisDuckDuckGo.py')
from KrisDuckDuckGo import final_link
from bs4 import BeautifulSoup
class KristinitaLuckyLinkCommand(sublime_plugin.TextCommand):
def run(self, edit):
# Get selection text
print('KristinitaLuckyLink called')
select = self.view.sel()
selection_region = select[0]
selection_text = self.view.substr(selection_region)
print(selection_text)
# Get terminal output — https://stackoverflow.com/a/4760517/5951529
# Paths is correct
result = subprocess.run(["C:\Python36\python.exe", "D:\Sublime Text 3 x64\Data\Packages\KristinitaLuckyLink\krisduckduckgo.py"],
stdout=subprocess.PIPE)
final_link = result.stdout.decode('utf-8')
print(final_link)
# Markdown link
markdown_link = '[' + selection_text + ']' + \
'(' + final_link + ')'
print(markdown_link)
# Replace selected text to Markdown link
self.view.replace(
edit, selection_region, markdown_link)
我的
krisduckduckgo.py
文件:
import urllib
import sys
sys.path.append(
'D:\Sublime Text 3 x64\Data\Packages\KristinitaLuckyLink\KristinitaLuckyLink.py')
from w3lib.url import safe_url_string
from KristinitaLuckyLink import selection_text
from bs4 import BeautifulSoup
# ASCII link for solved encoding problems —
# https://stackoverflow.com/a/40654295/5951529
ascii_link = safe_url_string(
u'http://duckduckgo.com/html/?q=' + (selection_text),
encoding="UTF-8")
print(ascii_link)
# SERP DuckDuckGo
serp = urllib.request.urlopen(ascii_link)
# Reading SERP
read_serp = serp.read()
# BeautifulSoup — https://stackoverflow.com/a/11923803/5951529
parsed = BeautifulSoup(read_serp, "lxml")
# Parsed first link
first_link = parsed.findAll(
'div', {'class': re.compile('links_main*')})[0].a['href']
# Remove DuckDuckGo specific characters —
# https://stackoverflow.com/a/3942100/5951529
remove_duckduckgo_symbols = first_link.replace("/l/?kh=-1&uddg=", "")
# Final link — https://stackoverflow.com/a/32451970/5951529
final_link = (urllib.parse.unquote(remove_duckduckgo_symbols))
print(final_link)
我选择我在Sublime文本控制台中打印的任何文本:
window.run_command(“kristinita_lucky_link”)
我没有得到输出在Sublime文本控制台。
错误:
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
很可能是因为Sublime Text发现lxml
是作为全局Python环境的一部分安装的--该环境是为与ST使用的Python不同的Python版本编译的--所以无法加载它。
我们希望ST找到sublime-lxml
依赖项,您在问题中链接到该依赖项。你可能会问:“为什么要找错人?”这很难说清楚,但我认为Odatnurd的回答给了我们一些线索--由于某种原因,ST看到的sys.path
包括了您的所有全局Python包。默认情况下,ST应该只使用它的可执行文件所在的文件夹和ST data目录中的Packages文件夹。例如,在我的系统上,执行import sys;st的控制台中的sys.path
给出:
[
'C:\\Program Files\\Sublime Text 3',
'C:\\Program Files\\Sublime Text 3/python3.3.zip',
'C:\\Users\\Keith\\AppData\\Roaming\\Sublime Text 3\\Packages',
'C:\\Users\\Keith\\AppData\\Roaming\\SUBLIM~1\\Packages\\lxml\\ST3_WI~2'
]
即没有site-packages
文件夹。
因此,解决办法要么是:
a.您可以尝试卸载系统范围的lxml
包,以便ST只找到sublime-lxml
依赖包,但实际上这只是一个临时措施。最好是:B。调整ST正在使用的path环境变量(项的顺序)。(即删除对site-packages
的所有引用,或至少移动它们,使它们位于ST文件夹之后。)
选项B不应该影响任何其他ST插件,因为它们也会遭受同样的问题。我怀疑是其他一些包改变了ST正在使用的路径,但如果不搜索它们,要找出是哪一个可能并不容易。当使用构建系统时,用于这些系统的路径与插件用于加载其模块的路径截然不同,因此构建系统也应该不受此“修复”的影响。
我正在开发一个詹金斯插件,我需要为詹金斯的所有工作提供一个新的环境变量。有点像Jenkins全局属性或环境变量,或者完全一样。我不确定。我只需要它对任何脚本都可用。 我已经在插件的文件的一个条目中捕获了这个环境变量的值,该文件是公开的,可以通过访问
FIS3 是以 File 对象为中心构建编译的,每一个 File 都要经历编译、打包、发布三个阶段。运行原理讲述了 FIS3 中的插件扩展点;那么本节就将说明一个插件如何开发; 如上图,编译起初,扫描项目目录下的所有文件(不包含指定排除文件),后实例化 File 对象,并对 File 内容进行编译分析; 编译阶段插件 在编译阶段,文件是单文件进行编译的,这个阶段主要是对文件内容的编译分析;这个阶段
插件需要 export 一个函数,函数会接收到两个参数,第一个是 build-scripts 提供的 pluginAPI,第二个是用户传给插件的自定义参数,如下: module.exports = (pluginAPI, options) => { const { context, log, onHook } = pluginAPI; }; pluginAPI
初始化插件 你可以通过 create-umi 直接创建一个 umi 插件的脚手架: $ yarn create umi --plugin 在 umi 中,插件实际上就是一个 JS 模块,你需要定义一个插件的初始化方法并默认导出。如下示例: export default (api, opts) => { // your plugin code here }; 需要注意的是,如果你的插件需要发
插件开发 消费器插件 继承AbstractDataConsumer类 通过spring.factories发布: cn.vbill.middleware.porter.core.task.consumer.DataConsumer=xxx 通过配置文件生效: porter.task[index].consumer.consumerName=pluginName EventConverte
运行开发服务器 npm install npm install -g ykit #依赖 ykit npm run dev #启动开发服务器 加载插件 在config.json plugins配置项,加入 demo 插件, { "port": "3000", "db": { "servername": "127.0.0.1", "DATABASE": "yapi" }