在给定的 conda 环境中执行 python 脚本的最佳方式
Best way to execute a python script in a given conda environment
我想使用 subprocess 包从另一个 python 脚本 trigger.py
执行一个 python 脚本 executed.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)
它 returns 一个错误,因为 executed.py
在 trigger_env
环境中是 运行。
如果您只需要使用另一个 python,那么我相信您只需要在 command
中使用另一个 python 的完整路径。
尝试进入您的 executed_env
(即 source activate executed_env
如果 Linux)并执行 which python
。让我们假设 returns 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
在不同的 python 版本中。
- 创建你的py27环境
conda create -n py27 python=2.7
这是trigger_env
。
- 创建你的py35环境
conda create -n py35 python=3.5
这是executed_env
。
- 通过 运行ning
source activate py35
然后 which python
获取 py35 的完整 python 路径(我们称其为 EXECUTED_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.2 |Continuum Analytics, Inc. [...]
(3.5 是重要部分)。您可以看到它正在使用 executed_env
. 中的另一个 python
我对任何 conda 内置方法进行了一些研究,发现了以下内容。第一个是解决方法,第二个是最终解决方案内置解决方案(在撰写本文时不可用 post)。
conda-wrappers。
Guilherme Melo 在 conda 环境中为 python 可执行文件创建了一个包装器。如果您在 IDE 中将其设置为 python 解释器,例如PyCharm,它将激活调用它的 conda 环境,然后调用 python 解释器。
在 "Creating conda wrappers" 部分下查看此处:
https://pypi.org/project/exec-wrappers/
conda 运行。
在 a standard and fast way to execute a command inside an environment 上的 conda github 页面上进行了长时间的讨论,导致实施了一个新命令(实际上是重新调用,因为它以前可用):
conda run
希望在 2018 年 10 月issue #7320 and will be released in conda-4.6中描述!
在 windows 环境中使用 conda,我只是复制了 conda 从不同环境启动不同 jupyter 笔记本的方式。所有快捷方式都使用“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
之前我已经按照 Paul 的指示成功进行了,但是遇到了一个不充分的情况。完整路径中的 python 无法找到一些库,使用 cwp.py 它可以工作。
我想使用 subprocess 包从另一个 python 脚本 trigger.py
执行一个 python 脚本 executed.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)
它 returns 一个错误,因为 executed.py
在 trigger_env
环境中是 运行。
如果您只需要使用另一个 python,那么我相信您只需要在 command
中使用另一个 python 的完整路径。
尝试进入您的 executed_env
(即 source activate executed_env
如果 Linux)并执行 which python
。让我们假设 returns 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
在不同的 python 版本中。
- 创建你的py27环境
conda create -n py27 python=2.7
这是trigger_env
。 - 创建你的py35环境
conda create -n py35 python=3.5
这是executed_env
。 - 通过 运行ning
source activate py35
然后which python
获取 py35 的完整 python 路径(我们称其为 EXECUTED_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.2 |Continuum Analytics, Inc. [...]
(3.5 是重要部分)。您可以看到它正在使用executed_env
. 中的另一个 python
我对任何 conda 内置方法进行了一些研究,发现了以下内容。第一个是解决方法,第二个是最终解决方案内置解决方案(在撰写本文时不可用 post)。
conda-wrappers。 Guilherme Melo 在 conda 环境中为 python 可执行文件创建了一个包装器。如果您在 IDE 中将其设置为 python 解释器,例如PyCharm,它将激活调用它的 conda 环境,然后调用 python 解释器。 在 "Creating conda wrappers" 部分下查看此处: https://pypi.org/project/exec-wrappers/
conda 运行。 在 a standard and fast way to execute a command inside an environment 上的 conda github 页面上进行了长时间的讨论,导致实施了一个新命令(实际上是重新调用,因为它以前可用):
conda run
希望在 2018 年 10 月issue #7320 and will be released in conda-4.6中描述!
在 windows 环境中使用 conda,我只是复制了 conda 从不同环境启动不同 jupyter 笔记本的方式。所有快捷方式都使用“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
之前我已经按照 Paul 的指示成功进行了,但是遇到了一个不充分的情况。完整路径中的 python 无法找到一些库,使用 cwp.py 它可以工作。