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

标签 python virtualenv shebang

我正在尝试将 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

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

#!flask/bin/python

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

#!project-env/bin/python

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

最佳答案

这是教程中使用的一个糟糕的 Shebang 行;它是相对的,这意味着它仅在您碰巧位于直接位于虚拟环境之外的工作目录中时才有效。

也就是说,为了使 shebang 工作,当虚拟环境位于 ~/foo/bar/project-env 中时,当您运行脚本时,它工作的唯一方法是如果您已cd编辑至~/foo/bar。即使脚本位于 ~/foo/bar 中,除非您也 cd 到那里,否则它也不会工作。

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

关于python - 是否可以通过在脚本中包含一行来调用 virtualenv 的 python 解释器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40680839/

相关文章:

python - 使用 Flask 在 Heroku 上出现 500 内部服务器错误

python - PySpark - 在没有显式 session key 的情况下组合 session 数据/遍历所有行

command-line - #!/usr/bin/env 和进程名称 : portability at a price?

python - 在 Mac 上使用 shebang (#!) 运行 python 64

python - 通过 C-api 分析 Python(如何?)

python - 在 Python 中创建一个带有匿名函数的字典

python - 由于 virtualenv 或 conda,neovim 无法正确找到 python?

python - Ubuntu16.04下virtualenv中psutil的安装

python - 为什么我需要为我的公共(public) Django 应用程序创建虚拟环境?

shell - 类似注释的 #!/bin/sh 行之前和/或之后的注释 (#) 行的效果