Создание демона Python - у объекта 'module' нет атрибута 'DaemonContext' - PullRequest
9 голосов
/ 21 марта 2012

Я пытаюсь демонизировать свое приложение и получаю сообщение об ошибке:

out:     with daemon.DaemonContext():
out: AttributeError: 'module' object has no attribute 'DaemonContext'

Похоже, что другие люди получают эту ошибку из-за неустановленного модуля. Как новичок в Python, немного сбивает с толку, что есть пакеты daemon и python-daemon, а также есть два способа установки пакетов python (sudo apt-get install и sudo pip install). Тем не менее, похоже, что у меня установлен пакет. У меня установлен Python 2.6 на Ubuntu 10.04. Есть идеи?

Похоже, у меня установлен модуль:

# pip freeze
LEPL==5.0.0
MySQL-python==1.2.2
distribute==0.6.10
lockfile==0.8
matplotlib==0.99.1.1
numpy==1.3.0
pyparsing==1.5.2
python-apt==0.7.94.2ubuntu6.4
python-daemon==1.5.2
python-dateutil==1.4.1
pytz==2010b
rpy2==2.0.8
wsgiref==0.1.2

Больше доказательств того, что модуль установлен:

$ python
>>> import daemon
>>> dir(daemon)
['DaemonContext', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_copyright', '_license', '_url', '_version', 'daemon', 'version']

Ответы [ 2 ]

16 голосов
/ 18 августа 2013

Я тоже бегаю по этой программе. Если я звоню print daemon.__file__, он печатает /usr/local/lib/python2.6/dist-packages/daemon.pyc, что является правильным файлом в неправильном месте, что означает, что я неправильно установил packege.

Я использовал команду "sudo pip install daemon", которая устанавливает только файл daemon.py. Мы должны использовать commnd "sudo pip install python-daemon", который устанавливает весь пакет. После этого print daemon.__file__ печатает /usr/local/lib/python2.6/dist-packages/daemon/__init__.pyc, что означает, что я установил пакет python-daemon -package, а не только один файл python daemon.py.

Смущает, но это была моя вина.

Не забудьте вызвать "sudo pip uninstall daemon" перед тем, как дать правильную команду установки sudo pip uninstall python-daemon ".

16 голосов
/ 21 марта 2012

Программа, которая выдает ошибку, по-видимому, использует другой модуль с именем daemon.Возможно, вы называли саму программу или другой модуль в том же каталоге daemon.py?Если это так, то это будет тень установленного модуля daemon.Переименуйте daemon.py (и удалите файл daemon.pyc, который будет создан Python) и повторите попытку.

Если вы не видите ничего затенения daemon.py, заставьте ваше приложение напечатать daemon.__file__ и посмотрите, гдеимпортируется из.

...