當前位置: 首頁>>技術問答>>正文


為什麽pip凍結會報告使用–no-site-packages創建的新virtualenv中的某些包?

, , ,

問題描述

當我創建一個新的virtualenv時,pip freeze顯示我安裝了幾個軟件包,即使我沒有在環境中安裝任何東西。我期待pip freeze返回空輸出,直到我的第一個pip install進入環境之後。 wsgiref is part of the standard library不是它,為什麽它會出現呢?


day@garage:~$ mkdir testing
day@garage:~$ cd testing
day@garage:~/testing$ virtualenv --no-site-packages .
New python executable in ./bin/python
Installing distribute..........................................................
...............................................................................
.........................................done.
day@garage:~/testing$ . bin/activate
(testing)day@garage:~/testing$ pip freeze
distribute==0.6.10
wsgiref==0.1.2

一些額外的信息:


(testing)day@garage:~/testing$ pip --version
pip 0.7.2 from /home/day/testing/lib/python2.7/site-packages/pip-0.7.2-py2.7.eg
g (python 2.7)
(testing)day@garage:~/testing$ deactivate
day@garage:~/testing$ virtualenv --version
1.4.9
day@garage:~/testing$ which virtualenv
/usr/bin/virtualenv
day@garage:~/testing$ dpkg -S /usr/bin/virtualenv
python-virtualenv: /usr/bin/virtualenv
day@garage:~/testing$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"

最佳解決方法

每次使用–no-site-packages創建virtualenv時,它都會安裝setuptoolsdistribute。而wsgiref出現的原因是因為python 2.5+標準庫向wsgiref lib提供egg信息(而pip不知道它是stdlib還是第三方軟件包)。

它似乎在Python3.3 +:http://bugs.python.org/issue12218上得到解決

次佳解決方法

要回答一個稍微不同的問題:您可以通過執行pip freeze -l而不是pip freeze來排除wsgiref(以及任何其他類似問題的.egg文件,如果您因某些原因而不幸有任何問題)。

pip help freeze描述了這個選項:

-l, –local If in a virtualenv, do not report globally-installed packages

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/6388.html,未經允許,請勿轉載。