【问题标题】:How can I use venv with SublimeREPL in Sublime Text 3?如何在 Sublime Text 3 中将 venv 与 SublimeREPL 一起使用?
【发布时间】:2018-10-28 04:23:49
【问题描述】:

首先,这是我的开发环境:

  • Windows 7(尽管我在另一台 Windows 10 机器上遇到了同样的问题)
  • Python 3.6
  • Git 重击
  • Sublime Text 3(版本 3.1.1,Build 3176)
  • SublimeREPL

在 Git Bash 中,我创建了一个新的虚拟环境:

$ mkdir ~/.venv
$ cd ~/.venv
$ python -m venv test-env

要激活该虚拟环境,我使用:

$ source ~/.venv/test-env/Scripts/activate

注意:我必须修改激活脚本(不是 activate.bat)才能正确激活 venv。具体来说,我更改了第 40 行,如下所示:

VIRTUAL_ENV="C:\Users\my_user_name\.venv\test-env"

VIRTUAL_ENV="/c/Users/my_user_name/.venv/test-env"

现在,当我在 test-env 虚拟环境中时(如 Git Bash 中的“(test-env)”文本所证明的那样),我可以执行通常的操作,例如

(test-env)
$ pip install numpy

我还在 Sublime Text 3 中安装了 SublimeREPL 包。我设置了一个新的构建系统 (SublimeREPL-python.sublime-build),如下所示:

{
    "target": "run_existing_window_command", 
    "id": "repl_python_run",
    "file": "config/Python/Main.sublime-menu"
}

现在,假设我有一个脚本

# test.py
import numpy as np


print('numpy was imported without error')

我可以输入 Ctrl+Shift+B,然后开始输入“repl”,它会自动选择 SublimeREPL-python 构建,然后按 Enter。 SublimeREPL 出现,但产生错误:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    import numpy as numpy
ModuleNotFoundError: No module named 'numpy'
>>> 

SublimeREPL 在没有使用我的虚拟环境的情况下被调用,这会导致它抛出错误,因为我的全局 python 环境中没有安装 numpy。

如何使用 SublimeREPL 从 Sublime Text 3 运行我的 Python 脚本并访问使用 venv 创建的虚拟环境?

FWIW,我已经尝试为此代码创建一个 Sublime 项目并将以下内容添加到 .sublime-project 文件中:

"build_systems":
[
    {
        "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
        "name": "test-env",
        "selector": "source.python",
        "shell_cmd": "\"C:\\Users\\my_user_name\\.venv\\test-env\\Scripts\\python\" -u \"$file\""
    }
]

这让我可以键入 Ctrl+Shift+B,然后键入“test-env”,然后 Enter(使用我刚刚创建的 test-env 构建系统进行构建),它按预期工作并且运行没有错误。但是,它不使用我想要的 SublimeREPL,这样我就可以调试我的代码(这比我上面发布的简单测试脚本更复杂!)并探索 REPL 中的变量,而不仅仅是在控制台中运行代码.

【问题讨论】:

    标签: python windows sublimetext3 sublimerepl python-venv


    【解决方案1】:

    我知道这不是一个答案,而是一个部分解决方案,可以帮助与我处于相同情况的其他人。也因为SublimeREPL support 几乎什么都不是。

    注意:此解决方案需要为每个环境修改Main.sublime-menu,并假设SublimeREPL 已经交互运行(添加"-i" 以执行)。

    1. 浏览包并打开SublimeREPL/config/python/Main-sublime-menu
    2. 搜索符合"id": "repl_python_run"的行。
    3. 复制花括号内最近的内容。

    基本上在相同的结束括号之后粘贴以下内容(注意"cmd" 上的"-i" 选项以交互方式运行):

    {"command": "repl_open",
    "caption": "Python - RUN current file",
    "id": "repl_python_run",
    "mnemonic": "R",
    "args": {
       "type": "subprocess",
       "encoding": "utf8",
       "cmd": ["python", "-u", "-i", "$file_basename"],
       "cwd": "$file_path",
       "syntax": "Packages/Python/Python.tmLanguage",
       "external_id": "python",
       "extend_env": {"PYTHONIOENCODING": "utf-8"}
       }
    },
    
    1. 更改 id repl_python_run 为您喜欢的任何名称,例如 repl_my_first_env_python
    2. "cmd": ["python", "-u", "-i", "$file_basename"] 更改python commmand,以便在python 的虚拟环境可执行文件所在的任何位置使用,例如/home/me/.virtualenvs/my_first_env/bin/python(linux 示例)。 保存文件。
    3. 编辑项目以在"build_systems"的方括号内包含以下内容:

    (如果没有项目,新建Build System并粘贴下一段代码)

    {
        "name": "my first env",
        "target": "run_existing_window_command",
        "id": "repl_my_first_env_python",
        "file": "config/Python/Main.sublime-menu"
    },
    
    1. 最后保存

    Ctrl+Shift+B 时,您会看到 my first env 作为选项。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 2014-12-06
      • 2014-05-20
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2014-12-19
      相关资源
      最近更新 更多