【问题标题】:Define virtualenv and linter executables relative to sublime-project in sublime text 3在 sublime text 3 中定义相对于 sublime-project 的 virtualenv 和 linter 可执行文件
【发布时间】:2019-09-05 00:40:03
【问题描述】:

我正在尝试找出使用 sublime text 3 和 python 虚拟环境的最佳设置。

我正在使用 Virtualenv 包,我的典型项目结构由一个根目录组成,其中包括一个始终称为 venv 的虚拟环境,位于我的项目的根文件夹中。为了访问 virtualenv,我必须在 sublime-project 文件中的每个项目基础上指定 venv 的位置并设置 virtualenv 条目。我还必须指定我正在使用的所有 linter 的绝对路径。

这没什么大不了的,但是每次我在玩一个新的小项目时设置这些条目肯定很乏味。

我希望有一个流畅的解决方案,其中 Virtualenv 包会自动检测最近的 venv 和 linter 可执行文件。

类似于默认的 sublime-project 文件,它将为所有常用路径获取相对值。

我试着摆弄,但除了硬编码路径之外没有得到任何东西。

我觉得这是一个普遍的问题,所以我认为必须有一个简单的解决方案。

【问题讨论】:

    标签: python sublimetext3 virtualenv


    【解决方案1】:

    我自己设法解决了我的问题,如果有人感兴趣,我最终会这样做:

    首先,显然我不是唯一一个遇到这个问题的人(herehereherehere,它们似乎都有类似的问题)但我花了一些时间挖掘最终找到一个适合我的简单答案。

    重申一下,我的问题是为我拥有的每个小项目找到一种简单的方法来绕过虚拟环境和 linter 可执行文件的硬接线路径,而无需进行任何全局安装。

    • 在虚拟环境的情况下,只需使用包控制在项目根文件夹中找到所需的 venv,就可以避免在 sublime-project 文件中进行任何配置(Ctrl + Shift + P -> VirtualEnv:激活)。该目录会自动添加到 sublime-project 文件中,并且通过选择 python + virtualenv 构建系统会在以后的构建中自动调用,无论 venv 是否实际激活。很明显,必须安装 Virtualenv 软件包才能使其正常工作。
    • 此外,为了不必一遍又一遍地重新定义 linter 可执行文件,SublimeLinter Documentation 声明可以调用 SublimeTexts expand_variables API 来访问一堆使用${variable_name} 语法预定义变量以及所有环境变量。但是,文档没有说明的内容 - 并且显然阻止了许多其他人实际解决他们的问题 - 变量扩展在 SublimeLinter.paths 属性中作为 kaste 不起作用在this thread 中指出。因此,变量扩展确实起作用,它只需要直接针对 linter 可执行文件。就我而言,我使用的是 pythons pyflake 和 pycodestyle,我的 SublimeLinter 用户设置现在看起来像这样
    // SublimeLinter Settings - User
    {
    
    ***
    
        // Provide extra paths to be searched when locating system executables.
        "paths": {
            "linux": [],
            "osx": [],
            "windows": [],
        },
    
        "linters": {
            "pycodestyle": {
                "executable": "${project_path}\\venv\\Scripts\\pycodestyle.exe",
            },
            "pyflakes": {
                "executable": "${project_path}\\venv\\Scripts\\pyflakes.exe",
            }
        },
    }
    

    我在哪里访问 project_path 变量以从那里创建可执行文件的完整路径。这只需要我遵循一致的约定来命名我的虚拟环境 venv 并将它们放在与我的 sublime-project 文件相同的目录中,并将我可能直接使用的任何 linter 安装到项目虚拟环境中。

    此设置的一个优点是它适用于 python2 和 python3,并根据用于 venv 的版本正确地检查代码,而无需任何更多设置。

    这么小的调整有很多文字,但也许其他人从 sublime 开始可能会觉得这很有用。

    【讨论】:

    • 非常感谢您写下这篇文章。我阅读了其他多篇 SO 帖子,但无法让他们的解决方案在 ST3 中使用 virtualenv 为我工作。只有一件事我无法理解:你是如何独立设置每个项目的 SublimeLinter 设置的?我是否必须事先启动一个单独的 venv 并从终端启动 ST3?
    • SublimeLinter 设置独立于首选项 -> 包设置中的项目设置。这种特殊的设置要求为您的每个项目创建一个名为 venv 的 virtualenv。然后您必须创建一个 sublime 项目 并将其保存到 venv 所在的同一文件夹中。这样 ST 总是可以找到相应的 venv每个项目,因为它们的名称相同,并且它们的路径是从 sublime 项目的保存位置确定的。完成后无需使用终端,但您必须为每个项目使用单独的 venv。
    猜你喜欢
    • 2014-09-17
    • 2016-05-30
    • 2014-06-29
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2014-05-14
    • 2015-05-07
    • 2016-02-01
    相关资源
    最近更新 更多