當我使用crontab定時執行Python腳本時報錯:
ImportError: No module named 'selenium'
但是我在IDE或者終端運行時都沒有出錯啊。
那么是什么原因導致的這種錯誤的呢,下面是我定時執行的代碼:
26 * * * * /usr/local/bin/python3 /Users/name/Projects/python/src/Crawl.py > /Users/name/Projects/python/xls/crawl.log 2>&1 &
也沒有問題啊
查閱了資料才知道,是因為我的電腦中安裝了不止一個Python版本,在crontab執行定時任務時我們必須要寫出Python的全部路徑。
我在終端輸入 which python3 輸出是:/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
但是輸入 which Python時會輸出:/usr/local/bin/python
所以我在crontab中寫的路徑/usr/local/bin/python3是不存在的,所以是沒辦法正確執行的。知道了原因我們應該怎么修改呢?
由于當時自己安裝Python3 的姿勢不太正確所以我打算重新卸載以后再安裝
1、卸載Python3:
第一步:刪除框架
sudo rm -rf /Library/Frameworks/Python.framework/Versions/3
第二步:刪除應用目錄
sudo rm -rf "/Applications/Python 3"
第三步:刪除指向python的鏈接
cd /usr/local/bin/
ls -l /usr/local/bin | grep '/Library/Frameworks/Python.framework/Versions/3' # 查看鏈接
brew prune # 清除鏈接和目錄
最關鍵的是一定要去目錄/Library/Frameworks/Python.framework/Versions去把里面的Python3的文件全部刪除,要不然會影響后面Pytho3的安裝可link的。
2、安裝Python3
第一步:下載Python3
brew install python
(這個時候可能會報錯:
Error: Another active Homebrew update process is already in progress.
Please wait for it to finish or terminate it to continue.
Error: python 2.7.12_2 is already installed
不要慌,終端給的提示執行brew upgrade python就好了)
第二步:執行link操作
brew link python3
(如果報錯:
Error: Could not symlink share/man/man1/python3.1
Target /usr/local/share/man/man1/python3.1
already exists. You may want to remove it:
rm '/usr/local/share/man/man1/python3.1'
還是安裝提示執行brew link --overwrite python3,你就會link成功的)
出現:Linking /usr/local/Cellar/python/3.7.1... 24 symlinks created 那就恭喜你你已經link成功了
執行:which python3
正確的輸出是:/usr/local/bin/python3
如果你的輸出不是這樣的,那么就看上面我說的,要清除/Library/Frameworks/Python.framework/Versions里面的Python3的文件。清除以后再執行第二步brew link python3即可。
3.install Selenium
按照上面的兩個步驟我們已經成功的安裝并且配置了Python3的path。那最后一步就是install相關庫了。
重點來了:一定要cd到你Python3安裝位置的目錄下install Selenium。
第一步:
cd 到/usr/local/Cellar/python/3.x/bin
第二步:
pip3 install -U selenium
哈哈,如果又報錯了,說Selenium已經存在,那就pip uninstall selenium以后再instal啦~
OK,終于大功告成了~