You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

激活virtualenv后pip仍全局安装包的问题求助(OSX 10.11.6)

解决OS X 10.11.6虚拟环境下pip仍全局安装的问题

我之前在OS X 10.11上碰到过几乎一模一样的状况,折腾了好一阵才理顺,给你几个实用的排查和解决方向:

  • 先确认虚拟环境是否真的激活生效
    有时候终端前缀显示(venv)看起来激活了,但shell缓存或环境变量可能没同步更新,导致你调用的还是系统级的pip。执行以下命令验证:

    which pip
    

    如果输出是/usr/bin/pip或者/System/Library/Frameworks/Python.framework/Versions/2.7/bin/pip这类系统路径,说明虚拟环境没真正生效。可以试试:

    • 退出当前shell重新打开,再激活虚拟环境
    • 直接用虚拟环境内pip的绝对路径执行安装,比如:
      ./your_venv_name/bin/pip install pandas
      
  • 检查虚拟环境依赖的Python版本
    你提到用Homebrew装了Python,但可能系统默认Python还是自带的2.7,导致创建虚拟环境时用的是系统版本而非brew版本:

    1. 先确认默认Python是不是brew的版本:
      which python
      
      如果输出不是/usr/local/bin/python,说明brew的Python没设为默认。可以把brew的Python路径加到shell配置文件(.bash_profile.zshrc)最前面:
      echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile
      source ~/.bash_profile
      
    2. 重新创建虚拟环境,确保基于brew的Python:
      python -m virtualenv your_new_venv
      source your_new_venv/bin/activate
      
      再执行which pip确认路径是虚拟环境内的,之后再安装pandas。
  • 关于--user参数的错误说明
    在虚拟环境中,pip默认就是把包安装到当前虚拟环境的隔离目录里,完全不需要加--user参数——这个参数是给全局Python用的,用来在用户目录下安装包规避权限问题。虚拟环境里用--user会和虚拟环境的prefix设置冲突,所以必然报错,直接去掉这个参数就行。

  • 系统SIP限制的影响
    OS X 10.11开始启用了系统完整性保护(SIP),会严格限制修改/System/Library下的内容,这就是你全局安装时出现权限错误的原因。但正常激活的虚拟环境完全不会碰这个目录,所以核心问题还是虚拟环境没有正确隔离系统Python。

按照上面的步骤一步步排查,应该能解决你的问题。

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

火山引擎 最新活动