如何通过linux脚本激活python环境?

如何通过linux脚本激活python环境?,python,linux,bash,virtualenv,centos7,Python,Linux,Bash,Virtualenv,Centos7,系统: 操作系统:CentOS Linux 7(核心)/CentOS Linux 7.7.1908版(核心) 内核:Linux 3.10.0-1062.4.1.el7.x86_64 来自提供商的服务器-我只是一个用户 您好,这是我的虚拟环境激活路径,目前正在运行django应用程序 /home/username/.local/env_myapp/bin/activate 如果需要,请运行命令 $source/home/username/.local/env_myapp/bin/activa

系统:

  • 操作系统:CentOS Linux 7(核心)/CentOS Linux 7.7.1908版(核心)
  • 内核:Linux 3.10.0-1062.4.1.el7.x86_64
  • 来自提供商的服务器-我只是一个用户

您好,这是我的虚拟环境激活路径,目前正在运行django应用程序

/home/username/.local/env_myapp/bin/activate

如果需要,请运行命令

$source/home/username/.local/env_myapp/bin/activate

env
$(my_env)
从终端开始

我想编写一个小脚本来自动启动env,而不必每次都将整个路径放在控制台中

所以我查看了
激活
文件

# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

好吧,你在我的剧本里写了这几行

我的环境
  • 如果我运行
    $my_env
    它只回显“check-activate”
  • 如果我运行
    $source my_env
    它会运行回显“check-activate”,然后我的终端在VScode中消失

问题:
那么,如何通过linux脚本正确激活python环境呢


亲爱的Stackoverflow,这个问题是关于如何通过脚本启动env,而不是关于退出,因为您将此标记为重复。此外,任何问题都可以通过我的问题下的评论来解决,但我不能“解决”它。因此,在下面写下答案-参见“更新”和答案的积分。

update 感谢@Charles Duffy@alaniwi

source /home/username/.local/env_myapp/bin/activate
echo "check - activate env"
现在,脚本在终端中启动my env

(我知道如何通过问题评论来结束问题。所以我在这里写下了@Charles Duffy@alaniwi的答案)

那么,如何通过linux脚本正确激活python环境呢

阅读,然后(除了
/sbin/init
之外,几乎所有Linux程序都是以
execve
启动的)

因此,您可以在python脚本开始时使用,所以
#/usr/bin/python
(并使其具有可执行性)

注意您的(请参阅和)


您的可能是(另请参见和),因此请阅读其文档(我个人更喜欢),或者至少可以添加一个shell函数,当您
cd
进入目录时,该函数会自动激活环境。(这假设您的pyenv位于Python项目目录中,而不是位于
$HOME/pyenv
或类似目录中。)

#自动生成/显示Python虚拟环境:
函数cd(){
内置cd“$@”
设置\u python\u env
}
函数集_python_env(){
env=“.pyenv”
如果[-z“$VIRTUAL_ENV”]]
然后
#如果找到环境文件夹,则激活虚拟环境。仅此项
#当cd'ing进入顶级Python项目目录时有效,而不是
#直接进入子目录。这可能是常见的用法
#Python的大小写取决于目录层次结构。
如果[-d“$env”]]
然后
虚拟环境禁用提示=1
来源“$env/bin/activate”
fi
其他的
#检查当前文件夹是否属于当前虚拟环境。如果
#是,则不执行任何操作,否则将停用,并可能在以下情况下重新激活
#我们换了另一辆车。
parentdir=“$(dirname“$VIRTUAL_ENV”)”
如果[[“$PWD”/!=“$parentdir”/*]]
然后
使停止工作
设置\u python\u env
fi
fi
}
#立即激活环境;这样,当你
#打开终端,它会在Python项目目录中启动您。
设置\u python\u env

将上述内容复制到
~/.bashrc
源代码中。

如果不希望脚本在
源代码
d时退出调用shell,请从脚本中删除
退出
。从来没有理由将
退出
退出“$?”
作为脚本的最后一行--无论发生什么情况,当脚本到达结尾时总是这样做!这可以说是或的重复(请记住,
源代码的同义词)。同时删除
#自上而下的一行-执行这样一个脚本(相对于源代码)没有什么用处,因为这样做不会影响父shell中的任何变量和任何
#行仅与执行脚本相关。获取激活脚本的目的是设置相关的环境变量。
source /home/username/.local/env_myapp/bin/activate
echo "check - activate env"