我在本地主机上运行了 nginx + uWSGI在虚拟环境中使用一个简单的 hello world 程序,但是当我用一个简单的 Flask 应用程序替换 hello world 时出现此错误:
File "./wsgi_configuration_module.py", line 1, in <module>
from flask import Flask
ImportError: No module named flask
unable to load app mountpoint
这是 Flask 应用程序(wsgi_configuration_module.py):
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "hello world"
if __name__ == "__main__":
application.run()
uWSGI 配置(app_conf.xml):
<uwsgi>
<socket>127.0.0.1:9001</socket>
<chdir>/srv/www/labs/application</chdir>
<pythonpath>/srv/www</pythonpath>
<module>wsgi_configuration_module</module>
<callable>application</callable>
<no-site>true</no-site>
</uwsgi>
nginx配置:
server {
listen 80;
server_name localhost;
access_log /srv/www/labs/logs/access.log;
error_log /srv/www/labs/logs/error.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9001;
}
location /static {
root /srv/www/labs/public_html/static/;
index index.html index.htm;
}
}
virtualenv 存储在 ~/virtual_env 中,其中 Python 2.7 + nginx + uWSGI + Flask 安装在名为 的 virtualenv 中basic
。
我尝试过以下方法来解决这个问题:
- 在运行 uWSGI 时将选项设置
--home (-H)
为我的 virtualenv 文件夹。~/virtual_env
其他信息:
- 我在虚拟环境之外使用了相同的设置。只有当我尝试在虚拟环境内复制设置时才会出错。
我哪里做错了?
答案1
只需将虚拟环境的路径添加到<pythonpath>
uwsgi 的 app_conf.xml 文件中即可。例如:
<pythonpath>/srv/www</pythonpath>
<pythonpath>/home/user/env/lib/python2.6/site-packages</pythonpath>
<module>wsgi_configuration_module</module>
答案2
-H/--home/--virtualenv 选项不会扩展 ~ 符号。将其指定为绝对路径即可。
这同样适用于配置文件,因此你需要添加
path_to_virtualenv