当我在 VS Code 中使用 Python 中的匹配大小写语句时,它会在“问题”选项卡中显示红色波浪线和错误:

python python-jedi visual-studio-code vscode-python python-3.10
我想用Jedi为我的Python代码添加一些自动完成支持.这可以通过使用函数docstrings或类型提示(或两者)来完成.
def function_with_types_in_docstring(param1, param2):
"""Example function with types documented in the docstring.
:type param1: int
:type param2: str
:rtype: bool
"""
def function_with_pep484_type_annotations(param1: int, param2: str) -> bool:
"""Example function with PEP 484 type annotations."""
Run Code Online (Sandbox Code Playgroud)
记录类型的哪种方法在内存使用和运行时间方面增加了更少的开销?我首先对Python代码本身的效率感兴趣,然后是Jedi.
每次我关闭 VSCode(在运行一些 Python 脚本之后)时,我都会有一个 Python 任务在我的 M1 MacBook Air 上运行 90-100% CPU 的终端中徘徊,我每次都必须手动终止它。我在 PID 上运行了以下命令:
ps aux | grep <PID>
Run Code Online (Sandbox Code Playgroud)
它每次都返回相同的东西......
Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/Resources/Python.app/Contents/MacOS/Python /Users/<user>/.vscode/extensions/ms-python.python-2021.2.625869727/pythonFiles/runJediLanguageServer.py
Run Code Online (Sandbox Code Playgroud)
我检查了我的 VSCode 扩展,我没有安装任何“绝地”扩展,但也许它是其他扩展的一个挥之不去的任务。任何想法如何解决这一问题?
我构建了简单的文本编辑器,具有一些屏幕阅读软件的辅助功能.我正在使用Python for .NET(pythonnet)来显示包含富文本框的表单.当用户在一段时间后按Tab键时,它会弹出一个上下文菜单,其中包含所选元素的完成.好吧,它适用于Python对象,但它不适用于.net活动对象,没有解决这个问题的方法.现在,我想构建一个TreeView对象,其中包含我正在编辑的模块的所有名称和定义.
所以,例如我输入:
import sys
import os
lst = list()
Run Code Online (Sandbox Code Playgroud)
等...如果我使用我的源代码的jedi.names,我可以检索os,sys和lst.对于每个名称,我想要检索子定义,例如sys和os模块的函数,以及lst的方法.我找不到用jedi做到这一点的方法:
names = jedi.names(MySource)
names[0].defined_names() # works for sys
names[1].defined_names() # works for os
names[2].defined_names() # doesn't work for lst instance of list().
Run Code Online (Sandbox Code Playgroud)
有什么建议?我试图使用越来越多的编辑器,但可访问性支持非常糟糕......
我安装了emacs-jedi来为emacs中的python获取一些代码.总的来说,我必须说我印象非常深刻!它开箱即用,可以快速找到内置库的完成情况.但是,我将python用于科学目的,并依赖于numpy和scipy来完成我的工作.出于某种原因,我没有完成这些模块的完成.
例:
import numpy
testVector = numpy.array([1,2,3])
Run Code Online (Sandbox Code Playgroud)
现在输入testVector.等待,没有任何表现
我正在尝试使用jedi-vim插件进行Python自动完成,但我无法让它工作.
我有Vim 7.3,这就是我做的:
1-克隆代码
git clone http://github.com/davidhalter/jedi-vim path/to/bundles/jedi-vim
Run Code Online (Sandbox Code Playgroud)
2-复制jedi-vim/plugin/jedi.vim到~/.vim/plugin/
3-复制jedi-vim/doc/jedi-vim.txt到~/.vim/doc/
现在当我打开vim时,进入插入模式并输入
import wave
wave.
Run Code Online (Sandbox Code Playgroud)
没有任何反应,虽然文档指定Autocompletion is also triggered by typing a period in insert mode,如果我尝试<Ctrl-Space>我得到以下错误
E29: No inserted text yet
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
我检查过:map,似乎<Ctrl-Space>没有使用:
n [m *@:call <SNR>21_Python_jump('?^\s*\(class\|def\)')<CR>
n [[ *@:call <SNR>21_Python_jump('?^\(class\|def\)')<CR>
n ]m *@:call <SNR>21_Python_jump('/^\s*\(class\|def\)')<CR>
n ]] *@:call <SNR>21_Python_jump('/^\(class\|def\)')<CR>
n gx <Plug>NetrwBrowseX
n <Plug>NetrwBrowseX * :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<CR>
Run Code Online (Sandbox Code Playgroud)
由于我使用错误<Ctrl-Space> …
我在Emacs中使用Jedi进行Python自动完成,但它不是我的代码的依赖项所以我不想把它放在我的代码中requirements.txt.(其他开发人员可能不使用Jedi编辑器插件,当我部署到Heroku时肯定不需要它.)
但绝地必须可以从我的virtualenv获得,以便运作,即如果我不能
import jedi
Run Code Online (Sandbox Code Playgroud)
它不起作用.
有没有一种很好的方法来安装Jedi用户全局,以便它可以在我的所有virtualenvs中使用?
我想我想要的是
~/.local/lib/python2.7/site-packages/具有pip的--user标志,然后--system-site-packages标志创建我的virtualenv ,但是对于用户包而不是系统包.我目前的解决方法是pip install jedi在每个virtualenvs.然后,当我添加新的依赖项I pip install foo时pip freeze > requirements.txt,然后jedi在提交之前手动删除文件中的一些其他内容.显然,这是耗时且容易出错的.
有人有更好的解决方案吗?
发布作为后续如何检查SuperTab和jedi-vim是否被激活?并完成了Ingo Karkat提出的建议.现在我想知道什么是破碎的以及我如何解决它.
这是输出:
:verbose imap <tab>
i <Tab> <Plug>SuperTabForward
Last set from ~/.vim/bundle/supertab/plugin/supertab.vim
Run Code Online (Sandbox Code Playgroud)
哪个看起来对我好,并且......
:scriptnames
1: /etc/vimrc
2: /usr/share/vim/vim72/syntax/syntax.vim
3: /usr/share/vim/vim72/syntax/synload.vim
4: /usr/share/vim/vim72/syntax/syncolor.vim
5: /usr/share/vim/vim72/filetype.vim
6: /usr/share/vim/vimfiles/ftdetect/puppet.vim
7: /usr/share/vim/vim72/ftplugin.vim
8: /home/johannesw/.vimrc
9: /usr/share/vim/vim72/ftoff.vim
10: /home/johannesw/.vim/bundle/vundle/autoload/vundle.vim
11: /home/johannesw/.vim/bundle/vundle/autoload/vundle/config.vim
12: /usr/share/vim/vim72/indent.vim
13: /usr/share/vim/vim72/syntax/nosyntax.vim
14: /home/johannesw/.vim/bundle/vim-fugitive/plugin/fugitive.vim
15: /home/johannesw/.vim/bundle/vim-easymotion/plugin/EasyMotion.vim
16: /home/johannesw/.vim/bundle/vim-easymotion/autoload/EasyMotion.vim
17: /home/johannesw/.vim/bundle/vim-rails/plugin/rails.vim
18: /home/johannesw/.vim/bundle/L9/plugin/l9.vim
19: /home/johannesw/.vim/bundle/L9/autoload/l9.vim
20: /home/johannesw/.vim/bundle/FuzzyFinder/plugin/fuf.vim
21: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf.vim
22: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/buffer.vim
23: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/file.vim
24: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/coveragefile.vim
25: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/dir.vim
26: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/bookmarkfile.vim
27: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/bookmarkdir.vim
28: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/tag.vim
29: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/buffertag.vim
30: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/taggedfile.vim
31: /home/johannesw/.vim/bundle/FuzzyFinder/autoload/fuf/jumplist.vim
32: …Run Code Online (Sandbox Code Playgroud) 使用ropemacs,您可以执行以下操作:
M-x rope-auto-import
Run Code Online (Sandbox Code Playgroud)
这会分析代码(我假设)并导入丢失的模块,例如,如果我写:
datetime.now()
Run Code Online (Sandbox Code Playgroud)
它应该通过添加此行来为我导入:
from datetime import datetime
Run Code Online (Sandbox Code Playgroud)
(它总是使用from ... import ...表格)
emacs-jedi中有类似的功能吗?
我正在尝试在 vim 中使用 python-jedi,但目前它完全无法使用,因为它试图在奇怪的时间完成编码。
我添加了以下行:
let g:jedi#popup_on_dot = 0
Run Code Online (Sandbox Code Playgroud)
到我的 vimrc 文件,这确实停止了“.”上的自动完成。但是当我尝试在逗号后添加空格到以下代码时:
upper_blue = np.array([130,255,255])
Run Code Online (Sandbox Code Playgroud)
自动完成不断弹出,似乎每当我在方括号内时,但它与数组无关。
我也安装了 pymode,但我确实关闭了绳索功能……我承认我不知道如何完全关闭 pymode。
VimRC:
" Better command-line completion
set wildmenu
" Show partial commands in the last line of the screen
set showcmd
" Highlight searches (use <C-L> to temporarily turn off highlighting; see the
" mapping of <C-L> below)
set hlsearch
" Modelines have historically been a source of security vulnerabilities. As
" such, it may be a good idea to disable them …Run Code Online (Sandbox Code Playgroud) python-jedi ×10
python ×7
autocomplete ×2
emacs ×2
jedi-vim ×2
vim ×2
docstring ×1
emacs-jedi ×1
numpy ×1
pip ×1
plugins ×1
python-3.10 ×1
python-3.x ×1
supertab ×1
type-hinting ×1
virtualenv ×1