在Python3脚本中如何在多个环境中使用shebang line和virtualenvwrapper

时间:2018-03-28 05:24:10

标签: python-3.x virtualenv virtualenvwrapper shebang

我有一个功能齐全的python脚本框架,可以导入和交互。 我的问题是shebang系列必须指向我的virtualenv:

#!/Users/me/.virtualenvs/kube3/bin/python

当代码被提交到git时,我的特定个人目录路径被提交并与其他环境共享,这些环境在其环境特有的不同位置具有kube3 virtualenv,例如

#!/Users/someone_else/.virtualenvs/kube3/bin/python

如何避免使用特殊路径并仍使用virtualenvwrapper?

尝试后

#!~/.virtualenvs/kube3/bin/python

#!$WORKON_HOME/kube3/bin/python

我想到了这些可能的解决方案:  1.将virtualenv指向根路径,即/.virtualenvs/  2.在所有目标环境中创建符号链接,并将shebang行指向符号链接

还有另一种更好的方法吗?

1 个答案:

答案 0 :(得分:2)

使用:#!/usr/bin/env python3

类Unix系统读取文件顶部以查看如何执行它们。如果前两个字节是#!,则它将第一行视为应在将当前文件作为最终参数附加后运行的程序。着名的shebang。

令人惊讶的是(至少对我来说),执行程序没有查看程序的$PATH - 它必须是相对或绝对文件系统路径。传统上,发行版将/bin/sh链接到您的shell程序,因此#!/bin/sh有效。

幸运的是,发行版通常会将env放入/usr/binenv允许您设置环境变量以在备用环境中运行程序,并查看$PATH。我们有点游戏系统。 #!/usr/bin/env python3没有设置其他变量,但它绕过了shebang路径规则。

当virtualenv被激活时,它会修改PATH,使其python首先出现在列表中,因此env找到你想要的python。