代码之家  ›  专栏  ›  技术社区  ›  Igor Rivin

conda和python shell脚本

  •  1
  • Igor Rivin  · 技术社区  · 7 年前

    假设我有一个通常shebang类型的pythonshell脚本(假设它位于一个名为 foo.py :

    #!/usr/bin/env python
    print("Hello World")
    

    现在我需要在给定的python环境中运行它,当然,我可以编写以下类型的脚本:

    #!/bin/sh
    conda activate myenv
    exec foo.py
    

    但这在美学上有点不令人满意。有没有办法将环境打包到脚本中以避免额外的脚本编写?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Ollin Boer Bohan    7 年前

    选项1:显式解释器路径

    source activate myenv
    which python
    

    将输出类似 /Users/me/anaconda/envs/myenv/bin/python . 然后可以使用以下完整路径编写python脚本的shebang:

    #!/Users/me/anaconda/envs/myenv/bin/python
    ...
    

    #!/usr/bin/env python 只是看看而已 $PATH 为了一个叫做 python

    下面是添加符号链接的脚本 ~/bin 对于每个康达环境:

    #!/usr/bin/env bash
    conda_prefix="$HOME/anaconda" # Modify this line if your anaconda folder is somewhere else
    mkdir -p "$HOME/bin" # Make ~/bin if it doesn't exist
    for env_dir in "$conda_prefix/envs/"*; do
        env_name=$(basename "$env_dir")
        ln -s "$env_dir/bin/python" "$HOME/bin/$env_name"
        echo "Made symlink for environment $env_name"
    done
    

    一旦你跑了一次 added $HOME/bin to your $PATH .profile ),您可以直接在shebang中引用conda env:

    #!/usr/bin/env myenv
    ...
    

    myenv $路径 作为 $HOME/bin/myenv ,这是到的符号链接 $HOME/anaconda/envs/myenv/bin/python 多亏了我们上面的剧本。