【问题标题】:Can virtualenv be avoided when using Emacs Jedi (in Anaconda)?使用 Emacs Jedi(在 Anaconda 中)时可以避免 virtualenv 吗?
【发布时间】:2014-03-09 08:20:42
【问题描述】:

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

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

有没有办法直接向绝地开发者提出这个问题? (找不到方法)

【问题讨论】:

  • “虚拟盒子”?您是否正在将虚拟化工具(如 VMware)与a Python framework for installing packages without system privileges 混合使用?这些是完全不同的东西。
  • 啊。我用的是 Virtualbox,打字的时候手指滑了。现在编辑。谢谢。
  • user2053036 的答案在我的环境中有效。但是出现了另一个问题,我想我不是唯一遇到此错误的人: cannot import name 'get_venv_path' from 'jedi.evaluate.sys_path' (d:\program_file\miniconda\envs\emacs- jedi\lib\site-packages\jedi\evaluate\sys_path.py) 我终于让这个错误消失了,通过在 sys_path.py 中添加一个方法 get_venv_path() 出现在错误中。 def get_venv_path(sys_path) : return [] 这对我有用,虽然它可能不是一个好的解决方案。

标签: python emacs virtualenv anaconda jedi


【解决方案1】:

这是我设置jedi:server-command 变量的技巧:

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

【讨论】:

    【解决方案2】:

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

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

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

    python -c 'import sys; print(sys.path)'
    

    在 anaconda 中并找到一些 anaconda 特定的路径(我不知道它会是什么。但我猜它在路径中包含“anaconda”)。然后使用--sys-path 添加这些路径。代码见jedi:server-args文档。

    【讨论】:

    • 我不知道这与使用 jedi.el 和 anaconda/conda 有什么关系(除了不推荐它:))。我需要同步一些东西吗?我无法理解这些链接。目前一切正常。如果我不同步,我最终会遇到问题吗?我发现 anaconda/conda 比 virtualenv 更容易使用,所以目前我的首要任务是把东西放在那里。
    • 如果我开始使用 Python 模块的一些新功能并更新所需的版本,你会遇到麻烦。由于不推荐,使用手动方法的人不多,所以如果您有问题,很难得到答案。
    • 好的。我更新了答案。我假设 anaconda 在第一个答案中是 virtualenv 的包装器。但即使不是,您也可以随时添加 sys.path 使用 --sys-path 告诉 Jedi.el 您在其中使用模块。顺便说一句,如果您在文档中有任何不明白的地方,请在跟踪器中报告,因为有难以理解的手册是 文档错误
    • 太棒了。非常感谢。
    【解决方案3】:

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

    您可以使用他们位于here 的 github 问题跟踪器。

    emacs-jedi website 声明 virtualenv 是可选的,所以我猜 jedi 可以在没有它的情况下工作。如果您可以发布您如何安装jedi 或您希望如何安装它(手动,使用 el-get 或其他方式),那么这里的人将能够更好地帮助您。

    更新

    这是一种无需virtualenv手动安装jedi的方法

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

    2) 然后安装python依赖,你可以从here下载requirements.txt然后做pip install -r requirements.txt,这样就会安装python依赖了。

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

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

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

    更新 2

    以下是使 emacs-jedi 与“conda 环境框架”一起工作的步骤(我使用了 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)))
    

    【讨论】:

    • 该网站有手动设置的详细说明。似乎只有在您想通过 el-get 完全自动安装时才需要 Virtualenv(但即使是手动安装也可能是个好主意)。
    • 我确实有绝地设置和工作,但由于 garyp 明确要求安装非虚拟环境,我提供了一种方法来做到这一点。你是对的,使用virtualenv 是个好主意。
    • 您建议的手动安装工作正常。 Jedi 文档中介绍了您的方法,但我误读了说明。关于virtualenv:Anaconda自带环境框架,不清楚能不能和virtualenv同时使用。可能是,但我不确定。我使用了 virtualbox 和 conda 环境,我发现 conda 看起来更简单。当然,它不如 virtualenv 出名,我认为开发人员仍在对其进行调整。文档需要改进,但我对 virtualenv 也有同样的想法。
    • 您好,好像可以用anaconda环境框架使用jedi。首先,您需要找到如何在 conda 中安装 jedi,[github.com/conda/conda-recipes] 有安装 jedi 的配方。一旦你创建了一个新的 conda 环境并在其中安装了 jedi,你可以简单地将 emacs 中的 jedi:server-command 设置为 (your/conda/python /path/to/emacs-jedi/jediepcserver.py)。很抱歉没有提供具体说明(我不使用 Anaconda),但这些指针可能会有所帮助。如果您遇到任何问题,请不要犹豫。
    • 需求链接失效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2021-10-08
    • 2012-12-28
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多