运行python虚拟环境的Bash脚本不执行

运行python虚拟环境的Bash脚本不执行

我正在尝试将以下调用包装到一个脚本中,该脚本运行我的 Python 虚拟环境:

[lucas@lucas-ThinkPad-W520]/home/lucas/bin$ source /home/lucas/Dropbox/projects/competitive-programming/kaggle/venv/ipython-notebook/bin/activate                                
(ipython-notebook) [lucas@lucas-ThinkPad-W520]/home/lucas/bin$ deactivate
[lucas@lucas-ThinkPad-W520]/home/lucas/bin$ 

因此,我创建并运行了以下 bash 脚本:

[lucas@lucas-ThinkPad-W520]/home/lucas/bin$ cat venv_python3.sh 
#!/bin/bash
#  /usr/bin/env bash
echo "starting python3 venv"
source /home/lucas/Dropbox/projects/competitiveprogramming/kaggle/venv/ipythonnotebook/bin/activate
[lucas@lucas-ThinkPad-W520]/home/lucas/bin$ venv_python3.sh 
starting python3 venv                                                                            
[lucas@lucas-ThinkPad-W520]/home/lucas/bin$ 

如您所见,它执行调用echo,但不启动我的虚拟环境。我错过了什么吗?

我已经查看了几个教程,但找不到缺少的内容。另外, my /home/lucas/bin/,我的脚本的位置,位于 my $PATH.

以下是该文件的权限:

[lucas@lucas-ThinkPad-W520]/home/lucas/bin$ ls -la
total 52
drwxr-xr-x  3 lucas lucas 4096 Jun 28 23:14 .
drwxr-xr-x 79 lucas lucas 4096 Jun 28 23:13 ..
-rwxrw-r--  1 lucas lucas  164 Jun 28 23:13 venv_python3.sh

答案1

在脚本的顶部,activate它说您必须获取它并且不能直接运行它。它的作用是更改bash文件来源会话中的一些内容。

在您的情况下,这bashbash通过运行venv_python3.sh脚本调用的,不是bash正在交互式地输入。

您可以做的是创建一个 bash 函数(或别名)来为您进行采购,然后“采购”就会发生在您的交互式bash.

不过我建议你看看虚拟环境包装器,这使得使用多个 virtualenv 变得更加容易,并且可能会解决您最初创建此脚本的“问题”。

相关内容