比如我有多个项目,想在不同的项目运行对应的虚拟环境,这样子不知道有没有办法
这个包应该就能满足你的需求,配合 veve 来管理 python 的虚拟环境的。
关于 venv 的使用,请看 Python 的官方文档:
这个确实可以,但是pip的路径好像没有使用venv的
可以看下 venv 的文档啊,里面有说怎么通过 venv 安装和激活虚拟环境。python 和相关的包都会安装到.venv 这个文件夹下。虚拟环境是独立的。
用来 pyvenv 这个 Emacs 包,就可以在不同项目下激活不同的虚拟环境,然后你 run-python 的交互环境也就是相应的虚拟环境了。
比如我在 Windows 下的话,还可以在项目下直接写好需要用到的依赖,写一个安装脚本,当然也可以手动执行。
PythonVenv.bat
py -3 -m venv %CD%\.venv
.venv\Scripts\python -m pip install -r %CD%\requirements.txt
reguirements.txt 里面写依赖的名字
comtypes==1.1.10
psutil==5.8.0
这是我的配置,你可以参考一下
(use-package pyvenv
:after python
:hook (python-mode . pyvenv-mode)
:config
;; Set correct Python interpreter
(setq pyvenv-post-activate-hooks
(list (lambda ()
(setq python-shell-interpreter
(concat pyvenv-virtual-env (if (eq system-type 'windows-nt)
"scripts/python"
"bin/python"))))))
(setq pyvenv-post-deactivate-hooks
(list (lambda ()
(setq python-shell-interpreter "python3")))))
谢谢你的代码,可能venv我不会用吧,所以我手写了一段,想实现启动 python 的时候将buffer名改成自定义的,不知道有什么方法,因为比较菜,大佬勿笑
(defun mo-run-python ()
"自定义运行python"
(interactive)
(let ((mo-project-python-buffer-name (format "%s[%s]" "Python" (projectile-project-name))))
(if (get-process mo-project-python-buffer-name)
(progn
;; 将“Python”buffer放入下面window(先判断是否在下面window)
;; ()
(display-buffer (get-buffer "*Python*"))
(python-shell-send-buffer))
(progn (set-workon-home-by-venv (projectile-project-root))
(run-python)
(display-buffer (get-buffer "*Python*"))
(python-shell-send-buffer)
))))
(defun set-workon-home-by-venv (project-path)
"如果存在虚拟venv,则设置 WORKON_HOME 为虚拟环境路径"
(if (file-exists-p (concat project-path "/.venv"))
(setenv "WORKON_HOME" (concat project-path "/.venv"))
(if (file-exists-p (concat project-path "/venv"))
(setenv "WORKON_HOME" (concat project-path "/venv"))
(when (and (executable-find "python3")
(string= python-shell-interpreter "python"))
(setq python-shell-interpreter "python3"))))
(when (getenv "WORKON_HOME")
(setq python-shell-interpreter (concat (getenv "WORKON_HOME") "/bin/python3"))))
多谢,我研究下