我有一个功能齐全的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行指向符号链接
还有另一种更好的方法吗?
答案 0 :(得分:2)
使用:#!/usr/bin/env python3
类Unix系统读取文件顶部以查看如何执行它们。如果前两个字节是#!
,则它将第一行视为应在将当前文件作为最终参数附加后运行的程序。着名的shebang。
令人惊讶的是(至少对我来说),执行程序没有查看程序的$PATH
- 它必须是相对或绝对文件系统路径。传统上,发行版将/bin/sh
链接到您的shell程序,因此#!/bin/sh
有效。
幸运的是,发行版通常会将env
放入/usr/bin
。 env
允许您设置环境变量以在备用环境中运行程序,并查看$PATH
。我们有点游戏系统。 #!/usr/bin/env python3
没有设置其他变量,但它绕过了shebang路径规则。
当virtualenv被激活时,它会修改PATH
,使其python首先出现在列表中,因此env
找到你想要的python。