gpt4 book ai didi

python - conda 和 python shell 脚本

转载 作者:行者123 更新时间:2023-11-30 22:11:17 28 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

选项 1:显式解释器路径

您可以在您的环境中显式找到 python 解释器的路径并在 shebang 中使用它:

source activate myenv
which python

将输出类似/Users/me/anaconda/envs/myenv/bin/python的内容。然后,您可以使用该完整路径编写 python 脚本的 shebang:

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

但是,它仍然有点难看。

选项 2:符号链接(symbolic link)

#!/usr/bin/env python 只是在 $PATH 中查找名为“python”的内容,并使用它来运行脚本。我们可以利用这种行为为我们的 conda 环境获得更好的 shebang。

这是一个在 ~/bin 中为每个 conda 环境添加符号链接(symbolic link)的脚本:

#!/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

一旦运行一次(并且在 .profile 中已 added $HOME/bin to your $PATH),您可以直接在 shebang 中引用 conda envs:

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

这将在 $PATH 中找到 myenv 作为 $HOME/bin/myenv,它是 $HOME 的符号链接(symbolic link)/anaconda/envs/myenv/bin/python 感谢我们上面的脚本。

关于python - conda 和 python shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51469569/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com