Sublime text3 et virtualenvs

je suis totalement nouveau avec sublime3, mais je n'ai rien trouvé d'utile pour mon problème...

j'ai différents virtualenvs (fait avec virtualenwrapper) et j'aimerais pouvoir spécifier quel venv utiliser avec chaque projet

puisque J'utilise le plugin SublimeREPL pour avoir des constructions personnalisées, Comment puis-je spécifier avec quelle installation python construire mon projet?

par exemple, quand je travaille sur le projet A, je veux lancer des scripts avec python de venvA, et quand je travailler sur le projet B je veux exécuter des choses avec venvB (en utilisant un script de construction différent)

désolé mon terrible en anglais...

28
demandé sur Doc 2014-07-25 23:18:41

4 réponses

espérons que ce soit dans le sens que vous imaginez. J'ai tenté de simplifier ma solution et de supprimer certaines choses dont vous n'avez probablement pas besoin.

les avantages de cette méthode sont:

  • appuyez sur un seul bouton pour lancer un SublimeREPL avec l'interpréteur correct et exécuter un fichier si vous le souhaitez.
  • après avoir paramétré l'interpréteur, aucun changement ou pas supplémentaire n'est nécessaire pour passer d'un projet à l'autre.
  • Peut être facilement étendu pour prendre automatiquement des variables d'environnement spécifiques au projet, répertoires de travail désirés, exécuter des tests, ouvrir un shell Django, etc.

faites-moi savoir si vous avez des questions, ou si j'ai totalement manqué la marque sur ce que vous cherchez à faire.

définir L'interpréteur Python du projet

  1. Ouvrir notre fichier de projet pour l'édition:

    Project -> Edit Project
    
  2. ajouter une nouvelle clé aux paramètres du projet qui indique l'souhaité virtualenv:

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

"python_interpreter" la touche project settings est aussi utilisée par les plugins comme Anaconda.

créer un plugin pour saisir ce paramètre et lancer un SublimeREPL

  1. Parcourir pour Sublime Text Packages répertoire:

    Preferences -> Browse Packages...
    
  2. Créer un nouveau fichier python pour notre plugin, quelque chose comme: project_venv_repls.py

  3. copier le code python suivant dans ce nouveau fichier:

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

Raccourcis

  1. ouvrir le fichier keybind de l'utilisateur:

    Preferences -> Key Bindings - User
    
  2. ajouter quelques touches pour utiliser le plugin. Quelques exemples:

    // 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
répondu Soytoise 2014-07-28 19:19:56

Il y a un sublime texte3 package, nommé Virtualenv, vous permettant de construire en utilisant le Python à partir de votre virtualenv.

il supporte toutes les versions de Python dans votre virtualenv, et fonctionne très bien pour moi (MacOS).

Pour l'installer, nous avons juste commande+Maj+ P pour appeler le contrôle pacakge (installez-le si vous ne l'avez pas encore), tapez install. Suivant le type virtualenv, quand vous voyez qu'il apparaît, cliquez retour pour l'installer.

Après l'installation, sélectionnez Tools--> Build System-->Python + Virtualenv. Ensuite, vous pouvez utiliser commande+ B pour exécuter vos projets Python.

Cliquez sur Ici pour en savoir plus.

11
répondu Jay Wong 2016-06-29 00:34:28

vous cherchez des systèmes de construction sur mesure.

dans la barre de menu, cliquez Tools -> Build Systems -> New Build System...

Remplir le modèle et l'enregistrer sous un nom de fichier se terminant par dossier.

Voici la documentation pour faire des systèmes de construction personnalisés:

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

je recommande de créer un système de construction personnalisé pour les scripts python, puis d'ajouter des variantes pour chaque env virtuel que vous voulez. (voir les variantes http://docs.sublimetext.info/en/latest/reference/build_systems.html#variants)

si vous faites un système de construction, vous pouvez les changer de

Tools -> Build Systems

(si ce n'est pas détecté automatiquement) et utilisez la Palette de commandes (par défaut ctrl + shift p) pour passer d'une variante à l'autre.

Le seul "piège" est le "cmd" paramètre pour décrire quelle commande Exécuter. Par défaut, il faut un tableau de chaînes pour exécuter une commande, mais vous pouvez utiliser "shell_cmd" au lieu d'utiliser une chaîne de comment vous pouvez vous l'exécuter via la ligne de commande.

3
répondu Allison 2014-07-27 20:34:59

j'ai une alternative. Il suffit de créer un nouveau "système de construction" qui fonctionne comme dans l'environnement virtuel. Ici, nous l'appelons "my_python'. L'objectif est d'utiliser ce système de construction pour exécuter mon script directement sans quitter sublime. Vous avez besoin de:

  1. tout d'Abord, preferences->Browse Packages. Ceci ouvrira un dossier sous lequel se trouve la configuration des fichiers. Aller à l'intérieur dir User et créer un nouveau fichier nommé my_python.sublime-build (composé du nom du système de compilation suivi de .sublime_build. Après cela, allez à Tools -> Build System et vous verrez une nouvelle option my_python.
  2. ajouter les paramètres JSON suivants à ce fichier.

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

    à l'Intérieur shell_cmd, modifiez /Users/Ted/bsd/vector/.v_venv/bin/python le chemin de votre environnement virtuel python.

  3. alors utilisez la touche courte pour construire votre script.

lorsque vous voulez changer votre environnement virtuel, copiez simplement son chemin vers le fichier de configuration et tout est fait. Peut-être que l'approche semble contenir beaucoup de travail, mais il fonctionne bien et pratique.

2
répondu Guohua Cheng 2017-09-14 03:23:43