【问题标题】:Sharing scripts that require a virtualenv to be activated共享需要激活 virtualenv 的脚本
【发布时间】:2010-02-12 17:22:58
【问题描述】:

我在共享 Linux 服务器上安装了具有默认设置的 virtualenv 和 virtualenvwrapper(virtualenvs 在 ~/.virtualenvs 中)。我有几个 Python 脚本,只有在激活正确的 virtualenv 时才能运行。

现在我想与服务器上的其他用户共享这些脚本,但不需要他们了解有关 virtualenv 的任何信息...这样他们就可以运行 python scriptname./scriptname 和脚本将与我的 virtualenv 中可用的库一起运行。

最干净的方法是什么?我玩弄了一些选项(例如将 shebang 线更改为指向 virtualenv 提供的解释器),但它们似乎很不灵活。有什么建议吗?


编辑:这是一个开发服务器,其他几个人都有帐户。但是,他们都不是 Python 程序员(我目前正在尝试转换它们)。我只是想让他们更容易地运行这些脚本并可能检查它们的逻辑,而不会让非 Pythonistas 了解环境细节。谢谢。

【问题讨论】:

  • 一个 virtualenv 是为了满足开发者的需要。要在隔离的环境中测试事物,测试依赖关系等。如果您分发它,您应该能够像任何其他 python 脚本/模块一样将其打包,并且不需要在其末端使用 virtualenv。特定于该脚本的 virtualenv 中有什么无法为最终用户在系统范围内完成?
  • @rharding -- 我没有部署脚本,只是让服务器上的其他用户可以使用它们。
  • 请考虑接受 Chris Dukes 的回答,jcdyer 提供的那个没有回答这个问题(作者同意这不是一个好的答案),而另一个很好地解释了这个问题plus 是对 virtualenv shebang 的快速参考——我在找到这个主题时试图回答的问题。您可能会通过接受投票最多的答案来帮助他人。谢谢。

标签: python virtualenv


【解决方案1】:

在脚本开头使用以下魔法(5)。

#!/usr/bin/env python

更改哪个 virtualenv 处于活动状态,它将使用该 virtualenv 中的 python。 停用 virtualenv,它仍然运行。

【讨论】:

  • 一个 virtualenv 改变 /usr/bin/env python 指向你的 virtualenv python。所以这是正确的方法
  • 感谢@JonasGröger,这个解释是我理解中缺失的部分。
【解决方案2】:

我会投票赞成在scriptname 中添加一个指向正确的virtualenv python 的shebang 行。您只需告诉用户 scriptname 的完整路径(或将其放在他们的 PATH 中),他们甚至不需要知道它是 Python 脚本。

如果您的用户是程序员,那么我不明白您为什么不希望他们了解/了解 virtualenv。

【讨论】:

  • 其实我觉得我同意第二段。 Virtualenv 是一个很棒的工具。如果您正在尝试转换其他程序员,请将其展示给他们。它易于使用,而且做的事情很酷。
  • 我不同意第二段。还没有转换成 Python 的程序员,不会花精力去阅读有关 virtualenv 的内容。对于 Python 转换者来说似乎很容易,因为他们已经花了(投入)一两个小时来玩 virtualenv,直到他们习惯了这个想法并可以使用它。这种投资是一个障碍。
【解决方案3】:

如果它只在一台服务器上,那么灵活性就无关紧要了。修改shebang。如果您担心这一点,请在不使用 virtualenv 的开发服务器上制作一个打包的安装副本。一旦开发完毕,无论是本地用户还是危地马拉用户,virtualenv 都不再是合适的工具。

【讨论】:

  • 谢谢...那么什么是正确的生产工具?
  • 这不应该是这个问题的公认答案。
  • 同意。我不再支持这个答案了。
猜你喜欢
  • 2017-12-18
  • 2018-08-02
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
相关资源
最近更新 更多