【问题标题】:In Python3 scripting how to use shebang line with virtualenvwrapper in multiple environments在 Python3 脚本中,如何在多个环境中使用带有 virtualenvwrapper 的 shebang 行
【发布时间】:2018-09-06 16:14:46
【问题描述】:

我有一个功能齐全的 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行指向符号链接

还有其他更好的方法吗?

【问题讨论】:

  • 哪些操作系统?在 linuxy 平台上,#!/usr/bin/env python3 通常是正确的选择。 /usr/bin/env 在你的路径上找到 python,virtualenv 为其 python 设置正确的路径。
  • stackoverflow.com/users/642070/tdelaney我的站是mac,但它需要在linux上运行,可能是ubuntu或centos

标签: python-3.x virtualenv virtualenvwrapper shebang


【解决方案1】:

使用:#!/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。

【讨论】:

  • 谢谢!现在我了解您的建议在激活虚拟环境或安装基础 python 时有效。我赞成您的回答,请添加此附带条件
猜你喜欢
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 2015-11-11
  • 2019-02-04
相关资源
最近更新 更多