web-dev-qa-db-fra.com

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 (réalisés avec virtualenwrapper) et j'aimerais pouvoir spécifier quel venv utiliser avec chaque projet

Puisque j'utilise le plugin SublimeREPL pour avoir des builds personnalisés, comment puis-je spécifier quelle installation python avec laquelle construire mon projet?

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

désolé mon terrible anglais ...

39
Doc

J'espère que cela va 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 un interpréteur correct et exécutez-y un fichier si vous le souhaitez.
  • Après avoir défini l'interpréteur, aucune modification ou étape supplémentaire n'est nécessaire lors du basculement entre les projets.
  • Peut être facilement étendu pour récupérer automatiquement les variables d'environnement spécifiques au projet, les répertoires de travail souhaités, exécuter des tests, ouvrir un Django Shell, etc.

Faites-moi savoir si vous avez des questions ou si j'ai totalement raté le cap sur ce que vous cherchez à faire.

Définir l'interpréteur Python

  1. Ouvrez notre fichier de projet pour le modifier:

    Project -> Edit Project
    
  2. Ajoutez une nouvelle clé aux paramètres du projet qui pointe vers le virtualenv souhaité:

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

UNE "python_interpreter" La clé des paramètres du projet est également utilisée par des plugins comme Anaconda .

Créer un plugin pour récupérer ce paramètre et lancer un SublimeREPL

  1. Accédez au répertoire Packages de Sublime Text:

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

  3. Copiez 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'
                }
            )
    

Définir des raccourcis clavier

  1. Ouvrez le fichier de raccourci clavier utilisateur:

    Preferences -> Key Bindings - User
    
  2. Ajoutez quelques raccourcis clavier 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"
        }
    }
    
52
Soytoise

Il existe un sublime package text3, nommé Virtualenv, vous permettant de construire en utilisant le Python de votre virtualenv.

Il prend en charge toutes les versions de Python dans votre virtualenv, et fonctionne très bien pour moi (MacOS).

Pour l'installer, on vient command+Shift+P pour appeler le contrôle pacakge (installez-le si vous ne l'avez pas encore), puis tapez install. Tapez ensuite virtualenv, lorsque vous voyez qu'il apparaît, cliquez sur return pour l'installer.

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

Cliquez sur ici pour vérifier plus d'informations.

19
Jay Wong

Vous recherchez des systèmes de construction personnalisés.

Dans la barre de menus, cliquez sur Tools -> Build Systems -> New Build System...

Remplissez le modèle qu'il donne et enregistrez-le sous n'importe quel nom de fichier se terminant par .sublime-build dans votre dossier User.

Voici la documentation pour créer 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 ajoutez des variantes pour chaque env virtuel que vous souhaitez. (Voir variantes http://docs.sublimetext.info/en/latest /reference/build_systems.html#variants )

Celui que vous créez un système de construction, vous pouvez les basculer de

Tools -> Build Systems

(s'il n'est pas détecté automatiquement) et utilisez la palette de commandes (par défaut ctrl + shift p) pour basculer entre les variantes.

Le seul "piège" est le "cmd" paramètre pour décrire la commande à exécuter. Par défaut, il faut un tableau de chaînes pour s'exécuter en tant que commande, mais vous pouvez utiliser "Shell_cmd" au lieu d'utiliser simplement une chaîne de la façon dont vous l'exécuteriez via la ligne de commande.

4
Allison

J'ai une alternative. Il suffit de créer un nouveau "Build System" qui fonctionne comme dans l'environnement virtuel. Ici, nous l'appelons "my_python". Le but est d'utiliser ce système de build pour exécuter mon script directement sans laisser de sublime. Tu dois:

  1. Première, preferences->Browse Packages. Cela ouvrira un dossier sous lequel se trouvent les fichiers de configuration. Allez dans dir User et créez un nouveau fichier nommé my_python.sublime-build (composé du nom du système de génération suivi de .sublime_build. Après cela, accédez à Tools -> Build System et vous verrez une nouvelle option my_python.
  2. Ajoutez 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, changement /Users/Ted/bsd/vector/.v_venv/bin/python vers le chemin de votre environnement virtuel python.

  3. Ensuite, utilisez simplement la touche courte pour créer votre script.

Lorsque vous souhaitez modifier votre environnement virtuel, copiez simplement son chemin vers le fichier de configuration et tout est terminé. Peut-être que l'approche semble contenir beaucoup de travail, mais cela fonctionne bien et est pratique.

3
Guohua Cheng