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')
>>> 

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']
4

1 に答える 1

1

この問題は、/etc/init.d の下のスクリプトがモジュールと同じ名前を持っていたために発生しました。そのため、モジュールをインクルードしようとすると、スクリプト自体がインクルードされました。

スクリプトの名前を変更すると、問題が解決しました。

スクリプトには printserver という名前のクラスがないため、エラーが発生しました。モジュールとスクリプトの両方が同じディレクトリにあり、モジュールが最初に含まれていたため、これは開発中の問題ではありませんでした。

于 2012-10-05T19:36:08.823 に答える