Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 安装了pip的软件包未显示在pip冻结中?_Python_Pip_Virtualenv - Fatal编程技术网

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
的解释,我没有正确理解。