Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在给定的conda环境中执行python脚本的最佳方法_Python_Subprocess_Environment_Conda - Fatal编程技术网

在给定的conda环境中执行python脚本的最佳方法

在给定的conda环境中执行python脚本的最佳方法,python,subprocess,environment,conda,Python,Subprocess,Environment,Conda,我想使用子流程包从另一个python脚本trigger.py执行一个python脚本executed.py。executed.py必须在与trigger.py不同的conda环境中运行(比如executed\u env和trigger\u env)。最好的方法是什么?我当前的trigger.py代码是: command = "python executed.py --option1 -dir /path/to/dir" args = shlex.split(command) my_subproc

我想使用子流程包从另一个python脚本
trigger.py
执行一个python脚本
executed.py
executed.py
必须在与
trigger.py
不同的conda环境中运行(比如
executed\u env
trigger\u 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
环境中运行的。

如果您只需要使用另一个python,那么我相信您只需要在
命令中使用另一个python的完整路径即可

尝试进入您的
已执行的_env
(即
源代码激活已执行的_env
(如果是Linux)并执行
哪个python
。让我们假设返回
HOME/.conda/envs/executed_env/bin/python
,现在它成为您在命令中使用的python——即
command=“HOME/.conda/envs/executed_env/bin/python executed.py——option1-dir/path/to/dir”
。这个

例如,让我们在不同的python版本中运行
executed.py

  • 创建py27环境
    conda Create-n py27 python=2.7
    这是
    触发器
  • 创建py35环境
    conda Create-n py35 python=3.5
    这是执行的
    环境
  • 通过运行
    source activate py35
    ,然后运行
    which python
    ,获得py35的完整python路径(在本说明中,我们称之为已执行的python)。通过
    源停用
    停用
  • 然后我们创建
    executed.py

    import sys
    print(sys.version)
    
  • 然后是
    trigger.py
    (包括参数,但它们什么也不做)

  • 现在,让我们在
    trigger\u env
    --
    源代码激活py27
    python trigger.py
    中运行它

  • 这将打印
    3.5.2 | Continuum Analytics,Inc.[…]
    (3.5是重要部分)。您可以看到它正在使用
    executed\u env
    中的其他python

我对conda的内置方法做了一些研究,发现了以下几点。第一个是解决方案,第二个是最终解决方案内置解决方案(在撰写本文时不可用)

  • 康达包装纸。 Guillerme Melo为conda环境中的python可执行文件创建了一个包装器。如果将其设置为IDE中的python解释器,例如PyCharm,它将激活调用它的conda环境,然后调用python解释器。 请参见“创建conda包装”一节:

  • 康达跑步。 在上的conda github页面上进行了长时间的讨论,最终实现了一个新命令(实际上是以前可用的重新调用):
    conda run


  • 它在中进行了描述,并有望在2018年10月发布

    在windows环境下使用conda,我只是复制了conda从不同环境启动不同jupyter笔记本的方式。所有快捷方式都使用“C:\ProgramData\Anaconda3\cwp.py”调用“C:\ProgramData\Anaconda3\python.exe”脚本,然后使用其他参数可以选择要执行的环境和文件

    在我的例子中,环境名称=AutomateXXReporting,要执行的文件=C:\Users\ismael.serrano\Documents\GIT\xxx\notebooks\exports\get\u JIRA\u user\u 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它就可以了。

    我在写问题时考虑过这一点。对于部署来说,它不是很舒服。。。
    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