virtualenv不使用自己的包

时间:2011-06-11 19:41:28

标签: python django path virtualenv pip

我开始在我的项目中使用 virtualenv virtualenvwrapper

使用workon命令激活virtualenv后,我使用pip install -U <package>安装了以下软件包:

$ lssitepackages 
django               pip
Django-1.3-py2.7.egg-info    pip-1.0.1-py2.7.egg-info
easy-install.pth         setuptools-0.6c11-py2.7.egg
fabric               setuptools.pth
Fabric-1.0.1-py2.7.egg-info  south
geopy                South-0.7.3-py2.7.egg-info
geopy-0.94.1-py2.7.egg-info

这里的问题是(在激活virtualenv的情况下运行命令):

$ whereis python
python: /usr/bin/python2.6 /usr/bin/python /usr/bin/python2.7 /etc/python2.6 /etc/python /etc/python2.7 /usr/lib/python2.6 /usr/lib/python2.7 /usr/lib64/python2.6 /usr/lib64/python2.7 /usr/local/lib/python2.6 /usr/local/lib/python2.7 /usr/include/python2.6 /usr/include/python2.7 /usr/share/python /usr/share/man/man1/python.1.gz

$ whereis django-admin
django-admin: /usr/bin/django-admin /usr/local/bin/django-admin.py /usr/share/man/man1/django-admin.1.gz

$ whereis fab
fab: /usr/local/bin/fab

我的 virtualenv 它没有使用本地软件包!

如何强制virtualenv使用本地Python和本地版本的packges而不是我的机器包?


更新 - 可能的解决方案

我用mkvirtualenv --no-site-packages <name>创建了一个新的virtualenv,现在我得到了这些输出:

$ which python
/home/user/.virtualenvs/VIRTUALENVNAME/bin/python

$ which django-admin
/usr/bin/django-admin

$ which django-admin.py 
/home/user/.virtualenvs/VIRTUALENVNAME/bin/django-admin.py

$ which fab
/home/user/.virtualenvs/VIRTUALENVNAME/bin/fab

听起来它现在正在工作......除了“django-admin”命令。

2 个答案:

答案 0 :(得分:7)

尝试使用以下方法安装virtualenv:

mkvirtualenv --no-site-packages

在没有任何外部python库的情况下创建virtualenv

答案 1 :(得分:1)

您正在使用两个不同的命令来查找正在使用的Python版本。第一次,你使用“whereis”,第二次使用“which”。 “whereis”不是您要用于识别将在您的环境中运行的版本的命令。

来自“whereis”的手册页:

  
    

whereis查找指定文件的源/二进制和手册部分。            提供的名称首先被剥离了前导路径名组件            和.ext形式的任何(单个)尾随扩展名,例如.c。            s的前缀。使用源代码控制也是如此            处理。然后尝试在a中找到所需的程序           标准Linux位置列表。

  

这最后一行非常重要。 whereis“试图在标准Linux位置列表中找到所需的程序。”当你使用virtualenv时,那个版本的Python不在标准的Linux中。

改为使用“which”,就像你第二次做的那样。摘自“哪个”:

的手册页
  
    

返回文件(或链接)的路径名,这些路径名将是exe-           在当前的环境中,

  

这是您想要用来确定哪个版本的Python将在您的virtualenv中运行的那个。