Tho*_*ins 8 python pip virtualenv
当我尝试使用python包安装python包时,在python虚拟环境中的vagrant环境中工作
(venv) vagrant@vagrant-ubuntu-trusty-64:~$ pip install <package_name>
Run Code Online (Sandbox Code Playgroud)
我收到权限错误:
error: could not create '/home/vagrant/venv/lib/python2.7/site-packages/<package_name>': Permission denied
Run Code Online (Sandbox Code Playgroud)
当我使用sudo安装时:
(venv) vagrant@vagrant-ubuntu-trusty-64:~$ sudo pip install <package_name>
Run Code Online (Sandbox Code Playgroud)
安装成功,但是包没有安装在venv中,而是安装在全局python目录中.
我可以通过使用sudo和指定pip的路径在venv中成功安装包:
(venv) vagrant@vagrant-ubuntu-trusty-64:~$ sudo /home/vagrant/venv/bin/pip install <package_name>
Run Code Online (Sandbox Code Playgroud)
但这很复杂.那么如何才能停止sudo pip链接到全局python pip?
谢谢
根本问题是sudo默认情况下不会在执行命令时继承用户的环境。这就是你想要的——相信我。
在您的情况下,您pip要么被引导到它无法写入的 venv,要么 - 在 sudo 下 - 引导到您不希望它成为的 root 环境。
您发布的解决方案实际上是有效的:如果您使用 sudo,请务必准确地告诉它要做什么、如何做以及向谁做!上述所有内容都可以由用户的环境变量控制,因此谨慎是关键。
您也可以使用sudo -E,它确实继承了调用用户的环境,因此应该保留您的 venv。不过,请务必阅读sudo的手册页或在谷歌上搜索所有可能遇到的麻烦。
我在 pip vs sudo pip 和 virtualenv pip vs local pip 上遇到了同样的问题。几个月前我创建我的 venv 时,我以 root 用户身份登录。所以当我想安装一个新的 pip 包时,权限被拒绝。所以用 sudo 尝试了相同的命令,但是它在我的本地 pip 上安装了这个包。
学过的知识。我不应该在 venv 中使用 sudo。
修复它:
chmod -R 0777 venv_folder_path_here
Run Code Online (Sandbox Code Playgroud)
-R 开关用于在 venv 文件夹中进行递归更改。
然后激活您的 venv 并尝试 pip install:
/home/username_here/venv/project_name_here/bin/activate
(venv_name) pip install package_name_here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3615 次 |
| 最近记录: |