我在虚拟环境中的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?
答案 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=…
。使用WSGIPythonPath
或WSGIDaemonProcess 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虚拟环境的方法。如果您使用的是较旧的方法,请更新您的配置。
您尝试在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/venv
是virtualenv
环境的基本路径。这将是您调用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)。