Sublime text3 y virtualenvs


Soy totalmente nuevo con sublime3, pero no pude encontrar nada útil para mi problema...

Tengo diferentes virtualenvs (hechos con virtualenwrapper) y me gustaría poder especificar qué venv usar con cada proyecto

Dado que estoy usando el plugin SublimeREPL para tener compilaciones personalizadas, ¿cómo puedo especificar con qué instalación de python compilar mi proyecto?

Por ejemplo, cuando trabajo en el proyecto A quiero ejecutar scripts con python de venvA, y cuando trabajo en el proyecto B i quiere ejecutar cosas con venvB (usando un script de compilación diferente)

Lo siento, mi terrible inglés...
Author: Doc, 2014-07-25

4 answers

Esperemos que esto esté en la línea que estás imaginando. Intenté simplificar mi solución y eliminar algunas cosas que probablemente no necesita.

Las ventajas de este método son:

  • Botón único presione para lanzar un SublimeREPL con el intérprete correcto y ejecute un archivo en él si lo desea.
  • Después de configurar el intérprete, no se necesitan cambios o pasos adicionales al cambiar entre proyectos.
  • Se puede extender fácilmente para recoger automáticamente subir variables de entorno específicas del proyecto, directorios de trabajo deseados, ejecutar pruebas, abrir un shell de Django, etc.

Hazme saber si tienes alguna pregunta, o si me perdí totalmente la marca en lo que estás buscando hacer.

Establecer el Intérprete de Python del Proyecto

  1. Abra nuestro archivo de proyecto para editarlo:

    Project -> Edit Project
    
  2. Agregue una nueva clave a la configuración del proyecto que apunte al virtualenv deseado:

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

Un proyecto "python_interpreter" la clave de configuración también es utilizada por complementos como Anaconda.

Crear plugin para agarrar esta configuración y lanzar un SublimeREPL

  1. Busque en el directorio de Sublime Text Packages:

    Preferences -> Browse Packages...
    
  2. Crear un nuevo archivo python para nuestro plugin, algo como: project_venv_repls.py

  3. Copie el siguiente código python en este nuevo archivo:

    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'
                }
            )
    

Establecer teclas de acceso rápido

  1. Abrir keybind de usuario archivo:

    Preferences -> Key Bindings - User
    
  2. Agregue algunos keybinds para hacer uso del plugin. Algunos ejemplos:

    // 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"
        }
    }
    
 42
Author: Soytoise,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-28 19:19:56

Hay un paquete sublime text3, llamado Virtualenv, que le permite construir usando Python desde su virtualenv.

Es compatible con cualquier versión de Python en su virtualenv, y funciona muy bien para mí (macOS).

Para instalarlo, solo ejecutamos el comando +Shift+P para llamar a pacakge control (instálelo si aún no lo tiene), escriba install. A continuación escriba virtualenv, cuando vea que aparece, haga clic en return para instalarlo.

Después de instalar lo, seleccione Tools --> Build System --> Python + Virtualenv. Entonces puedes usar el comando + B para ejecutar sus proyectos de Python.

Haga clic en Aquí para consultar más información.

 11
Author: Jay Wong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-29 00:34:28

Estás buscando sistemas de compilación personalizados.

En la barra de menús, haga clic en Tools -> Build Systems -> New Build System...

Rellene la plantilla que da y guárdela bajo cualquier nombre de archivo que termine en .sublime-build en su carpeta User.

Aquí está la documentación para hacer sistemas de compilación personalizados:

Http://docs.sublimetext.info/en/latest/reference/build_systems.html

Recomiendo hacer un sistema de compilación personalizado para scripts python, luego agregar variantes para cada env virtual que desee. (ver variantes http://docs.sublimetext.info/en/latest/reference/build_systems.html#variants )

Una vez que haces un sistema de compilación, puedes cambiarlos de

Tools -> Build Systems

(si no se detecta automáticamente) y utilice la paleta de comandos (por defecto ctrl + shift p) para cambiar entre variantes.

El único "gotcha" es el parámetro "cmd" para describir qué comando ejecutar. De forma predeterminada, toma una matriz de cadenas para ejecutarse como un comando, pero puede usar "shell_cmd" en su lugar para usar una cadena de cómo la ejecutaría vía línea de comandos.

 3
Author: Allison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-27 20:34:59

Tengo una alternativa. Simplemente creando un nuevo 'Sistema de compilación' que se ejecuta como si estuviera en el entorno virtual. Aquí lo llamamos 'my_python'. El objetivo es usar este sistema de compilación para ejecutar mi script directamente sin salir de sublime. Necesitas:

  1. Primero, preferences->Browse Packages. Esto abrirá una carpeta bajo la cual se encuentran los archivos de configuración. Entra en dir User y crea un nuevo archivo llamado my_python.sublime-build (compuesto por el nombre del sistema de compilación seguido de .sublime_build. Después de hacer esto, vaya a Tools -> Build System y verá una nueva opción my_python.
  2. Agregue la siguiente configuración JSON a ese archivo.

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

    Dentro de shell_cmd, cambie /Users/Ted/bsd/vector/.v_venv/bin/python a la ruta de acceso de su entorno virtual python.

  3. A continuación, solo tiene que utilizar la tecla corta para construir su script.

Cuando desee cambiar su entorno virtual, simplemente copie su ruta al archivo de configuración y listo. Tal vez el enfoque parece contener un montón de trabajo, pero funciona bien y conveniente.

 2
Author: Guohua Cheng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-14 03:23:43