关于python后端是python2还是python3

很多py插件都依赖jediflake8等等。

插件的README上面都写着

pip install jedi
pip install flake8

这些库安装的地方会在python2.7/site-packages里面,貌似各种插件都默认从2.7中寻找backend,其中涉及到读取哪个elisp变量吗?能不能改成python3?

背景:因为最近anconda-mode老是报错server error,花半天找到个类似的问题,发现jedi作者早就修复了,可是我的各种插件都是最新的啊,pip也会时期性的自动更新。后来才发现,我之前图省事alias pip=pip3,alias python=python3了,我以为大家默认用py3了:(,作者写pip的意思也是代指pip3,可是anconda-mode还是从python2.7/site-packages里面找依赖,而我py2的库早就没在更新了…

我觉得还是用虚拟环境吧,会省心很多。如果是Linux强烈推荐使用 pyenv 配合虚拟环境。我在Windows系统中用虚拟环境都很开心。

1 个赞

好的,我用的是mac,等会儿试试虚拟环境^ ^

建议先安装 pyenv,再安装虚拟环境。然后你会体验到什么是干净地安装 python

1 个赞

试试pipenv?

1 个赞

最好不要太新,比如jedi现在只支持python3.5以及以下,实测python3.7无法使用jedi

啊啊,用了一个晚上,体验超棒 :sunglasses:
只恨不能早点知道这玩意儿,省多少事啊 :sob:

非常理解,之前也曾被 Python 环境折磨。

虽然我的回复和你最初的问题不完全匹配,但是你的问题已解决,所以麻烦勾选一下。

请问怎么把系统已有的python加入到pyenv中?我机器安装有3个不同版本的python,pyenv只显示一个system

是不是先安装了python,再安装pyenv就不能把原来的python版本加入进去了?要重新安装python?

一般地可以设置如下几项来控制emacs调用哪个python环境:

(setq my-python-env "/home/YOURNAME/anaconda3/envs/EXAMPLE_ENV/")
(setq python-shell-virtualenv-root my-python-env)
(setq python-environment-directory (concat my-python-env "/bin"))
(setq python-shell-interpreter (concat my-python-env "/bin/python"))

比如我使用anaconda建立了很多虚拟环境,有py3tf1.1py2tf1.0等等。那么我可以设置上面的my-python-env指向对应的虚拟环境目录:

(setq my-python-env "/home/libniwtr/anaconda3/envs/py3tf1.1/") ;;; 使用py3tf1.1环境

以上的这些变量可以动态修改,只需关闭jedi-mode再打开就行了。