Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何让emacs绝地使用特定于项目的虚拟现实_Python_Emacs_Virtualenv_Jedi - Fatal编程技术网

Python 我如何让emacs绝地使用特定于项目的虚拟现实

Python 我如何让emacs绝地使用特定于项目的虚拟现实,python,emacs,virtualenv,jedi,Python,Emacs,Virtualenv,Jedi,我希望emacs jedi能够检测我在不同项目中编辑文件的时间,并使用相应的virtualenv(如果可用)。按照惯例,我的VirtualNV与我的项目同名。它们位于$HOME/.virtualenvs/ 我找到了,但它假设在项目根目录的bin目录中找到了virtualenv。它还有一些我根本不需要的其他特性 在克诺比·艾尔的启发下,我为绝地写下了以下缩写。它工作得很好,但并不完美 如果我从项目中导入库A,而A导入B。我能够跳转到由A定义的定义中,但一旦到了那里,我就无法继续跳转到B定义中 我的

我希望emacs jedi能够检测我在不同项目中编辑文件的时间,并使用相应的virtualenv(如果可用)。按照惯例,我的VirtualNV与我的项目同名。它们位于
$HOME/.virtualenvs/

我找到了,但它假设在项目根目录的bin目录中找到了virtualenv。它还有一些我根本不需要的其他特性

在克诺比·艾尔的启发下,我为绝地写下了以下缩写。它工作得很好,但并不完美

如果我从项目中导入库
A
,而
A
导入
B
。我能够跳转到由
A
定义的定义中,但一旦到了那里,我就无法继续跳转到
B
定义中

我的草签:

(defun项目目录(缓冲区名称)
(let((git dir(文件名目录缓冲区名)))
(而(而不是(file-exists-p(concat git dir“.git”))
git目录)
(setq git目录
(如果(等于git dir/)
无
(文件名目录(目录文件名git dir(()())))
git dir)
(defun项目名称(缓冲区名称)
(let((git dir(项目目录缓冲区名称)))
(如果是git dir
(文件名非目录)
(目录文件名git dir))
零))
(defun virtualenv目录(缓冲区名称)
(let((venv dir)(展开文件名
(concat“~/.virtualenvs/”(项目名称缓冲区名称(()()))
(if(和venv dir(文件-exists-p venv dir))
静脉直视
零))
(解除绝地设置参数()
(let((venv dir(virtualenv目录缓冲区文件名)))
(当venv dir
(设置(生成局部变量'jedi:server args)(列表--virtual env“venv dir()()())))
(setq绝地:设置键t)
(setq绝地武士:在t点完成)
(添加钩子“python模式钩子”绝地设置参数)
(添加钩子“python模式钩子”绝地:设置)

我如何初始化绝地有什么问题?

我现在找到了一个解决方案,使用ELPA软件包激活virtualenv,让emacs绝地从VIRTUAL_ENV环境变量中获取virtualenv路径

这是一个完整的、有效的emacs绝地初始化:

(defun项目目录(缓冲区名称)
“返回包含
给定缓冲区名称。包含.git或.jedi文件/目录的任何目录
被视为项目根目录。“
(互动)
(let((根目录(文件名目录缓冲区名)))
(while)和根目录
(不是(file-exists-p(concat root dir“.git”))
(不是(file-exists-p(concat root dir“.jedi”))
(setq根目录
(如果(相等根目录“/)
无
(文件名目录(目录文件名根目录(()())))
根目录)
(defun项目名称(缓冲区名称)
“返回包含给定缓冲区名称的项目的名称。”
(let((根目录(项目目录缓冲区名称)))
(如果是根目录
(文件名非目录)
(目录文件名root dir))
零))
(解除绝地设置venv()
“激活当前缓冲区的virtualenv。”
(let((项目名称(项目名称缓冲区文件名)))
(当项目名称(venv WONN项目名称))时)
(setq绝地:设置键t)
(setq绝地武士:在t点完成)
(添加钩子“python模式钩子”绝地设置venv)
(添加钩子“python模式钩子”绝地:设置)
请记住,您必须首先安装VirtualNVRapper

有关自动激活项目虚拟环境的替代方法,请阅读。简而言之,您可以在项目根目录中创建一个
.dir locals.el
文件,其中包含以下内容:

((python模式((project-venv-name.myproject-env)))
“myproject env”
更改为您的virtualenv的名称,并使用
python模式
钩子激活virtualenvironment:

(添加钩子的python模式钩子(lambda()
(hack局部变量)
(venv WONN项目venv名称)
(添加钩子“python模式钩子”绝地:设置)

还有另一个不错的软件包auto VirtualNVRapper:。我想你应该试试。