2012-10-05 3 views
2

서비스로 실행해야하는 파이썬 소프트웨어를 만들었습니다. /etc/init.d 아래에있는 모듈과 스크립트를 가지고 있습니다. 나는 distutils를 사용하여 시스템을 포장했습니다. 모든 것이 잘 설치,하지만 난 /etc/init.d에에서 스크립트를 실행하려고하면, 그것은 아래의 예외 제기파이썬 이상한 ImportError : 모듈 이름이 잘못되었습니다.

Traceback (most recent call last): 
    File "/etc/init.d/printserver.py", line 11, in <module> 
    from myprintserver import * 
    File "/etc/rc.d/init.d/printserver.py", line 12, in <module> 
    import myprintserver.printserver 
ImportError: No module named printserver 

내가 명령 줄을 통해 모듈을 가져 오려고, 그것은 완벽하게 작동합니다.

[[email protected] Code]# python 
Python 2.7.3 (default, Jul 24 2012, 10:05:38) 
[GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from myprintserver import * 
>>> from myprintserver.printserver import * 
>>> daemon = PrintServer('/tmp/printer-daemon.pid','/dev/null','/tmp/dlog','/tmp/dlog') 
>>> 

site-packages 아래 모듈을 검사했는데 문제가없는 것 같습니다. 오류가 나타나기 전에 sys.path를 출력하고 /usr/lib/python2.7/site-packages가 포함되어 있습니다. 아래 sys.path 출력 :

['/etc/rc.d/init.d', '/usr/lib/python2.7/site-packages/escpos-1.0-py2.7.egg', '/usr/lib/python2.7/site-packages/pyusb-1.0.0a3-py2.7.egg', '/usr/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg', '/usr/lib/python2.7/site-packages/PIL-1.1.7-py2.7-linux-x86_64.egg', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib64/python2.7/site-packages/gst-0.10', '/usr/lib64/python2.7/site-packages/gtk-2.0', '/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info'] 
+2

역 추적에서 'printserver.py' 행의 경로를 확인하십시오. 그거 이상한 게 있니? 두 번째 줄은 사이트 패키지에서 가져 오지 않습니다. –

+0

네, 그 정도는 있습니다. 그 이유는 무엇입니까? 그 원인은 무엇일까요? 분명히 파일은 site-packages/myprintserver에 있습니다. –

+1

글쎄, init.d 스크립트에서 출력 할 때 _is_'sys.path' (모두)가 무엇입니까? –

답변

1

/etc/init.d 아래에있는 스크립트의 모듈 이름이 같기 때문에 문제가 발생했습니다. 따라서 모듈을 포함 시키려고 할 때 스크립트 자체가 포함되었습니다.

스크립트의 이름을 변경하면 문제가 해결됩니다.

스크립트에 printserver라는 클래스가 없으므로 오류가 발생했습니다. 이것은 모듈과 스크립트가 동일한 디렉토리와 모듈에서 처음으로 포함 되었기 때문에 개발 과정에서 문제가되지 않았습니다.

+0

문제를 해결했다면 직접 대답을 받아 들여야합니다. – jdotjdot

관련 문제