【问题标题】:Inside virtual env, "sudo pip" links to the global python pip在虚拟环境中,“sudo pip”链接到全局 python pip
【发布时间】:2017-01-02 16:08:54
【问题描述】:

在 vagrant 环境中工作,在 python 虚拟环境中,当我尝试使用

安装 python 包时
(venv) vagrant@vagrant-ubuntu-trusty-64:~$ pip install <package_name>

我收到一个权限错误:

error: could not create '/home/vagrant/venv/lib/python2.7/site-packages/<package_name>': Permission denied

当我使用 sudo 安装时:

(venv) vagrant@vagrant-ubuntu-trusty-64:~$ sudo pip install <package_name>

安装成功,但是包没有安装在venv里面,而是安装在全局python目录里面。

通过使用sudo 并指定pip 的路径,我可以在venv 中成功安装包:

(venv) vagrant@vagrant-ubuntu-trusty-64:~$ sudo /home/vagrant/venv/bin/pip install <package_name>

不过,这很令人费解。那么如何阻止sudo pip 链接到全局python pip?

谢谢

【问题讨论】:

  • 你是如何设置虚拟环境的?
  • 你不应该试图阻止 sudo 做它应该做的事情;你应该解决原来的权限问题。

标签: python pip virtualenv


【解决方案1】:

我在 pip vs sudo pip 和 virtualenv pip vs local pip 上遇到了同样的问题。 几个月前创建 venv 时,我以 root 用户身份登录。所以当我想安装一个新的 pip 包时,权限被拒绝了。所以用 sudo 尝试了相同的命令,但随后它在我的本地 pip 上安装了包。

经验教训。我不应该在 venv 中使用 sudo。

修复它:

chmod -R 0777 venv_folder_path_here

-R 用于递归更改 venv 文件夹的开关。

然后激活你的 venv 并尝试 pip install:

/home/username_here/venv/project_name_here/bin/activate
(venv_name) pip install package_name_here

【讨论】:

    【解决方案2】:

    根本问题是sudo 在执行命令时默认不会继承用户的环境。这就是你想要的——相信我。

    在您的情况下,您的 pip 要么被引导到它无法写入的 venv,要么在 sudo 下被引导到你不希望它成为的 root 环境。

    您发布的解决方案实际上是有效的:如果您使用 sudo,请务必准确告诉它要做什么,如何做以及向谁做!上述所有内容都可以由用户的环境变量控制,因此谨慎是关键。

    你也可以使用sudo -E,它继承了调用用户的环境,因此应该保留你的venv。不过,请务必阅读 sudo 的手册页或在 Google 上搜索所有可能遇到的麻烦。

    【讨论】:

      【解决方案3】:

      就像丹尼尔在 cmets 中所说,您应该修复虚拟环境目录的权限问题。可能是您已经使用 sudo 在该目录中安装了一些东西。或者您使用 sudo 创建了它。这并不理想。我建议销毁 virtualenv,然后使用 vagrant 用户再次创建它。如果您使用pyvenv,请确保您通过--copies 选项。

      正如 user27... 在他们的回答中所说,您使用 sudo 运行的 pip 可能与您作为 vagrant 用户运行的 pip 不同。您可以随时通过which pip 进行检查。

      我建议在您的 python 虚拟环境中从 which python 开始。也许您激活了错误的虚拟环境,与您的 vagrant 用户完全无关。

      【讨论】:

        猜你喜欢
        • 2012-07-24
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 2017-10-24
        相关资源
        最近更新 更多