Python中如何在SublimeText3的REPL中为当前文件配置虚拟环境运行

看中了 REPL 可以分屏,可以有交互界面、dos 界面、还可以直接 run 脚本。直接 run 时,对于一些一直运行的脚本,如 flask,可以右键 kill 掉,这点比 build system 有优势多了。

但是,ctrl shift+P 打开 command_palette 后,输入SublimeREPL: Python-virtualenv,选择某个虚拟环境后,就直接转到 python 交互界面了:

Python 3.5.4 (v3.5.4, Aug  8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

直接运行这个 file 的话(tool->sublimeREPL->python->python - run current file),只能在 global 的 python 环境下运行。


Python中如何在SublimeText3的REPL中为当前文件配置虚拟环境运行

2 回复

在Sublime Text 3的REPL中为当前文件配置虚拟环境运行,可以通过修改或创建SublimeREPL的构建系统来实现。核心思路是让REPL使用虚拟环境中的Python解释器,而不是系统默认的。

首先,确保你已经在项目中创建并激活了虚拟环境(例如使用venv)。虚拟环境的路径通常包含一个Scripts(Windows)或bin(macOS/Linux)目录,里面有所需的Python解释器。

接下来,在Sublime Text 3中操作:

  1. 安装Package Control和SublimeREPL(如果还没装):

    • Ctrl+Shift+P 打开命令面板,输入 Install Package 并选择,然后搜索安装 SublimeREPL
  2. 配置针对当前项目的REPL设置: 这是最灵活的方式。打开你的项目文件夹,然后:

    • 在菜单栏选择 Project -> Save Project As...,保存一个 .sublime-project 文件到你的项目根目录。
    • 用文本编辑器打开这个 .sublime-project 文件。它的结构是JSON。你需要添加一个 "build_systems" 部分来定义自定义的REPL构建系统。
  3. 编辑 .sublime-project 文件: 在文件的顶层对象中,添加或修改 "build_systems" 键。下面是一个配置示例,假设你的虚拟环境文件夹名为 venv,并且位于项目根目录:

    {
        "folders":
        [
            {
                "path": "."
            }
        ],
        "build_systems":
        [
            {
                "name": "Python - REPL (Virtual Env)",
                "target": "repl_open",
                "cmd": ["python", "-u", "$file"],
                "env": {
                    "PYTHONIOENCODING": "utf-8"
                },
                "selector": "source.python",
                "path": "$project_path/venv/Scripts", // Windows 路径
                // "path": "$project_path/venv/bin", // macOS/Linux 路径
                "external_id": "repl_python",
                "encoding": "utf-8",
                "syntax": "Packages/Python/Python.tmLanguage"
            }
        ]
    }
    

    关键参数解释

    • "name": 构建系统在Sublime底部状态栏显示的名字。
    • "target": "repl_open": 这是SublimeREPL提供的特殊目标,用于在REPL中运行。
    • "cmd": 执行的命令。这里就是 python -u "$file"。由于下面指定了 "path",系统会优先在该路径下寻找 python 命令。
    • "path": 这是核心配置。将其设置为你的虚拟环境中的可执行文件目录(Scriptsbin)。$project_path 变量代表你的 .sublime-project 文件所在目录(通常是项目根目录)。请根据你的操作系统注释/取消注释正确的行。
    • "external_id": "repl_python": 告诉SublimeREPL使用Python的REPL配置。
  4. 使用配置好的REPL

    • 保存 .sublime-project 文件。
    • 在Sublime Text中打开你的Python文件。
    • 在底部状态栏的构建系统选择器(或按 Ctrl+Shift+B)中,选择你刚配置的 "Python - REPL (Virtual Env)"
    • 然后按 Ctrl+B(或 Tools -> Build)运行。文件内容将被发送到使用虚拟环境Python解释器启动的REPL中执行。

一句话总结:通过修改项目的 .sublime-project 文件,在 "build_systems" 中指定虚拟环境的 Scriptsbin 目录作为 "path",并设置 "target": "repl_open"


研究了半天,我自己暂时的解决办法:
(##how to run current file in sublimeREPL with python virtualenv )
1. 记得修改一下 python_virtualenv_paths,把它设置成"~\Envs"
2. 在 packages\sublimeREPL 中找到 lang_integration.py,把 PythonVirtualenvRepl 这个 class 中的
<br>"cmd": [python_executable, "-u", "${packages}/SublimeREPL/config/Python/<a target="_blank" href="http://ipy_repl.py" rel="nofollow noopener">ipy_repl.py</a>"],改<br>
改为
<br>"cmd": [python_executable, "-u", "$file_basename"],<br>
3. 快捷键设置:
<br>{<br> "keys":["f5"],<br> "caption": "SublimeREPL: Python - RUN current file",<br> "command": "run_existing_window_command", <br> "args": {<br> "id": "python_virtualenv_repl",<br> "file": "config/Python/Main.sublime-menu"<br> }<br> },<br>
打算从现在开始起不用 pycharm 了,速度太慢了。运行 flask app 时如果想停止,直接右键 kill 即可。

回到顶部