我想使用子进程包从另一个python脚本executed.py
执行python脚本trigger.py
。 executed.py
必须在与trigger.py
不同的conda环境中运行(假设 executed_env
和 trigger_env
)。最好的方法是什么?我目前的trigger.py
代码是:
command = "python executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)
在 executed.py
环境中运行trigger_env
后,它会返回错误。
答案 0 :(得分:4)
我对任何conda内置方法进行了研究,发现了以下内容。第一个是解决方法,第二个是最终解决方案内置解决方案(在撰写本文时不可用)。
conda包装器 Guilherme Melo在conda环境中为python可执行文件创建了包装。如果您在IDE中将其设置为python解释器,例如PyCharm,它将激活从其调用的conda环境,然后调用python解释器。 在“创建conda包装器”部分下查看此处: https://pypi.org/project/exec-wrappers/
conda运行
在a standard and fast way to execute a command inside an environment的conda github页面上的长时间讨论导致了新命令的实现(实际上是重新调用,因为它以前可用):
conda run
它在issue #7320中有描述,有望在2018年10月在conda-4.6中发布!
答案 1 :(得分:2)
如果你只需要使用另一个python,那么我相信你只需要使用nullptr
中其他python的完整路径。
尝试进入command
(例如Linux executed_env
)并执行source activate executed_env
。让我们假设现在返回which python
成为您在命令中使用的python - 即HOME/.conda/envs/executed_env/bin/python
。这个
例如,让我们在另一个python版本中运行command = "HOME/.conda/envs/executed_env/bin/python executed.py --option1 -dir /path/to/dir"
。
executed.py
这是conda create -n py27 python=2.7
。trigger_env
这是conda create -n py35 python=3.5
。executed_env
然后source activate py35
获取py35的完整python路径(让我们在此说明中调用EXECUTED_PYTHON)。通过which python
停用。然后我们创建source deactivate
executed.py
然后是import sys
print(sys.version)
(包括参数,但它们什么都不做)
trigger.py
现在让我们在command = "EXECUTED_PYTHON executed.py --option1 -dir /path/to/dir"
args = shlex.split(command)
my_subprocess = subprocess.Popen(args)
- trigger_env
和source activate py27
中运行它。
python trigger.py
(3.5是重要部分)。您可以看到它正在使用3.5.2 |Continuum Analytics, Inc. [...]
中的其他python。答案 2 :(得分:1)
在 windows 环境中使用 conda,我只是复制了 conda 的方式,用于从不同的环境启动不同的 jupyter notebook。所有快捷方式都使用“C:\ProgramData\Anaconda3\python.exe”调用“C:\ProgramData\Anaconda3\cwp.py”脚本,然后通过附加参数您可以选择要执行的环境和文件。
就我而言,环境名称 = AutomateXXReporting,要执行的文件 = 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.py
以前我按照保罗的指示成功地进行了,但遇到了一个还不够的情况。完整路径中的python无法找到一些库,使用cwp.py可以。