今天我想在我的OSX笔记本电脑上运行一个(自己编写的)Python脚本,但是突然之间,所有的导入都返回了一个ImportError
。大约一个月前,脚本运行得很好,在此期间我没有对Python做任何修改。而且我确信当时我没有使用virtualenv。
所以我又开始重新安装所有的软件包(甚至pip
也需要重新安装)。我还需要OpenCV,为此我运行了brew install opencv3
,但这给了我:
Warning: homebrew/science/opencv3 3.2.0 is already installed
即使我仍然无法用Python导入它:
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named cv2
我当然可以卸载并重新安装OpenCV,但这确实让我感到疑惑;这是怎么发生的?2是什么可能清除所有的Python包?
欢迎提供所有提示!
编辑
好的,我刚刚发现,在我使用brew安装的Python之前,python
命令不知何故链接回/usr/bin/python
,而不是/usr/local/Cellar/python/2.7.13_1/bin/python2
,其中所有的包仍然正确安装。
哪个聪明的灵魂能引导我回到使用酿造巨蟒?
编辑2
我刚刚 checkout 了this list of suggestions,再次将python
链接到brew版本,但似乎没有任何效果。让我向您展示我所做的:
$ echo $PATH
/usr/local/opt/opencv3/bin:/opt/local/bin:/opt/local/sbin:/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/bin:/Users/hielke/Library/Android/sdk:/Users/hielke/Library/Android/sdk/tools:/Users/hielke/Library/Android/sdk/platform-tools:/usr/local/mysql/bin:/Users/hielke/.composer/vendor/bin
# which shows `/usr/local/bin` before `/usr/bin`
$ brew link --overwrite python
Warning: Already linked: /usr/local/Cellar/python/2.7.13_1
To relink: brew unlink python && brew link python
$ which python
/usr/bin/python # <= STILL RUNNING THE SYSTEM PYTHON
$ brew unlink python && brew link python
Unlinking /usr/local/Cellar/python/2.7.13_1... 26 symlinks removed
Linking /usr/local/Cellar/python/2.7.13_1... 26 symlinks created
$ which python
/usr/bin/python # <= STILL RUNNING THE SYSTEM PYTHON
$ cat /etc/paths
/usr/local/bin
/usr/bin # THIS SEEMS TO BE CORRECT
/bin
/usr/sbin
/sbin
然后我重新启动终端,但是which python
仍然返回/usr/bin/python
。
于是我重新启动了整个操作系统,但令人沮丧的是which python
仍然给了我/usr/bin/python
。
谁能把我从这个烂摊子里弄出来?!
2条答案
按热度按时间wsewodh21#
好吧,经过大量的混乱,我发现文件夹
/usr/local/Cellar/python/2.7.13_1/bin/
不包含一个名为python
的符号链接,只有python2
和python2.7
。所以最后我通过在
/usr/local/Cellar/python/2.7.13_1/bin/
中创建一个新的符号链接来解决这个问题,如下所示:之后我就跑了
解决了我所有的问题。
感谢您的关注和不断的启发!
ps.虽然这是解决我麻烦的办法,但我仍然不知道这是怎么发生的。如果有人能给我启发,当然还是很欢迎的!
bgtovc5b2#
在我的例子中,安装的模块似乎消失了,因为macOS安装了一个新的次要版本,并且
python3
符号链接被更新为指向该新版本。这可以通过运行以下命令进行检查:
ls -laFG /usr/local/bin
。如您所见,python3
指向v3.11:...这是未安装任何模块的新版本:
但是,通过显式指向旧版本,我们可以看到所有模块仍然存在: