Sublime Text 3 和虚拟环境
我有几个不同的 virtualenv
(是用 virtualenvwrapper
创建的),我想在每个项目中指定使用哪个 virtualenv
。
因为我在使用 SublimeREPL
插件来进行自定义构建,我该如何指定用哪个 Python 安装来构建我的项目呢?
举个例子,当我在做项目 A 时,我想用 venvA 的 Python 来运行脚本,而当我在做项目 B 时,我想用 venvB 来运行(使用不同的构建脚本)。
5 个回答
我刚开始接触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`
- 在一个专门的文件夹里用pipenv创建一个虚拟环境:
pipenv install BestPythonPackage
- 在这个专门的文件夹里运行:
pipenv shell
- 获取虚拟环境的路径;在shell里运行:
pipenv --venv
- 在Sublime中打开这个文件夹
- 创建一个新项目:
Project > Save Project As > "新项目名称"
- 从左侧文件列表中选择
"新项目名称".sublime-project
- 用下面的内容替换这个文件的内容并保存。路径就是你运行'pipenv --venv'时找到的那个。
{
"folders":
[
{
"path": "C:\\Users\\username\\.virtualenvs\\PythonEnvs-uKL8m4_g",
},
],
"build_systems": [
{
"name": "PYTHON_PIPENV",
"cmd": ["python", "$file"],
}
],
}
注意,Sublime中你专门文件夹的名字已经变成了虚拟环境的名字。
在这个文件夹里创建一个'hello.py'程序。
用
Tools > Build System > "PYTHON_PIPENV"
来构建这个程序,现在这个构建系统已经在列表里了。
当然,这里有个注意事项,就是你需要为每个新的虚拟环境都这样做。其他一些解决方案可以动态更新,但目前我还搞不明白。这是一个简单的解决方案。
'folders'部分告诉Sublime要查看哪个目录,'build_systems'给新的配置起个名字,并告诉Sublime对你打开的文件运行'python'。
你在寻找自定义构建系统。
在菜单栏中,点击 工具 -> 构建系统 -> 新建构建系统...
按照它给你的模板填写内容,然后把文件保存为任何以 .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"
,这样就可以用一串字符串来表示你如何通过命令行运行它。
我有一个替代方案。我们可以创建一个新的“构建系统”,让它在虚拟环境中运行。在这里我们称它为“my_python”。这个构建系统的目的是让你可以直接在Sublime中运行你的脚本,而不需要离开这个软件。你需要做以下几步:
- 首先,点击
preferences->Browse Packages
。这会打开一个文件夹,里面有设置文件。进入User
文件夹,创建一个新文件,命名为my_python.sublime-build
(这个名字由构建系统的名称加上.sublime_build
组成)。完成后,去Tools -> Build System
,你会看到一个新选项my_python
。 在那个文件里添加以下的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
改成你自己虚拟环境的路径。然后只需使用快捷键来构建你的脚本。
当你想要更换虚拟环境时,只需把新的路径复制到设置文件里,就完成了。也许这个方法看起来需要做很多工作,但它运行得很好,而且很方便。
有一个叫做 Virtualenv
的Sublime Text 3插件,它可以让你使用虚拟环境中的Python来构建项目。
这个插件支持你虚拟环境中的任何版本的Python,对我来说在MacOS上运行得很好。
安装这个插件很简单,先按下 command + Shift + P 来打开包管理器(如果你还没有安装它,先安装一下),然后输入 install
。接着输入 virtualenv
,当它出现时,按一下 return 来安装。
安装完成后,选择 Tools
--> Build System
--> Python + Virtualenv
。这样你就可以按 command + B 来运行你的Python项目了。
点击 这里 可以查看更多信息。
希望这能符合你的想法。我试着简化我的解决方案,去掉一些你可能不需要的东西。
这种方法的优点有:
- 只需按一个按钮就能启动SublimeREPL,并且可以选择在其中运行一个文件。
- 设置好解释器后,切换项目时不需要再做任何更改或额外步骤。
- 可以轻松扩展,自动获取项目特定的环境变量、所需的工作目录、运行测试、打开Django命令行等。
如果你有任何问题,或者我完全没有理解你想做的事情,请告诉我。
设置项目的Python解释器
打开我们的项目文件进行编辑:
Project -> Edit Project
在项目设置中添加一个新的键,指向所需的虚拟环境:
"settings": { "python_interpreter": "/home/user/.virtualenvs/example/bin/python" }
一个 "python_interpreter"
的项目设置键也被像 Anaconda 这样的插件使用。
创建插件以获取此设置并启动SublimeREPL
浏览到Sublime Text的
Packages
目录:Preferences -> Browse Packages...
为我们的插件创建一个新的Python文件,命名为:
project_venv_repls.py
将以下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' } )
设置快捷键
打开用户键绑定文件:
Preferences -> Key Bindings - User
添加一些键绑定来使用这个插件。以下是一些示例:
// 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"
}
}