Activer un virtualenv avec un script Python
Je veux activer un virtualenv instance à partir d'un script Python.
Je sais que c'est assez facile à faire, mais tous les exemples que j'ai vu l'utiliser pour exécuter des commandes à l'intérieur de l'env et puis fermez le processus secondaire.
Je veux simplement activer le virtualenv et de retour à la coque, de la même façon que bin/activate n'.
Quelque chose comme ceci:
$me: my-script.py -d env-name
$(env-name)me:
Est-ce possible?
Pertinentes:
virtualenv › l'Invocation d'une env à partir d'un script
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez exécuter un Python sous-processus en vertu de la virtualenv, vous pouvez le faire en exécutant le script à l'aide de l'interpréteur Python qui vit à l'intérieur de virtualenv s /bin/répertoire:
Cependant, si vous souhaitez activer le virtualenv dans le cadre actuel de l'interpréteur Python au lieu d'un sous-processus, vous pouvez utiliser le
activate_this.py
script:subprocess.Popen([venv_python_file, script_file])
?script_file
à partir d'un emplacement arbitraire, ou faut-il avoir pour être dans levirtualenv
répertoire?script_file
n'a pas à être dans le virtualenv répertoire, il peut être n'importe où.La solution la plus simple pour exécuter votre script sous virtualenv de l'interprète consiste à remplacer la valeur par défaut ligne shebang avec chemin d'accès à votre virtualenv l'interprète comme au début du script:
De rendre le script exécutable:
Exécuter le script:
Voila!
Il s'avère que, oui, le problème n'est pas simple, mais la solution est.
D'abord, j'ai dû créer un script shell pour envelopper la commande "source". Cela dit, j'utilise le "." au lieu de cela, car j'ai lu qu'il est préférable de l'utiliser de source pour les scripts Bash.
Puis, à partir de mon script Python, je peux simplement faire ceci:
Toute l'astuce réside dans le
--rcfile
argument.Lorsque l'interpréteur Python sorties il quitte le shell courant de l'activation de l'environnement.
Gagner!
os.system('/bin/bash --rcfile path/to/env/activate')
Vous savez, lorsqu'une instance de bash est lancé, il faut .bashrc comme un argument en faveur de l' --rcfile. Donc, il suffit de spécifier que le rcfile est votre activer fichier... Non ?cat ~/.bashrc env/bin/activate > env/bin/activate2 && /bin/bash --rcfile env/bin/activate2
Pour exécuter un autre environnement Python selon le rapport officiel Virtualenv documentation, dans la ligne de commande, vous pouvez spécifier le chemin complet vers l'exécutable Python binaire, c'est juste que (pas besoin pour le virtualenv avant):
La même chose s'applique si vous voulez appeler un script à partir de la ligne de commande avec votre virtualenv. Vous n'avez pas besoin de l'activer avant:
La même chose pour un environnement Windows (si c'est à partir de la ligne de commande ou à partir d'un script):
Juste une solution simple qui fonctionne pour moi. Je ne sais pas pourquoi vous avez besoin du script Bash qui fait une étape inutile (je me trompe ?)
Qui fait de ce dont vous avez besoin:
Puis, au lieu de la désactivation de l'environnement virtuel, juste Ctrl + D ou de sortie. C'est qu'une solution possible ou n'est-ce pas ce que vous vouliez?
Le processus de l'enfant de l'environnement est perdu dans le moment où il cesse d'exister, et le déplacement de l'environnement de contenu à partir de là, le parent est un peu délicat.
Vous avez probablement besoin de lancer un script shell (vous pouvez générer dynamiquement d'un /tmp) qui sera de sortie le virtualenv variables d'environnement dans un fichier, que vous pouvez ensuite lire dans le parent Python processus et de mettre en os.environ.
Ou tout simplement vous analyser l'activer script à l'aide de la ligne open ("/bin /activate"), extraire manuellement des choses, et de mettre en os.environ. Il est difficile, mais pas impossible.
La réponse sommet ne fonctionne que pour Python 2.x
Pour Python 3.x, utilisez ceci:
Référence: Ce qui est une alternative à execfile en Python 3?
Vous devez créer tous vos
virtualenv
s dans un dossier, commevirt
.En supposant que votre virtualenv nom de dossier est virt, si pas de changement, il
Copier les lignes ci-dessous...
Créer un fichier script shell et coller les lignes ci-dessus...
Subvention exécutable de l'autorisation de votre fichier:
Maintenant à l'exportation que la coutume chemin d'accès au dossier, de sorte que vous pouvez la trouver sur la ligne de commande en cliquant sur l'onglet...
export PATH=$PATH:"$HOME/custom"
Maintenant, vous pouvez l'utiliser à partir de n'importe où simplement en tapant la commande ci-dessous...
Suppose que c'est abc puis...