是否可以通过在脚本中包含一行来调用 virtualenv 的 python 解释器?

Is it possible to invoke a virtualenv's python interpreter by including a line in the script?

我正在尝试将 SQLAlchemy 与 python 一起使用。我的设置是这样的:

mkdir project
cd project
virtualenv project-env
project-env/bin/pip install SQLAlchemy

我通过导航到 bin 目录并使用:

来激活环境
source activate

不过,我最近刚刚学习了一些 Flask 教程(Flask 也安装在虚拟环境中),并注意到 运行 正确编写脚本不需要此步骤。 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

在教程 (run.py) 的 python 文件中有一行:

#!flask/bin/python

这是在设置解释器的路径吗?我试过:

#!project-env/bin/python

在我的脚本中它不起作用。有没有办法做到这一点?任何指针将不胜感激!谢谢!

这是教程中使用的糟糕的 shebang 行;它是相对的,这意味着它只有在您恰好位于虚拟环境之外的工作目录中时才有效。

也就是说,要使 shebang 正常工作,当虚拟环境在 ~/foo/bar/project-env 中时,当您 运行 脚本时,它工作的唯一方法是 cd编辑为 ~/foo/bar。即使脚本在 ~/foo/bar 中,它也不会工作,除非你也在那里 cded。

使用绝对路径,或使用规范的 shebang 行并首先实际激活虚拟环境。我推荐后者(我不完全相信 activate 脚本所做的其他调整在某些情况下并不重要),但前者将按照您链接的教程的预期运行。