首页 > 解决方案 > Emacs:即使安装了“virtualenv”,“jedi:install-server”也会失败

问题描述

我正在尝试根据本手册为 Emacs 安装 JEDI 自动完成功能。

当我输入M-x jedi:install-server时,我得到了错误Program named "virtualenv" does not exist。我遵循了这个答案中的建议并使用pip install virtualenv. 现在当我进入virtualenv终端时,我得到这个输出:

usage: virtualenv [--version] [--with-traceback] [-v | -q] [--app-data APP_DATA] [--clear-app-data] [--discovery {builtin}] [-p py] [--creator {builtin,cpython3-posix,venv}] [--seeder {app-data,pip}] [--no-seed]
                  [--activators comma_sep_list] [--clear] [--system-site-packages] [--symlinks | --copies] [--download | --no-download] [--extra-search-dir d [d ...]] [--pip version] [--setuptools version] [--wheel version] [--no-pip]
                  [--no-setuptools] [--no-wheel] [--symlink-app-data] [--prompt prompt] [-h]
                  dest
virtualenv: error: the following arguments are required: dest

然后我重新启动,输入M-x jedi:install-server,但我仍然得到同样的错误。

我在 Linux Mint 19.3 Tricia 上使用 2019 年 12 月 3 日的 GNU Emacs 26.3(内部版本 1,x86_64-pc-linux-gnu,GTK+ 版本 3.22.30)。

如何修复此错误并开始使用 JEDI 自动完成功能?

更新 1:此外,每当我打开 Python 文件时,都会收到此警告

*** EPC Server Config ***
Server arguments: ("/usr/bin/python" "/home/XXXXXXX/.emacs.d/elpa/jedi-core-20191011.1750/jediepcserver.py")
Actual command: /usr/bin/python
VIRTUAL_ENV envvar: nil

*** jedi-mode is disabled in #<buffer createPageStructure.py> ***
Fix the problem and re-enable it.

*** You may need to run "M-x jedi:install-server". ***
This could solve the problem especially if you haven't run the command yet
since Jedi.el installation or update and if the server complains about
Python module imports.

标签: pythonemacs

解决方案


我也有类似的问题,我也在使用 Linux Mint Tricia。我想使用 company-jedi 而不是 jedi-ac

就我而言,我希望绝地武士和 emacs 使用 python3.8。所以我想要基于python3.8的jedi virtualenv。

Jedi virtualenv 是使用 emacs-python-enviroment 包创建的。

我的问题似乎来自 emacs-python-enviroment 默认使用选项“--system-site-package”这一事实,所以我有很多错误,因为系统 python3 是 python3.6 而我没有(我不想)在系统范围的 python3 中安装了所有需要的包。

我解决了将选项“--no-site-package”(见此添加到 emacs-python-enviroment 的问题

emacs-python-enviroment 用于创建 jedi virtualenv,命名为 'default' 并位于 `~/.emacs.d/.python-enviroments/' 如果需要,您可以配置此 virtualenv 的不同名称和位置(例如更多信息见此

这是我的工作配置。您可以指定不同的 python 而不是 python3.8(我使用的那个)

 (setq python-shell-interpreter "/usr/bin/python3.8")
 (setq py-python-command "/usr/bin/python3.8")        ; maybe not needed
 (setq python-python-command "/usr/bin/python3.8")    ; maybe not needed

 (use-package company-jedi             ;;; company-mode completion back-end for Python JEDI
   :ensure t
   :config
   (setq jedi:environment-virtualenv
         (append python-environment-virtualenv
                 '("--no-site-packages" "--python" "/usr/bin/python3.8")))
   ;;(setq jedi:environment-virtualenv (list (expand-file-name "~/.emacs.d/.python-environments/")))
   (add-hook 'python-mode-hook 'jedi:setup)
   (setq jedi:complete-on-dot t)
   (setq jedi:use-shortcuts t)
   (defun config/enable-company-jedi ()
     (add-to-list 'company-backends 'company-jedi))
   (add-hook 'python-mode-hook 'config/enable-company-jedi)
   )

推荐阅读