2012-07-07 268 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