使用Emacs Jedi(在Anaconda中)可以避免使用virtualenv吗?

时间:2014-02-11 13:49:08

标签: python emacs virtualenv anaconda jedi

我正在使用Anaconda python框架。 Anaconda拥有自己的虚拟环境系统,我不清楚virtualenv是否可以安全地与Anaconda一起使用。

Emacs Jedi似乎需要virtualenv。它是在“运行时”使用还是仅在安装期间使用?是否可以在没有安装virtualenv的情况下使用Jedi?一旦Jedi安装完成,可以卸载virtualenv吗?

有没有办法直接向Jedi开发人员提出这个问题? (找不到方法)

3 个答案:

答案 0 :(得分:4)

  

有没有办法直接向绝地提问这个问题   开发商?

您可以使用生活here的github问题跟踪器。

emacs-jedi website表示virtualenv是可选的,所以我猜jedi可以在没有它的情况下工作。如果您可以发布jedi的安装方式或安装方式(手动,使用el-get或其他方式),那么此处的人员将能够为您提供更好的帮助。

<强>更新

以下是一种在没有jedi

的情况下手动安装virtualenv的方法

1)从melpa安装jedi。执行M-x list-packages,按jedi标记包I,然后按X安装软件包(就elisp而言,这将安装所有依赖项)

2)然后安装python依赖项,你可以从here下载requirements.txt,然后执行pip install -r requirements.txt,这将安装python依赖项。

3)在打开python文件时添加一个python-mode挂钩来启动jedi,基本上将以下内容添加到你的init文件中

(autoload 'jedi:setup "jedi" nil t)
(add-hook 'python-mode-hook 'jedi:setup)

以上应该设置jedi,如果您在上述任何步骤中遇到问题,请不要犹豫

更新2

以下是让emacs-jedi使用'conda environment framework`的步骤(我使用miniconda但是即使安装了完整的conda也应该可以使用)

1)通过

创建一个conda环境(对于当前示例,环境名为emacs-jedi
conda create -n emacs-jedi python

2)为jedi,epc和sexpdata构建包(emacs-jedi需要)

a)克隆conda-recipes存储库

b)通过conda build /path/to/conda-recipies/<pkgname>

构建所需的包

3)通过执行source activate emacs-jedi切换到上面创建的环境并通过执行

安装上面构建的包
conda install --use-local jedi sexpdata epc

--use-local用于指示conda从本地构建的软件包安装

4)最后指示emacs将此环境与jedi一起使用,这只需将以下内容添加到您的init文件中

(eval-after-load "jedi"
    '(setq jedi:server-command (list "/path/to/emacs-jedi/bin/python" jedi:server-script)))

答案 1 :(得分:2)

Jedi.el开发这里。从Jedi.el v0.2.0开始,virtualenv成为默认值,强烈推荐。仍支持手动安装,但不鼓励,因为您需要手动同步Jedi.el和Python模块的版本。参见:

我不知道蟒蛇是什么,但我想这里有自己的环境。如果它只是virtualenv的包装,那么请按照手册中的说明操作并使用--virtual-env。如果没有,您可以使用--sys-path告诉Jedi.el有关其他站点路径的信息。参见:

首先,您需要找到特定于anaconda的站点路径。运行

python -c 'import sys; print(sys.path)'
<>在anaconda中找到一些特定于anaconda的路径(我不知道它会是什么。但我想它包括&#34; anaconda&#34;在路径中)。然后使用--sys-path添加这些路径。有关代码,请参阅jedi:server-args文档。

答案 2 :(得分:0)

这是我设置jedi:server-command变量的方法:

(setq jedi:server-command
        `("python"
          ,(concat (file-name-directory
                   (buffer-file-name
                    (car
                     (find-definition-noselect 'jedi:setup nil))))
                  "jediepcserver.py")))