Sublime text 3 和 virtualenv

Posted

技术标签:

【中文标题】Sublime text 3 和 virtualenv【英文标题】:Sublime text3 and virtualenvs 【发布时间】:2014-09-17 17:44:21 【问题描述】:

我有不同的virtualenv(使用virtualenwrapper 制作),我希望能够指定每个项目使用哪个virtualenv

由于我使用 SublimeREPL 插件进行自定义构建,我如何指定使用哪个 python 安装来构建我的项目?

例如,当我处理项目 A 时,我想用 venvA 的 python 运行脚本,而当我处理项目 B 时,我想用 venvB 运行东西(使用不同的构建脚本)。

【问题讨论】:

您能具体说明“使用 SublimeREPL 插件进行自定义构建”的含义吗?有一种方法可以通过按下按钮自动打开和运行项目的 virtualenv(在 SublimeREPL 中)的 python 脚本。不过,我不确定这是否正是您想要的。 如何设置项目以在特定的 virtualenv 中运行? 没有我知道的内置方式。我的方法涉及为“python_interpreter”设置项目级设置,然后使用一个小的自定义插件来获取它并使用它运行 sublimeREPL。如果您愿意,我可以在稍后有时间时提供更详细的完整答案。 是的,这将非常有用:) 【参考方案1】:

希望这符合您的想象。我试图简化我的解决方案并删除一些您可能不需要的东西。

这种方法的优点是:

单键按下以启动具有正确解释器的 SublimeREPL如果需要,在其中运行文件。 设置解释器后,在项目之间切换时无需更改或额外步骤。 可以轻松扩展以自动获取项目特定的环境变量、所需的工作目录、运行测试、打开 Django shell 等。

如果您有任何问题,或者我完全错过了您想要做什么的标记,请告诉我。

设置项目的 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"
        
    

【讨论】:

很棒的帖子和很好的答案,但我无法让它工作......我在我的 venv 中安装了烧瓶只是为了尝试你的脚本,但我无法制作 .sublime-project崇高读取的设置:它似乎忽略了它:( nvm,找到问题了,我是个白痴...感谢您的宝贵时间! 没问题,很高兴它有帮助。 是否有可能将其纳入新的构建系统?我想用 ctrl+shift+b 选择这个构建系统... 我会在 project_venv_repls 中添加“'external_id': 'python'”这行 - 这允许键盘快捷键转移到 repl 和代码评估。否则它就在现场!【参考方案2】:

有一个 sublime text3 包,名为 Virtualenv,允许您使用来自 virtualenv 的 Python 进行构建。

它在你的 virtualenv 中支持任何版本的 Python,并且对我 (MacOS) 非常有效。

要安装它,我们只需command+Shift+P调出packakge控件(如果没有安装它然而),然后输入install。接下来输入virtualenv,当你看到它出现时点击return 来安装它。

安装后选择Tools --> Build System --> Python + Virtualenv。然后你可以使用 command + B 来执行你的 Python 项目。

点击Here查看更多信息。

【讨论】:

我在哪里添加路径到我的环境?例如:~/tensorflow/bin/activate 有调用“VirtualEnv:Add Directory” 打开菜单工具,命令面板(command+Shift+P)然后选择“VirtualEnv:添加目录”,填写下你的VirtualEnv的路径。不要忘记使用“VirtualEnv:Activate”来激活 除了@user1767754 - 命令面板中的“VirtualEnv:Add New”对我有帮助。 我添加了本地virtualenv目录(命名为sites/path/venv3),我尝试修改用户设置也添加了"executable": "python -m venv3",""extra_paths": ["user/sites/path/venv3/bin/python3"]但仍然有错误python: realpath couldn't resolve "/Library/Frameworks/Python.framework/Versions/3.6/bin/python" - 你能帮助@Jay Wong 【参考方案3】:

我有一个选择。只需创建一个新的“构建系统”,它就像在虚拟环境中一样运行。在这里,我们称之为“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改成你的python虚拟环境的路径。

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

当您想更改虚拟环境时,只需将其路径复制到设置文件即可。也许这种方法看起来包含很多工作,但它运作良好且方便。

【讨论】:

【参考方案4】:

您正在寻找自定义构建系统。

在菜单栏中,点击Tools -> Build Systems -> New Build System...

填写它提供的模板并将其以任何以.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" 来代替仅使用通过命令行运行它的字符串。

【讨论】:

【参考方案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 > "New Project Name" 从左栏的文件列表中选择"New Project Name".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 text 3 和 virtualenv的主要内容,如果未能解决你的问题,请参考以下文章

解决openSUSE中Sublime Text 3的中文显示和输入问题

Sublime Text 3的常用插件的安装和介绍

sublime text 3配置使用python

sublime text 3 显示空格和Tab

Mac LaTeX 环境之 Sublime Text 3 + MacTex

MAC下的Sublime Text关闭自动更新提示,关闭更新检查,适用于Sublime 3和Sublime 4