Quiero ejecutar una secuencia de comandos de python executed.py desde otra secuencia de comandos de python trigger.py usando el paquete de subproceso. El executed.py debe ejecutarse en un entorno de conda diferente al de trigger.py (digamos executed_env y trigger_env ). ¿Cuál es la mejor manera de hacer eso? Mi código actual de trigger.py es:
command = "python executed.py --option1 -dir /path/to/dir" args = shlex.split(command) my_subprocess = subprocess.Popen(args) Devuelve un error ya que execute.py se executed.py en el entorno trigger_env .
Investigué un poco sobre los métodos integrados de conda y encontré lo siguiente. La primera es una solución alternativa y la segunda es la solución final incorporada (no disponible al momento de escribir esta publicación).
envoltorios de conda . Guilherme Melo creó un contenedor para los ejecutables de python dentro de un entorno conda. Si lo configura como el intérprete de python en su IDE, por ejemplo, PyCharm, activará el entorno conda desde el que se llama y luego llamará al intérprete de python. Mire aquí en la sección "Creación de contenedores conda": https://pypi.org/project/exec-wrappers/
corrida Una larga discusión en la página de conda github sobre una forma estándar y rápida de ejecutar un comando dentro de un entorno condujo a la implementación de un nuevo comando (en realidad, una reinvocación como estaba disponible antes): conda run
Se describe en el número 7320 y se lanzará en conda-4.6, con suerte, en octubre de 2018.
Si solo necesita usar el otro python, creo que simplemente necesita usar la ruta completa al otro python en su command .
Intente ingresar a su executed_env (es decir source activate executed_env si es Linux) y haga which python . Supongamos que devuelve HOME/.conda/envs/executed_env/bin/python ahora que se convierte en el python que usa en su comando, es decir, command = "HOME/.conda/envs/executed_env/bin/python executed.py --option1 -dir /path/to/dir" . Este
Por ejemplo, ejecute executed.py en una versión diferente de python.
conda create -n py27 python=2.7 este es trigger_env .conda create -n py35 python=3.5 este es el env executed_env .source activate py35 y luego which python (llamémoslo EXECUTED_PYTHON para esta descripción). Desactivar a través de source deactivate . Luego creamos executed.py
import sys print(sys.version) Luego el trigger.py (incluye los argumentos pero no hacen nada)
command = "EXECUTED_PYTHON executed.py --option1 -dir /path/to/dir" args = shlex.split(command) my_subprocess = subprocess.Popen(args) Ahora vamos a ejecutarlo en trigger_env -- source activate py27 y python trigger.py .
3.5.2 |Continuum Analytics, Inc. [...] (siendo 3.5 la parte importante). Puede ver que está usando el otro python en executed_env .Usando conda en el entorno de Windows, solo copié la forma en que conda lo hace para iniciar diferentes cuadernos jupyter, cada uno desde un entorno diferente. Todos los accesos directos llaman al script "C:\ProgramData\Anaconda3\cwp.py" usando "C:\ProgramData\Anaconda3\python.exe", luego, con parámetros adicionales, puede elegir el entorno y el archivo que se ejecutará.
En mi caso, nombre del entorno = AutomateXXReporting, archivo a ejecutar = C:\Users\ismael.serrano\Documents\GIT\xxx\notebooks\exports\get_JIRA_user_streams.py
C:\ProgramData\Anaconda3\python.exe C:\ProgramData\Anaconda3\cwp.py C:\Users\ismael.serrano\.conda\envs\AutomateXXReporting C:\Users\ismael.serrano\.conda\envs\AutomateXXReporting\python.exe C:\Users\ismael.serrano\Documents\GIT\xxx\notebooks\exports\get_JIRA_user_streams.pyAnteriormente había procedido con éxito como me indicó Paul, pero llegué a un caso en el que no era suficiente. El python de la ruta completa no pudo encontrar algunas bibliotecas, usando cwp.py funcionó.