Flask在树莓派上与Virtualenv不兼容

3 投票
1 回答
1411 浏览
提问于 2025-04-18 04:51

我在我的树莓派上启动一个简单的Python Flask应用时遇到了问题。

我用virtualenvwrapper创建了一个虚拟环境,似乎一切正常。当我运行 pip list 时,得到了以下输出。

argparse (1.2.1)
Flask (0.10.1)
gunicorn (18.0)
itsdangerous (0.24)
Jinja2 (2.7.2)
MarkupSafe (0.21)
pip (1.5.4)
requests (2.2.1)
setuptools (2.2)
Werkzeug (0.9.4)
wsgiref (0.1.2)

如你所见,

我在 simple.py 文件中写了以下代码。

import os
from flask import Flask
from flask import request
import requests

app = Flask(__name__)

app.run(host='0.0.0.0', port=int("80"), debug=True)

@app.route('/hello')
def hello():
    return 'Hello world!'

当我在树莓派上运行 sudo python simple.py 时,出现了以下错误。

Traceback (most recent call last):
  File "simple.py", line 2, in <module>
    from flask import Flask
ImportError: No module named flask

据我所知,Flask实际上已经安装在我的虚拟环境中了。

1 个回答

4

当你用 sudo 命令运行时,虚拟环境中的 Python 和其他变量就不再被使用了。你可以通过运行 sudo pip freezesudo pip list 来验证这一点,然后把输出结果和 pip freezepip list 的结果进行对比。

你有(至少)两个选择:

  1. 不使用 sudo 来运行
  2. 指定你想用哪个 Python。虚拟环境其实就是环境的一个包装,所以你可以这样写 sudo /path/to/virtualenv/bin/python simply.py,这样一切就能正常工作了。

我经常使用第二种方法(不加 sudo),尤其是在把 supervisord 配置和不同版本的 Python 虚拟环境结合起来的时候,比如在部署 Flask 应用时。这种方法非常有效。

撰写回答