Python 安装了pip的软件包未显示在pip冻结中?
我正在使用Python 安装了pip的软件包未显示在pip冻结中?,python,pip,virtualenv,Python,Pip,Virtualenv,我正在使用virtualenv和pip治疗Debian哮喘病。我遇到了一个奇怪的问题,软件包似乎安装正常,但在virtualenv中却不可见 这是我的requirements.txt文件: Django==1.7.7 psycopg2==2.5.4 django-geojson==2.6.0 如果我在我的virtualenv中用pip安装它,它会说所有东西都已安装: (.venv)$ sudo pip install -r requirements.txt Requirement alread
virtualenv
和pip
治疗Debian哮喘病。我遇到了一个奇怪的问题,软件包似乎安装正常,但在virtualenv中却不可见
这是我的requirements.txt
文件:
Django==1.7.7
psycopg2==2.5.4
django-geojson==2.6.0
如果我在我的virtualenv中用pip
安装它,它会说所有东西都已安装:
(.venv)$ sudo pip install -r requirements.txt
Requirement already satisfied (use --upgrade to upgrade): Django==1.7.7 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): psycopg2==2.5.4 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): django-geojson==2.6.0 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): six in /usr/local/lib/python2.7/dist-packages (from django-geojson==2.6.0->-r requirements/base.txt (line 3))
Cleaning up...
但是如果我做了pip freeze
来检查安装了什么,看起来pip
认为我有一套完全不同的软件包,特别是它没有在那里看到djgeojson
:
(.venv)$ pip freeze
Django==1.7.4
argparse==1.2.1
coverage==3.7.1
distribute==0.6.24
django-debug-toolbar==1.2.1
gunicorn==19.3.0
psycopg2==2.5.4
requirements==0.1
setproctitle==1.1.8
sqlparse==0.1.14
wsgiref==0.1.2
如果我启动Python终端,Python就看不到djgeojson
为什么会这样?这很令人困惑 您的问题是,您已经用sudo安装了需求,而它们安装在您的系统python库文件夹中,而不是虚拟环境的
venv
库中
怎么办?运行相同的命令,但这次不使用sudo:pip install-r requirements.txt
。这将从虚拟环境运行pip,并将软件包安装到正确的位置
当您使用
源路径/to/my/venv/bin/acivate
激活虚拟环境e.q时,当前用户的路径变量$path
将被更新,然后当您使用sudo运行某个程序时,您在激活虚拟环境时刚刚更新的新$path将不再相同。当你打开一个新的shell窗口,或者以不同的用户身份使用su
登录,或者运行sudo
,$PATH
变量不是全局系统变量。我认为问题在于pip正在将东西安装到/usr/local/lib/python2.7/dist包中,但那不是在sys.PATH
上。但是,为什么pip会选择将软件包安装到不在其自身路径上的某个地方呢?为什么要使用sudo进行安装,然后在没有sudo的情况下使用pip冻结?好的,如果我运行sudo pip freeze
我会看到相同版本的软件包。那么,pip
看到的内容是否取决于运行它的Linux用户?那是。。。令人惊讶。谢谢你的回答。问题是,如果我尝试在没有sudo的情况下安装软件包,我会得到权限错误:(.venv)$pip install-r requirements.txt下载/解包Django==1.7.7(from-r requirements/base.txt(第1行)),运行setup.py egg_info for package Django Source in./。venv/build/Django的版本是1.7,它与./.venv/build/Django中的要求Django==1.7.7(来自-r requirements/base.txt(第1行))源代码不匹配。venv/build/Django的版本1.7与Django==1.7.7(来自-r requirements/base.txt(第1行))冲突,该版本存储完整的登录/home/me/.pip/pip.log
,如果我尝试运行(.venv)$pip卸载Django
,为了消除冲突,我得到了OSError:[Errno 13]权限被拒绝:'/webapps/.venv/lib/python2.7/site packages/Django-1.7.4-py2.7.egg info/dependency_links.txt'
。我可以不使用sudo
来解决这个问题吗?我想我可以使用sudo
删除/webapps/.venv/lib/python2.7/site packages/Django-1.7.4-py2.7.egg info
中的所有内容-这可能有效吗?但我总是担心删除文件而不是使用“官方”路径卸载。这些权限错误非常令人困惑-Django在我以非超级用户身份安装时一定安装到了/webapps/.venv/lib/python2.7/site packages/
,但是现在它不会让我删除它,除非我让自己成为超级用户-这是怎么回事?谢谢你对$PATH
的解释,我没有正确理解。