2

我创建了一个应该作为服务运行的 python 软件。它有一个模块和一个脚本,位于 /etc/init.d 下。我使用 distutils 来打包系统。一切都安装得很好,但是当我尝试从 /etc/init.d 运行脚本时,它会引发以下异常:

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

当我尝试通过命令行导入模块时,它运行良好。

[root@linuxbox 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')
>>> 

我检查了站点包下的模块,一切看起来都很好。我在错误出现之前打印了 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']
4

1 回答 1

1

该问题是由于 /etc/init.d 下的脚本与模块具有相同的名称而引起的。因此,当我尝试包含模块时,脚本本身被包含。

更改脚本的名称解决了这个问题。

由于脚本没有名为 printserver 的类,因此引发了错误。这在开发过程中不是问题,因为模块和脚本都在同一个目录中,并且首先包含模块。

于 2012-10-05T19:36:08.823 回答