WSGIPythonPath应该指向我的virtualenv?

时间:2015-01-08 04:08:49

标签: python django mod-wsgi wsgi

我在虚拟环境中的python2.7内有一个名为lib的文件夹。

在阅读了六个教程之后,我无法弄清楚我想要指出WSGIPythonPath的确切内容。我看到有些人指向site-packages,但有些人是:分隔列表。

Syntax error on line 1019 of /etc/httpd/conf/httpd.conf:
WSGIPythonPath cannot occur within <VirtualHost> section

WSGIPythonPath应该指向我的virtualenv?

3 个答案:

答案 0 :(得分:18)

您收到错误是因为 WSGIPythonPath 指令无法在 VirtualHost 上下文中使用。您必须在主Apache配置文件中声明它。如果您仍想在VirtualHost上下文中指向virtualenv中的目录,请使用 WSGIDaemonProcess 指令,它有一个python-path选项供您声明相关的python目录。

例如:您的虚拟主机配置文件应如下所示:

<VirtualHost *:80>
ServerName example.com
CustomLog logs/example.com-access_log common
ErrorLog logs/example.com-error_log

WSGIDaemonProcess example.com python-path=/virtualenvpathto/site-packages:/pathto/exampleprojecthome
WSGIProcessGroup example.com

...
</VirtualHost>

如果要将多个python目录添加到$ PYTHON_PATH环境变量中,则使用完整冒号,以便说 import example.foo 正常工作。在上面的示例中,有两个目录,它们可能更多或更少,具体取决于您设置项目的方式。

如果你在窗户上,请使用分号;而不是完整的冒号。

我希望这会有所帮助。

答案 1 :(得分:3)

tl; dr:使用WSGIDaemonProcess python-home=…使用WSGIPythonPathWSGIDaemonProcess python-path=…-path不是-home)的替代方法是不再推荐。

新旧方式

如@kaykae所述,WSGIPythonPath不能在VirtualHost上下文中使用,但是WSGIDaemonProcess python-path=…是等效的。但是,尽管这仍然可行,但不再是在虚拟Python环境中设置Apache mod_wsgi的推荐方法:

  

请注意,先前的实践是使用这些设置Python模块搜索路径[即WSGIDaemonProcess …python-path=…WSGIPythonPath]的方式来指定Python虚拟环境的位置。具体来说,它们用于添加Python虚拟环境的site-packages directory。你不应该那样做。

     

指定Python虚拟环境位置的更好方法是对守护程序模式使用python-home指令的WSGIDaemonProcess选项,对于嵌入式模式使用WSGIPythonHome指令。自从mod_wsgi 3.0和Linux发行版在很长一段时间以来都没有提供这种旧版本的mod_wsgi以来,已经可以使用这些指定Python虚拟环境的方法。如果您使用的是较旧的方法,请更新您的配置。

     

(来源:WSGI Docs: User Guides: Virtual Environments

如何使用新方法

您尝试在mod_wsgi上下文中配置VirtualHost的事实表明您使用“守护程序模式”配置版本。根据上面的引用,将virtualenv环境包含到Python路径中的推荐方法将是VirtualHost部分中的类似部分(尽管也可以在外部定义,因为它可以用您选择的faemon进程组的myapp1标识符引用)

<IfModule mod_wsgi.c>
  WSGIDaemonProcess myapp1 user=user1 group=group1 threads=5 
python-home=/path/to/project/venv
</IfModule>

请注意,/path/to/project/venvvirtualenv环境的基本路径。这将是您调用venv创建目录的子目录virtualenv venv

还请注意,您可以将其他路径添加到Python路径中,以使import语句适用于未通过PIP或类似方式管理的程序包。例如,您可以添加python-path=/path/to/project。只是不要使用这种机制来告诉wsgi整个virtualenv设置-因为它们引入了python-home

答案 2 :(得分:-1)

以下是官方文档:https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#using-a-virtualenv

  

使用virtualenv¶

     

如果在virtualenv中安装项目的Python依赖项,   你需要添加这个virtualenv的网站包的路径   目录也是你的Python路径。为此,请添加其他内容   WSGIPythonPath指令的路径,分隔多个路径   如果使用类UNIX系统,则使用冒号(:);如果使用分号(;)   使用Windows。如果目录路径的任何部分包含空格   字符,WSGIPythonPath的完整参数字符串必须是   引用:

> WSGIPythonPath
> /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages
  

确保为virtualenv提供正确的路径并替换   python3.X与正确的Python版本(例如python3.4)。