【问题标题】:Running Python from a virtualenv with Apache/mod_wsgi, on Windows在 Windows 上使用 Apache/mod_wsgi 从 virtualenv 运行 Python
【发布时间】:2011-06-04 14:07:05
【问题描述】:

我正在尝试设置 WAMP 服务器。我已经让 Apache 正常工作,并且我已经顺利安装了 mod_wsgi。

问题是,我正在为我的项目使用虚拟环境(使用 virtualenv)。很明显,mod_wsgi 在定位我安装的 Django 时遇到问题。

我正在尝试了解如何让 mod_wsgi 与 virtualenvs 一起工作。文档似乎认为这是不可能的:

请注意,WSGIPythonHome 指令只能在 UNIX 系统上使用,在 Windows 系统上不可用。这是因为在 Windows 系统上,Python DLL 的位置似乎决定了 Python 将在何处查找 Python 库文件。目前尚不清楚如何创建一个独立于 Windows 上主要 Python 安装的独特基线环境。

从这里:mod_wsgi + virtualenv docs。

有没有人知道如何进行这项工作?

【问题讨论】:

  • 关于 Windows 上的 WSGIPythonHome 的评论实际上是错误的。可能在 mod_wsgi 3.X 中取消了限制(不确定)。该评论已被删除。

标签: python apache wamp virtualenv wampserver


【解决方案1】:

您可以通过 Python 以编程方式激活环境,然后将其添加到您的 .wsgi 文件中,然后再导入其他任何内容。

来自virtualenv's docs:

有时你不能或不想 使用由创建的 Python 解释器 虚拟环境。例如,在一个 mod_python 或 mod_wsgi 环境, 只有一名口译员。

幸运的是,这很容易。您必须使用 要安装的自定义 Python 解释器 图书馆。但是要使用库,你 只需要确定路径是 正确的。脚本可用于 更正路径。您可以设置 环境如:

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

这将改变 sys.path 甚至 更改 sys.prefix,还可以让你 使用现有的解释器。项目 在您的环境中将首先出现 在 sys.path 上,在全局项之前。 但是,这无法撤消 激活其他环境,或 已导入的模块。你 不应该尝试,例如, 在网络之前激活环境 要求;你应该激活一个 尽可能早的环境,和 在那个过程中不要再这样做了。

【讨论】:

  • 这个看起来不错,我试试看。但看起来这将在我的系统上使用“主要”Python interepereter,而不是使用 virtualenv 创建的那个,对吧?这意味着我只能在我的系统上使用一个版本的 Python? (这只是一个小问题)。
  • 它将使用解释器 mod_wsgi 嵌入到 apache 中,但会确保 sys.path 使用安装在 virtualenv 中的库正确填充
  • 搜索器 - 你可以在这里看到这个实现:thecodeship.com/deployment/… 在底部它向你展示了如何在你的 wsgi.py 中激活和设置路径变量
  • 要删除绝对路径,您也可以使用activate_this = os.path.dirname(__file__) + '/env/bin/activate_this.py'(假设您的虚拟环境与您的WSGI文件位于同一位置。
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 2016-08-26
  • 2012-08-02
  • 2011-08-13
  • 2020-10-11
相关资源
最近更新 更多