J'utilise virtualenvwrapper avec un projet Django comportant une tâche de gestion qui écrit automatiquement certains fichiers de configuration, de sorte que l'utilisateur doit simplement
./manage.py generate_configuration > much_Nice.conf
Et déplacez ensuite le fichier ailleurs. L'un des fichiers de configuration générés est une tâche pour supervisord qui lance un agent de céleri. Le problème que je reçois est que je ne sais pas comment afficher le chemin de l'exécutable céleri qui est dans le dossier bin de virtualenv. Essentiellement, j'aimerais avoir la sortie de la commande
which celery
Une option consiste à utiliser sys.executable
, obtenir le dossier (qui semble être le dossier bin
du virtualenv) et c'est tout ... mais je ne suis pas sûr.
Virtualenv ne dispose-t-il d'aucune méthode pour obtenir le chemin lui-même?
Le chemin d'accès à l'environnement virtuel se trouve dans la variable d'environnement VIRTUAL_ENV.
echo $VIRTUAL_ENV
Vous pouvez utiliser fabric pour faire de telles choses à partir de python
>>> from fabric.api import local
>>> local('which celery')
La variable d'environnement VIRTUAL_ENV
n'est disponible que si l'environnement virtuel est activé.
Par exemple:
$ python3 -m venv myapp
$ source myapp/bin/activate
(myapp) $ python -c "import os; print(os.environ['VIRTUAL_ENV'])"
/path/to/virtualenv/myapp
Si non activé, vous avez une exception:
(myapp) $ deactivate
$ myapp/bin/python -c "import os; print(os.environ['VIRTUAL_ENV'])"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib64/python3.4/os.py", line 635, in __getitem__
raise KeyError(key) from None
KeyError: 'VIRTUAL_ENV'
Messagerie Internet uniquement, vous devez utiliser sys.executable
pour obtenir le chemin de votre exécutable Python, .__, puis construire le chemin du céleri:
import sys
import os
celery_name = {'linux': 'celery', 'win32': 'celery.exe'}[sys.platform]
celery_path = os.path.join(os.path.dirname(sys.executable), celery_name)