1

我首先承认我可能并不完全理解虚拟环境的内部运作,所以如果我犯了完全的失败,请原谅我。

对于我的桌面(Mac OS X 10.7 + Python 2.7),我有一个虚拟环境,其中包含我正在用 Python 构建的 Web 应用程序(使用 Flask 作为框架)。我想在笔记本电脑上做一些工作,所以我压缩了包含虚拟环境和我的代码的目录并将它转移到我的笔记本电脑(Mac OS X 10.7 + Python 2.7)。

解压缩后,我尝试启动我的应用程序并收到以下消息:

(venv)****:*** ***$ python runserver.py 
Traceback (most recent call last):
  File "runserver.py", line 2, in <module>
    from weirdcanada import app
  File "/Users/****/****/weirdcanada/weirdcanada/__init__.py", line 3, in <module>
    import weirdcanada.views
  File "/Users/****/****/weirdcanada/weirdcanada/views.py", line 18, in <module>
    from flaskext.principal import AnonymousIdentity
ImportError: No module named flaskext.principal

然后我尝试pip install flask-principal安装它后,我重新运行了应用程序并收到了同样的错误。我site-packages在虚拟环境中检查并flask-principal安装了。

我的问题:

  1. 我误解了虚拟环境的意义吗?我应该能够像我一样复制虚拟环境吗?我认为一致性和可移植性是主要特征。
  2. 我怎样才能解决这个问题?

谢谢你的帮助!

4

2 回答 2

2

我很确定改变这一行:

    from flaskext.principal

    from flask.ext.principal

应该管用。

我的系统上安装了 3 个虚拟环境(Mac OSX 10.6 + Python2.7)。我创建了一个新的 virtualenv,突然在其他 virtualenv 中运行良好的代码在这里不起作用,在这种情况下,flaskext.wtf 是罪魁祸首。

我在两个 virtualenvs 中检查了烧瓶的版本及其扩展,它们完全相同,所以版本问题也不成问题。

为什么会发生这种情况是没有意义的,但无论如何尝试一下并回复。

于 2012-07-07T17:42:10.447 回答
0

我不确定,但你是调用系统范围的 python 安装,还是虚拟环境中的 python 二进制文件?一个虚拟环境显然会有它自己的 python 二进制解释器,并且所有的包都应该使用那个二进制文件来安装。即在 /usr/bin/ 或其他地方应该有一个系统范围的 python 二进制文件,在 /var/www/myapp/env/bin/ 或类似的地方应该有另一个。那就是需要在虚拟环境中安装应用程序的那个。

于 2012-07-07T16:40:22.657 回答