2011-11-01 9 views
6

crontab을 사용하여 MySQLdb 모듈이 필요한 파이썬 스크립트를 실행하고 있습니다. 명령 줄에서이 스크립트를 실행하면 모든 것이 잘 동작합니다. 그러나 crontab을 사용하여 실행하려고하면이 오류가 발생합니다. crontab을 사용하여 스크립트를 실행할 때 Python을 가져올 수 없습니다.

Traceback (most recent call last): 
    File "clickout.py", line 3, in <module> 
    import MySQLdb 
ImportError: No module named MySQLdb 

나는 Google 검색을했고 내 스크립트 #!/usr/bin/python의 상단이 추가되었습니다. 그러나 이것은 아무 것도하지 않았고 여전히 같은 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

12

다른 Python 실행 파일을 사용하고있을 수도 있습니다. 셸에서 which python을 입력하여 Python 실행 파일의 위치를 ​​확인하십시오. 다음 스크립트의 첫 번째 줄에, 당신이 쓰는 것,의는이 /usr/bin/python이 아닌 다른 뭔가를 반환한다고 가정 해 봅시다 /home/myuser/bin/python 말 :

#!/home/myuser/bin/python 

그것은 또한 당신의 쉘 환경 변수가 PYTHONPATH라는 것을 할 수있다.

import sys; sys.path.append('/path/to/MySQLdb-lib/') 
: 그런 경우 그것은에서 라이브러리를 가져 어디에 당신이 찾아내는 경우에, 이것은 당신이하기 전에 스크립트의 첫 번째 줄에있는 도서관, 을 찾아 "MySQLdb"의 수입을 경로를 추가하는 방법입니다
+1

대단히 감사합니다. MySQLdb 경로의 경로가 무엇인지 어떻게 알 수 있습니까? – Spencer

+1

unutbu 쇼를 좋아하세요? 터미널에 모듈을'import '하고'MySQLdb .__ file__'을 입력하십시오. –

+0

매우 유용하고 많은 감사합니다. 필자의 경우 적절한 해결책은 다음과 같습니다. cronjob을 만들 때 항상 절대 경로를 이진 파일로 사용하십시오. 감사합니다 –

6

crontab 상단에 PYTHONPATH를 정의하십시오. 파이썬 쉘을 열고 다음을 입력,

USER=... 
HOME=/home/... 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$HOME/bin 
PYTHONPATH=... 
DISPLAY=:0.0 
MAILTO=... 
LANG=en_US.UTF-8 

는 MySQLdb에 대한 경로를 찾으려면 : 모든 환경 변수를 정의 (아래) 당신이 환경 변수의 부족에 관한 몇 가지 일반적인 크론 문제를 방지하는 데 도움이 될 수 있습니다 :

>>> import MySQLdb 
>>> MySQLdb.__file__ 
'/usr/lib/pymodules/python2.7/MySQLdb/__init__.pyc' 

내 경로가 다릅니다. 위의 예에서 PYTHONPATH에 추가 할 적절한 dir은 /usr/lib/pymodules/python2.7입니다. (파이썬 실행 파일은 sys.path에 자동으로이 경로가 있어야하므로이 특정 경로를 추가 할 필요는 없습니다.

sudo crontab -e 

내가 다음 PYTHONPATH 변수에 라이브러리 경로를 추가 : crontab을 내부 PYTHONPATH 정의

+0

대단히 감사합니다!MySQLdb 경로의 경로가 무엇인지 어떻게 알 수 있습니까? – Spencer

2

처음 내가 사용 crontab을 입력, 날 위해 일했습니다.

PYTHONPATH=/home/username/.local/lib/python2.7/site-packages 

은 내가 처음 파이썬을 사용하여 수입 한 후 파일 속성을 사용하는 라이브러리의 경로를 찾으려면 : 내 경우는이이었다.

import library 
library.__file__ 
관련 문제