Question

J'utilise virtualenvwrapper avec un projet Django qui a une tâche de gestion qui écrit automatiquement certains fichiers de configuration, donc l'utilisateur n'a qu'à

./manage.py generate_configuration > much_nice.conf

Et puis déplacez le fichier ailleurs.L'un des fichiers de configuration générés est une tâche pour superviseur qui lance un ouvrier céleri.Le problème que j'ai c'est que je ne sais pas comment afficher le chemin de l'exécutable céleri c'est dans le dossier bin du virtualenv.En gros, j'aimerais avoir le résultat de la commande

which celery

Une option consiste à utiliser sys.executable, récupérez le dossier (qui semble être le bin dossier du virtualenv) et c'est tout...mais je ne suis pas sur.

Virtualenv n'a-t-il aucune méthode pour obtenir le chemin lui-même ?

Était-ce utile?

La solution

Le chemin d'accès à l'environnement virtuel se trouve dans la variable d'environnement VIRTUAL_ENV

echo $VIRTUAL_ENV

Autres conseils

Le VIRTUAL_ENV La variable d'environnement 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

S'il n'est pas 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'

OMI, vous devriez utiliser sys.executable Pour obtenir le chemin de votre exécutable Python, puis construisez le chemin vers le 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)

Vous pouvez utiliser tissu faire de telles choses depuis python

>>> from fabric.api import local
>>> local('which celery')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top