Sublime Text 3 和虚拟环境

50 投票
5 回答
57843 浏览
提问于 2025-04-18 14:48

我有几个不同的 virtualenv(是用 virtualenvwrapper 创建的),我想在每个项目中指定使用哪个 virtualenv

因为我在使用 SublimeREPL 插件来进行自定义构建,我该如何指定用哪个 Python 安装来构建我的项目呢?

举个例子,当我在做项目 A 时,我想用 venvA 的 Python 来运行脚本,而当我在做项目 B 时,我想用 venvB 来运行(使用不同的构建脚本)。

5 个回答

2

我刚开始接触Python、pipenv,尤其是Sublime Text 3,找不到简单的方法来在Windows 10上使用pipenv虚拟环境和Sublime。

这个方法对于没有太多系统经验的人来说非常好用。

我的设置步骤:

 Windows 10 Pro
 Python 3.9
 Sublime Text 3
 Dedicated directory for Python virtual environment 'C:Users\username\VirtualEnvs`
 
  1. 在一个专门的文件夹里用pipenv创建一个虚拟环境:pipenv install BestPythonPackage
  2. 在这个专门的文件夹里运行:pipenv shell
  3. 获取虚拟环境的路径;在shell里运行:pipenv --venv
  4. 在Sublime中打开这个文件夹
  5. 创建一个新项目:Project > Save Project As > "新项目名称"
  6. 从左侧文件列表中选择"新项目名称".sublime-project
  7. 用下面的内容替换这个文件的内容并保存。路径就是你运行'pipenv --venv'时找到的那个。
{
    "folders":
    [
        {
            "path": "C:\\Users\\username\\.virtualenvs\\PythonEnvs-uKL8m4_g",           
        },
    ],
    
    "build_systems": [
      {
      "name": "PYTHON_PIPENV",
      "cmd": ["python", "$file"],     
      }
    ], 
}
  1. 注意,Sublime中你专门文件夹的名字已经变成了虚拟环境的名字。

  2. 在这个文件夹里创建一个'hello.py'程序。

  3. Tools > Build System > "PYTHON_PIPENV"来构建这个程序,现在这个构建系统已经在列表里了。

当然,这里有个注意事项,就是你需要为每个新的虚拟环境都这样做。其他一些解决方案可以动态更新,但目前我还搞不明白。这是一个简单的解决方案。

'folders'部分告诉Sublime要查看哪个目录,'build_systems'给新的配置起个名字,并告诉Sublime对你打开的文件运行'python'。

5

你在寻找自定义构建系统。

在菜单栏中,点击 工具 -> 构建系统 -> 新建构建系统...

按照它给你的模板填写内容,然后把文件保存为任何以 .sublime-build 结尾的名字,放到你的 User 文件夹里。

这里有关于如何制作自定义构建系统的文档:

https://www.sublimetext.com/docs/3/build_systems.html

我建议为 Python 脚本制作一个自定义构建系统,然后为你想要的每个虚拟环境添加变体。(关于变体的更多信息可以查看 https://www.sublimetext.com/docs/3/build_systems.html#option-variants

一旦你创建了构建系统,你可以从

Tools -> Build Systems

(如果没有自动检测到的话)切换它们,并使用命令面板(默认是 ctrl + shift + p)在变体之间切换。

唯一需要注意的是 "cmd" 参数,它用来描述要运行的命令。默认情况下,它接受一个字符串数组作为命令,但你也可以使用 "shell_cmd",这样就可以用一串字符串来表示你如何通过命令行运行它。

13

我有一个替代方案。我们可以创建一个新的“构建系统”,让它在虚拟环境中运行。在这里我们称它为“my_python”。这个构建系统的目的是让你可以直接在Sublime中运行你的脚本,而不需要离开这个软件。你需要做以下几步:

  1. 首先,点击 preferences->Browse Packages。这会打开一个文件夹,里面有设置文件。进入 User 文件夹,创建一个新文件,命名为 my_python.sublime-build(这个名字由构建系统的名称加上 .sublime_build 组成)。完成后,去 Tools -> Build System,你会看到一个新选项 my_python
  2. 在那个文件里添加以下的JSON设置。

    {
        "shell_cmd": "/Users/Ted/bsd/vector/.v_venv/bin/python -u \"$file\"",
        "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
        "selector": "source.python"
    }
    

    shell_cmd 里,把 /Users/Ted/bsd/vector/.v_venv/bin/python 改成你自己虚拟环境的路径。

  3. 然后只需使用快捷键来构建你的脚本。

当你想要更换虚拟环境时,只需把新的路径复制到设置文件里,就完成了。也许这个方法看起来需要做很多工作,但它运行得很好,而且很方便。

23

有一个叫做 Virtualenv 的Sublime Text 3插件,它可以让你使用虚拟环境中的Python来构建项目。

这个插件支持你虚拟环境中的任何版本的Python,对我来说在MacOS上运行得很好。

安装这个插件很简单,先按下 command + Shift + P 来打开包管理器(如果你还没有安装它,先安装一下),然后输入 install。接着输入 virtualenv,当它出现时,按一下 return 来安装。

安装完成后,选择 Tools --> Build System --> Python + Virtualenv。这样你就可以按 command + B 来运行你的Python项目了。

点击 这里 可以查看更多信息。

65

希望这能符合你的想法。我试着简化我的解决方案,去掉一些你可能不需要的东西。

这种方法的优点有:

  • 只需按一个按钮就能启动SublimeREPL,并且可以选择在其中运行一个文件。
  • 设置好解释器后,切换项目时不需要再做任何更改或额外步骤。
  • 可以轻松扩展,自动获取项目特定的环境变量、所需的工作目录、运行测试、打开Django命令行等。

如果你有任何问题,或者我完全没有理解你想做的事情,请告诉我。

设置项目的Python解释器

  1. 打开我们的项目文件进行编辑:

     Project -> Edit Project
    
  2. 在项目设置中添加一个新的键,指向所需的虚拟环境:

     "settings": {
         "python_interpreter": "/home/user/.virtualenvs/example/bin/python"
     }
    

一个 "python_interpreter" 的项目设置键也被像 Anaconda 这样的插件使用。

创建插件以获取此设置并启动SublimeREPL

  1. 浏览到Sublime Text的 Packages 目录:

    Preferences -> Browse Packages...
    
  2. 为我们的插件创建一个新的Python文件,命名为: project_venv_repls.py

  3. 将以下Python代码复制到这个新文件中:

    import sublime_plugin
    
    
    class ProjectVenvReplCommand(sublime_plugin.TextCommand):
        """
        Starts a SublimeREPL, attempting to use project's specified
        python interpreter.
        """
    
        def run(self, edit, open_file='$file'):
            """Called on project_venv_repl command"""
            cmd_list = [self.get_project_interpreter(), '-i', '-u']
    
            if open_file:
                cmd_list.append(open_file)
    
            self.repl_open(cmd_list=cmd_list)
    
        def get_project_interpreter(self):
            """Return the project's specified python interpreter, if any"""
            settings = self.view.settings()
            return settings.get('python_interpreter', '/usr/bin/python')
    
        def repl_open(self, cmd_list):
            """Open a SublimeREPL using provided commands"""
            self.view.window().run_command(
                'repl_open', {
                    'encoding': 'utf8',
                    'type': 'subprocess',
                    'cmd': cmd_list,
                    'cwd': '$file_path',
                    'syntax': 'Packages/Python/Python.tmLanguage'
                }
            )
    

设置快捷键

  1. 打开用户键绑定文件:

     Preferences -> Key Bindings - User
    
  2. 添加一些键绑定来使用这个插件。以下是一些示例:

    // Runs currently open file in repl
    {
        "keys": ["f5"],
        "command": "project_venv_repl"
    },
    // Runs repl without any file
    {
        "keys": ["f6"],
        "command": "project_venv_repl",
        "args": {
            "open_file": null
        }
    },
    // Runs a specific file in repl, change main.py to desired file
    {
        "keys": ["f7"],
        "command": "project_venv_repl",
        "args": {
            "open_file": "/home/user/example/main.py"
        }
    }

撰写回答