Why are all Python packages suddenly gone?
Question:
Today I wanted to run a (self written) Python script on my OSX laptop, but all of a sudden, all the imports returned an ImportError
. The script was running fine about a month ago and in the meantime I didn’t change anything to Python. Furthermore I’m sure that I didn’t use a virtualenv back then.
So I just started reinstalling all the packages again (even pip
needed a reinstall). I also need OpenCV, for which I run brew install opencv3
, but that gives me:
Warning: homebrew/science/opencv3 3.2.0 is already installed
even though I still can’t import it in Python:
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named cv2
I can of course uninstall and reinstall OpenCV, but it really makes me wonder; how can this have happened? What could possibly erase all Python packages?
All tips are welcome!
EDIT
Ok, I just found out that before I was using the Python installed by brew, but that the python
command somehow linked back to /usr/bin/python
instead of /usr/local/Cellar/python/2.7.13_1/bin/python2
in which all packages are still installed correctly.
So to link python
back to the brew version I ran brew unlink python && brew link python
, but which python
still refers to /usr/bin/python
Which brilliant soul can guide me back to using the brew Python?
EDIT2
I just checked out this list of suggestions to link python
to the brew version again, but nothing seems to work. Let me show you what I did:
$ 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
I then restarted the terminal, but which python
still gives me /usr/bin/python
.
So then I restarted the whole OS, but frustratingly which python
still gives me /usr/bin/python
.
Who can get me out of this brew mess?!
Answers:
Ok, after a lot of messing around, I found that the folder /usr/local/Cellar/python/2.7.13_1/bin/
didn’t contain a symlink called python
, just python2
and python2.7
.
So finally I solved it by creating a new symlink in /usr/local/Cellar/python/2.7.13_1/bin/
like this:
ln -s ../Frameworks/Python.framework/Versions/2.7/bin/python python
After that I ran
brew unlink python && brew link python
which solved all my problems.
Thanks for your attention and continuous inspiration!
ps. Although this was a solution to my troubles, I’m still unsure how this could have happened. If anybody can enlighten me that is of course still very welcome!
In my case the installed modules seemed to disappear because macOS installed a new minor version and the python3
symlink was updated to point to that new version.
This can be checked by running: ls -laFG /usr/local/bin
. As you can see, python3
is pointing to v3.11:
…which is the new version without any modules installed:
However, by explicitly pointing to the old version, we can see all the modules are still there:
Today I wanted to run a (self written) Python script on my OSX laptop, but all of a sudden, all the imports returned an ImportError
. The script was running fine about a month ago and in the meantime I didn’t change anything to Python. Furthermore I’m sure that I didn’t use a virtualenv back then.
So I just started reinstalling all the packages again (even pip
needed a reinstall). I also need OpenCV, for which I run brew install opencv3
, but that gives me:
Warning: homebrew/science/opencv3 3.2.0 is already installed
even though I still can’t import it in Python:
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named cv2
I can of course uninstall and reinstall OpenCV, but it really makes me wonder; how can this have happened? What could possibly erase all Python packages?
All tips are welcome!
EDIT
Ok, I just found out that before I was using the Python installed by brew, but that the python
command somehow linked back to /usr/bin/python
instead of /usr/local/Cellar/python/2.7.13_1/bin/python2
in which all packages are still installed correctly.
So to link python
back to the brew version I ran brew unlink python && brew link python
, but which python
still refers to /usr/bin/python
Which brilliant soul can guide me back to using the brew Python?
EDIT2
I just checked out this list of suggestions to link python
to the brew version again, but nothing seems to work. Let me show you what I did:
$ 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
I then restarted the terminal, but which python
still gives me /usr/bin/python
.
So then I restarted the whole OS, but frustratingly which python
still gives me /usr/bin/python
.
Who can get me out of this brew mess?!
Ok, after a lot of messing around, I found that the folder /usr/local/Cellar/python/2.7.13_1/bin/
didn’t contain a symlink called python
, just python2
and python2.7
.
So finally I solved it by creating a new symlink in /usr/local/Cellar/python/2.7.13_1/bin/
like this:
ln -s ../Frameworks/Python.framework/Versions/2.7/bin/python python
After that I ran
brew unlink python && brew link python
which solved all my problems.
Thanks for your attention and continuous inspiration!
ps. Although this was a solution to my troubles, I’m still unsure how this could have happened. If anybody can enlighten me that is of course still very welcome!
In my case the installed modules seemed to disappear because macOS installed a new minor version and the python3
symlink was updated to point to that new version.
This can be checked by running: ls -laFG /usr/local/bin
. As you can see, python3
is pointing to v3.11:
…which is the new version without any modules installed:
However, by explicitly pointing to the old version, we can see all the modules are still there: