python - 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.
解决方案
我也有类似的问题,我也在使用 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)
)
推荐阅读
- sqlite - Sqlite/SQLServer 提供程序差异
- filter - 在单独的列中为每个“匹配值”复制值
- c# - 如果在列“ReportId”(主键)中抛出空值违反非空约束,如何使用 EF PostgreSQL
- elasticsearch - AND 查询嵌套对象
- azure - 通过 Azure APIM 策略获取基本 URL 和带有版本标识符的 URL
- php - 基于动态 PHP 变量的第 n 个子配方
- html - 响应式网页设计 ccs 按钮在桌面视图中工作,但对移动视图没有任何反应
- docker - 在容器内使用 goofys 安装 S3 存储桶
- python - 我无法从 understat 数据中抓取到 JSON
- common-lisp - 使用 cond 语句时出现意外错误