2012-01-16 64 views
14

有時我,我懷疑錯誤是使用全球安裝的Python模塊的我Django應用程序的結果/ Django的應用程序,而不是那些它的virtualenv中。如何檢查的virtualenv是否與「--no-站點包」創造出來的?

有沒有一種方法來檢查我的應用程序的virtualenv中是否有「--no-站點包」創建,而不必刪除它,然後如下重新創建它?

deactivate 
rmvirtualenv my_env 
mkvirtualenv my_env --no-site-packages 
workon my_env 
pip install -r requirements.txt 

當然,一定有更好的辦法!謝謝。

回答

21

有一個在<env>/lib/pythonX.X/一個名爲no-global-site-packages.txt當你創建--no-site-packages虛擬環境。

只是試圖與virtualenv中1.7:

% virtualenv --no-site-packages env.without 
% virtualenv --system-site-packages env.with 

% find env.without | sed 's/env.without//' > files.without 
% find env.with | sed 's/env.with//' > files.with 

% diff files.with* 
230a231 
> /lib/python3.2/no-global-site-packages.txt 
5

一個簡單的方法是打開交互式python shell並執行import somemodule; print somemodule,然後檢查從哪個模塊導入的路徑。

>>> import flask; print flask 
<module 'flask' from '/home/xxx/dev/xxx/env/lib/python2.7/site-packages/flask/__init__.pyc'> 

>>> import flask; print flask 
<module 'flask' from '/usr/lib64/python2.7/site-packages/flask/__init__.pyc'> 
+0

只有當你有相同的模塊安裝在兩地。你不能真正嘗試同時導入兩者(除非你改變python路徑) – 2012-01-17 13:15:38

+0

如果不是,你會得到一個'ImportError' - 取決於你得到它的位置,你知道它只安裝在位置X. – ThiefMaster 2012-01-17 13:25:00

+0

如果您在站點包中安裝了模塊,則爲true。但是,你必須選擇一個模塊,你知道它在那裏,實際上檢查'ImportError' – 2012-01-17 15:09:28

3

@羅布的解決方案是有效的新版本,我已經研究過的代碼:)。

如果你有一箇舊的(像我1.4.5),您可以檢查Python路徑。如果路徑中有默認的「site-packages」目錄(例如/ usr/lib/python/site-packages),那麼你的virtualenv被創建爲 site-packages。

您可以從類似檢查出來:

for p in sys.path: 
    if p.find("site-packages") >= 0: 
    print p 

如果你有--no-站點包,所有你的路會是這樣:

/home/user/virtualenv/myenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg 
/home/user/virtualenv/myenv/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg 
/home/user/virtualenv/myenv/lib/python2.6/site-packages 

否則,會有類似的東西:

/home/user/virtualenv/myenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg 
/home/user/virtualenv/myenv/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg 
/home/user/virtualenv/myenv/lib/python2.6/site-packages 
/usr/local/lib/python2.6/site-packages 
相關問題