You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无sudo权限在CentOS7上pip3安装Python库遇权限拒绝的解决方法

问题

在CentOS7服务器上搭建Nginx+Gunicorn部署Flask实验室网站,无sudo权限。执行pip3 install相关命令时出现PermissionError: [Errno 13] Permission denied: '/etc'错误,即使使用--user参数也无法解决。之前依赖由root安装,现在无法再使用root账户,需要找到其他安装依赖的方法。

执行pip3 install flask-migrate的报错

(myenv) [abcde@mgWebDB01 user01]$ pip3 install flask-migrate
Exception:
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/usr/lib/python3.6/site-packages/pip/commands/install.py", line 294, in run
    with self._build_session(options) as session:
  File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 72, in _build_session
    insecure_hosts=options.trusted_hosts,
  File "/usr/lib/python3.6/site-packages/pip/download.py", line 329, in __init__
    self.headers["User-Agent"] = user_agent()
  File "/usr/lib/python3.6/site-packages/pip/download.py", line 93, in user_agent
    from pip._vendor import distro
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 1050, in <module>
    _distro = LinuxDistribution()
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 595, in __init__
    self._distro_release_info = self._get_distro_release_info()
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 984, in _get_distro_release_info
    basenames = os.listdir(_UNIXCONFDIR)
PermissionError: [Errno 13] Permission denied: '/etc'
Traceback (most recent call last):
  File "/usr/bin/pip3", line 16, in <module>
    sys.exit(main())
  File "/usr/lib/python3.6/site-packages/pip/__init__.py", line 247, in main
    return command.main(cmd_args)
  File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 251, in main
    timeout=min(5, options.timeout)) as session:
  File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 72, in _build_session
    insecure_hosts=options.trusted_hosts,
  File "/usr/lib/python3.6/site-packages/pip/download.py", line 329, in __init__
    self.headers["User-Agent"] = user_agent()
  File "/usr/lib/python3.6/site-packages/pip/download.py", line 93, in user_agent
    from pip._vendor import distro
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 1050, in <module>
    _distro = LinuxDistribution()
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 595, in __init__
    self._distro_release_info = self._get_distro_release_info()
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 984, in _get_distro_release_info
    basenames = os.listdir(_UNIXCONFDIR)
PermissionError: [Errno 13] Permission denied: '/etc'

执行pip3 list的输出

(myenv) [abcde@mgWebDB01 user01]$ pip3 list
Package            Version
------------------ -------
click              8.0.4
dataclasses        0.8
Flask              2.0.3
importlib-metadata 4.8.3
itsdangerous       2.0.1
Jinja2             3.0.3
MarkupSafe         2.0.1
pip                9.0.3
setuptools         39.2.0
typing-extensions  4.1.1
Werkzeug           2.0.3
wheel              0.37.1
zipp               3.6.0
Traceback (most recent call last):
  File "/usr/bin/pip3", line 16, in <module>
    sys.exit(main())
  File "/usr/lib/python3.6/site-packages/pip/__init__.py", line 247, in main
    return command.main(cmd_args)
  File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 251, in main
    timeout=min(5, options.timeout)) as session:
  File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 72, in _build_session
    insecure_hosts=options.trusted_hosts,
  File "/usr/lib/python3.6/site-packages/pip/download.py", line 329, in __init__
    self.headers["User-Agent"] = user_agent()
  File "/usr/lib/python3.6/site-packages/pip/download.py", line 93, in user_agent
    from pip._vendor import distro
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 1050, in <module>
    _distro = LinuxDistribution()
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 595, in __init__
    self._distro_release_info = self._get_distro_release_info()
  File "/usr/lib/python3.6/site-packages/pip/_vendor/distro.py", line 984, in _get_distro_release_info
    basenames = os.listdir(_UNIXCONFDIR)
PermissionError: [Errno 13] Permission denied: '/etc'

解决方法

1. 升级虚拟环境内的pip到新版本

问题根源是系统pip版本过旧(9.0.3),新版本pip已修复读取/etc目录的权限问题。手动下载安装包在虚拟环境内本地安装:

  • 下载pip安装包:wget https://files.pythonhosted.org/packages/source/p/pip/pip-21.3.1.tar.gz(21.3.1是最后支持Python3.6的版本)
  • 解压:tar -xzf pip-21.3.1.tar.gz
  • 进入目录安装:cd pip-21.3.1 && python3 setup.py install --user
  • 退出并重新激活虚拟环境,再执行pip install flask-migrate

2. 指定安装路径到个人目录

激活虚拟环境后,强制将依赖安装到自己有权限的个人目录:

  • 执行安装命令:pip install --install-option="--prefix=$HOME/.local" flask-migrate
  • 确保个人bin目录在PATH中:export PATH="$HOME/.local/bin:$PATH",可将此命令添加到~/.bashrc永久生效

3. 手动下载依赖包本地安装

直接下载依赖的whl包到本地后安装:

  • 从PyPI找到flask-migrate及其依赖(如alembic)的whl包链接,用wget下载:wget https://files.pythonhosted.org/packages/.../Flask_Migrate-3.1.0-py2.py3-none-any.whl(替换为对应版本的链接)
  • 执行本地安装:pip install Flask_Migrate-3.1.0-py2.py3-none-any.whl

4. 设置环境变量跳过distro检测

旧版本pip生成User-Agent时会读取/etc目录,设置环境变量可跳过此步骤:

  • 执行:export PIP_USER_AGENT="pip/21.3.1 python/3.6"(版本号可任意填写)
  • 再执行pip install flask-migrate

内容的提问来源于stack exchange,提问作者InJae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:33:10