Mac M1环境下虚拟环境selenium找不到,sudo运行正常的原因
问题分析与解决
问题场景
我在Mac M1设备上,项目根目录下的app.py代码如下:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import time driver = webdriver.Chrome(service= Service(ChromeDriverManager().install())) url = "https://www.naver.com/" driver.get(url) time.sleep(5)
执行了以下操作创建虚拟环境并安装依赖:
python -m venv venv. venv/bin/activatepip install seleniumpip install webdriver_manager
但运行python app.py时出现错误:
(venv) [~/Desktop/leetcode-auto-bookmark]$ python app.py Traceback (most recent call last): File "/Users/obzva/Desktop/leetcode-auto-bookmark/app.py", line 1, in <module> from selenium import webdriver ModuleNotFoundError: No module named 'selenium'
尝试过检查Python与pip版本匹配、升级pip、重新安装依赖均无效,使用sudo python app.py可正常运行,且python --version与sudo python --version版本一致。
核心原因
虚拟环境权限不足
Mac M1的桌面目录受系统隐私保护机制限制,普通用户身份下,虚拟环境的pip无法将依赖包写入到虚拟环境的site-packages目录,导致依赖实际没安装成功。而sudo以root身份运行时,绕过了目录权限限制,但此时调用的是系统全局Python环境(而非虚拟环境),全局环境中已存在selenium依赖,所以能正常运行。虚拟环境激活后pip与python不对应
虽然虚拟环境显示已激活,但可能pip并未指向虚拟环境内的pip(比如系统默认用pip3而你用了pip),导致依赖被安装到了全局环境而非虚拟环境。
解决步骤
- 验证虚拟环境的pip路径
激活虚拟环境后,执行以下命令查看pip路径:
which pip
正常输出应为~/Desktop/leetcode-auto-bookmark/venv/bin/pip,如果不是,说明虚拟环境未正确激活,或者需要使用pip3替代pip。
- 修复项目目录权限
给项目目录添加足够的读写权限:
chmod -R 755 ~/Desktop/leetcode-auto-bookmark
然后重新激活虚拟环境并重新安装依赖:
. venv/bin/activate pip install selenium webdriver_manager
- 检查虚拟环境依赖是否安装成功
进入虚拟环境的site-packages目录查看是否存在selenium文件夹:
ls venv/lib/python*/site-packages | grep selenium
如果能看到selenium相关文件,说明安装成功,此时运行python app.py即可正常执行。
- 禁止使用sudo运行
sudo会使用全局Python环境,长期使用会污染全局依赖,务必使用虚拟环境内的Python解释器运行代码。
内容的提问来源于stack exchange,提问作者obzva
相关产品推荐
相关产品推荐

