2012-07-07 135 views
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. 我该如何解决这个问题?

感谢您的帮助!

回答

2

我敢肯定,改变这一行:

from flaskext.principal 

from flask.ext.principal 

应该工作。

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

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

它没有任何意义,为什么这会发生,但无论如何试试这个并回复。

+0

谢谢。这工作。但是,我不得不在我的笔记本电脑上安装所有的python模块(在虚拟环境的源代码之后)。我认为虚拟环境的好处是封装,或者我不理解链接是如何工作的。 – aaronlevin 2012-07-08 05:45:17

+0

@weirdcanada virtualenv的目的是包分离。您应该能够在不同的项目中使用不同版本的软件包。所以每个virtualenv都需要重新安装软件包。也可以选择使用默认安装包,但在大多数情况下会失败。 – codecool 2012-07-08 06:37:03

+0

感谢您的帮助和澄清虚拟环境的东西! – aaronlevin 2012-07-08 16:55:35

0

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

+0

他确实在提示中有(venv),所以我假设他来源bin /激活 – thenoviceoof 2012-07-07 16:43:43

+0

是的,我已经从sourced进入了虚拟环境。看到我上面的评论(在第一个答案下面)。 – aaronlevin 2012-07-08 05:46:05

+0

(请参阅下面的表述,而不是) – aaronlevin 2012-07-08 05:51:42