警告:以“root”用户身份运行 pip 可能会导致权限被破坏

警告:以“root”用户身份运行 pip 可能会导致权限被破坏

WARNING: Running pip as the ‘root’ user can result in broken permissions

使用该--root-user-action=ignore选项忽略“以‘根’用户身份运行 pip 可能导致权限损坏”警告。

或者,您可以创建虚拟环境或pip install
使用该选项运行命令
--user

警告以 root 用户身份运行 pip 可能会导致权限被破坏

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

当在没有添加用户的 Docker 容器中pip安装包或在其中安装包时,通常会显示警告。sudo

使用--root-user-action选项忽略警告

忽略警告的一种方法是使用
–root-user-action
选项。

pip install --upgrade pip pip install --root-user-action=ignore requests # 👇️ or with pip3 pip3 install --upgrade pip pip3 install --root-user-action=ignore requests

pip install root 用户操作忽略

确保将requests示例中的替换为您正在安装的包的名称。

--root-user-action选项从 pip v22.1 开始可用。

pip如果您有旧版本,请更新您的版本。

# 👇️ check pip version pip --version # 👇️ upgrade pip version pip install --upgrade pip pip3 install --upgrade pip

设置PIP_ROOT_USER_ACTION环境变量

或者,您可以将PIP_ROOT_USER_ACTION环境变量设置为
ignore.

下面是如何在 Docker 文件中执行此操作的示例。

文件
# 👇️ upgrade pip RUN pip install --upgrade pip ENV PIP_ROOT_USER_ACTION=ignore

下面介绍如何在 Linux、MacOS 和 Windows 上设置环境变量。

# Linux and MacOS export PIP_ROOT_USER_ACTION=ignore # Windows Command Prompt setx PIP_ROOT_USER_ACTION ignore # PowerShell $Env:PIP_ROOT_USER_ACTION="ignore"

确保根据您的操作系统和 shell 类型运行正确的命令。

如果不向Docker容器添加用户,则使用root用户

如果您不将用户添加到 docker 容器,则所有命令都以 root 身份运行。

您可以在运行命令之前添加用户,pip install以消除使用 Docker 时的警告。

文件
FROM python:3.10.10-alpine3.17 RUN pip install pip --upgrade RUN adduser -D newuser USER newuser WORKDIR /home/newuser COPY --chown=newuser:newuser requirements.txt requirements.txt RUN pip install --user -r requirements.txt ENV PATH="/home/newuser/.local/bin:${PATH}" COPY --chown=newuser:newuser . . CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

在运行命令之前,我们使用adduser命令添加了一个新用户pip install

如果没有添加用户,所有命令都以 root 身份运行,这会导致问题。

使用--user选项代替sudo

请注意,使用sudo pip install不是一个好习惯。

使用 root 权限安装第三方包是危险的,应该避免。

一种替代方法是使用该--user选项。

pip install requests --user pip3 install requests --user python -m pip install requests --user python3 -m pip install requests --user

--user选项将包安装在用户的主目录中。

该命令基本上安装范围为特定用户的包,而不是整个系统。这有助于解决权限问题。

如果您决定在 Docker 容器内使用此方法,请确保先添加用户。

您在未添加用户的容器中运行的任何命令都以 root 身份运行。

--user选项在虚拟环境中不起作用

但是,--user如果您在虚拟环境中,该选项将不起作用。

最佳做法是创建一个虚拟环境并在其中安装包。

# 👇️ use correct version of Python when creating VENV python -m venv venv # 👇️ activate on Unix or MacOS source venv/bin/activate # 👇️ activate on Windows (cmd.exe) venv\Scripts\activate.bat # 👇️ activate on Windows (PowerShell) venv\Scripts\Activate.ps1 # 👇️ install the specific package in the virtual environment pip install requests

如果该python -m venv venv命令不起作用,请尝试以下 2 个命令:

  • python3 -m venv venv
  • py -m venv venv

您的虚拟环境将使用用于创建它的 Python 版本。

确保根据您的操作系统和 shell 使用正确的命令来激活您的虚拟环境。

您的虚拟环境将使用用于创建它的 Python 版本。

如果您使用 创建虚拟环境sudo,请尝试更改其权限或在不使用 的情况下重新创建它sudo
sudo chmod -R 777 venv

上面的命令假定您的虚拟环境位于名为
venv.

777意味着授予所有用户对目录内容的完全访问权限。

创建一个虚拟环境并在其中安装包会有所帮助,因为虚拟环境是一个独立的 Python 安装。

您不会遇到权限问题,因为您没有在全球范围内安装任何软件包。

而是将软件包安装在lib虚拟环境的文件夹中。

确保您的pip,setuptools和版本wheel是最新的: