这与这个问题相同,但标题不正确。而且,症状比本文解释的更令人厌恶邮政。
从 Ubuntu 14.04 升级到 16.04 - 即使 venv 已停用,Pip 也会显示在活动虚拟环境中安装的软件包。
此外,安装包时 pip 会抛出此错误:
The directory '/home/user/.cache/pip/http' or its parent directory is
not owned by the current user and the cache has been disabled. Please
check the permissions and owner of that directory. If executing pip
with sudo, you may want sudo's -H flag. The directory
'/home/user/.cache/pip' or its parent directory is not owned by the
current user and caching wheels has been disabled. check the
permissions and owner of that directory. If executing pip with sudo,
you may want sudo's -H flag.
我在执行时也遇到了权限错误,pip install <package_name>
我可以用 来解决这个问题pip install --user <package_name>
。而且,sudo 只能像上面那样使用-H
选项。
任何关于此错误的见解或可能的修复都将非常有用!提前致谢!
埃德
答案1
我找到了问题的答案。出现此问题的原因是 Virtualenv 是使用 sudo 安装的,并且 pip/.cache 文件归用户所有。有些软件包需要访问 sudo。以下是有关此问题的信息和参考。我在对此错误的解释下方添加了一个傻瓜指南。
- 当全局安装的包位于 python 路径上时,如果它们与安装要求冲突,则会被忽略,而不是被卸载。
- 当全局安装的包位于 python 路径上,并且它们满足安装要求时,pip 不会执行任何操作,并报告要求已满足(类似于在 --system-site-packages virtualenv 中安装包时全局包如何满足要求)。
- 由于用户站点不在 python 路径上,pip 不会在 --no-site-packages 虚拟环境(即默认类型的虚拟环境)中执行 --user install。安装毫无意义。
- 在 --system-site-packages 虚拟环境中,pip 不会安装与虚拟环境站点包中存在冲突的包。 --user 安装缺少 sys.path 优先级,毫无意义。
更多信息请阅读这里https://pip.pypa.io/en/stable/user_guide/#user-installs。
我的解决办法
删除了 ~/user/.cache 中的所有项目包。这些包的安装是“错误”的
pip uninstall -r <path_to_project_requirements.txt>
(NB,需要时加上 sudo 前缀)。删除了虚拟环境
sudo pip uninstall virtualenv
使用以下方式安装 virtualenv:。
pip --user install virtualenv
这将停止所有权问题。并且,免去了使用 sudo 全局安装它——您还可以使用 virtualenv 包装器,这可能会为您省去一些麻烦,但我不会……创建您的项目目录:
mkdir <project>
并进入该目录cd project
。virtualenv venv
创建本地环境文件夹以安装你的软件包. venv/bin/activate
继续安装您的项目要求。