Je veux exécuter un script python executed.py
d'un autre python trigger.py
en utilisant le package de sous-processus. Le executed.py
doit être exécuté dans un environnement conda différent de trigger.py
(disons executed_env
et trigger_env
). Quelle est la meilleure façon de le faire ? Mon code actuel de trigger.py
est:
command = "python executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)
Il renvoie une erreur puisque executed.py
est exécuté dans le trigger_env
environnement.
J'ai fait des recherches sur toutes les méthodes intégrées conda et trouvé les éléments suivants. Le premier est une solution de contournement, et le second la solution intégrée de la solution finale (non disponible au moment de la rédaction de cet article).
conda-wrappers Guilherme Melo a créé un wrappers pour les exécutables python dans un environnement conda. Si vous le définissez comme interpréteur python dans votre IDE, par exemple PyCharm, il activera l'environnement conda à partir duquel il est appelé, puis appellera l'interpréteur python. Regardez ici dans la section "Création de wrappers conda": https://pypi.org/ project/exec-wrappers /
conda run Une longue discussion sur la page github de conda sur n moyen standard et rapide pour exécuter une commande dans un environnement a conduit à l'implémentation d'une nouvelle commande (en fait une ré-invocation telle qu'elle était disponible auparavant) : conda run
Il est décrit dans numéro # 732 et sera publié dans conda-4.6 avec un peu de chance en octobre 2018!
Si vous avez juste besoin d'utiliser l'autre python alors je crois que vous devez simplement utiliser le chemin complet vers l'autre python dans votre command
.
Essayez d'entrer dans votre executed_env
(c'est à dire. source activate executed_env
si Linux) et faites which python
. Supposons que renvoie HOME/.conda/envs/executed_env/bin/python
maintenant qui devient le python que vous utilisez dans votre commande - c'est-à-dire command = "HOME/.conda/envs/executed_env/bin/python executed.py --option1 -dir /path/to/dir"
. Ce
Par exemple, exécutons executed.py
dans une version python différente.
conda create -n py27 python=2.7
c'est le trigger_env
.conda create -n py35 python=3.5
c'est le executed_env
.source activate py35
puis which python
(appelons cela EXECUTED_PYTHON pour cette description). Désactiver via source deactivate
.Ensuite, nous créons executed.py
import sys
print(sys.version)
Puis le trigger.py
(inclus les arguments mais ils ne font rien)
command = "EXECUTED_PYTHON executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)
Maintenant, exécutons-le dans le trigger_env
- source activate py27
et python trigger.py
.
3.5.2 |Continuum Analytics, Inc. [...]
(3,5 étant la partie importante). Vous pouvez voir qu'il utilise l'autre python dans le executed_env
.