2012-05-20 3 views
8

Когда я исполняю питон скрипт, эта проблема возникает:питон не удалось

'import site' failed; use -v for traceback 

поэтому я попытался еще раз с опцией -v, и я могу получить эти сообщения:

'import site' failed; traceback: 
Traceback (most recent call last): 
    File "/usr/lib/python2.6/site.py", line 513, in <module> 
    main() 
    File "/usr/lib/python2.6/site.py", line 495, in main 
    known_paths = addusersitepackages(known_paths) 
    File "/usr/lib/python2.6/site.py", line 238, in addusersitepackages 
    USER_BASE = env_base if env_base else joinuser("~", ".local") 
    File "/usr/lib/python2.6/site.py", line 225, in joinuser 
    return os.path.expanduser(os.path.join(*args)) 
    File "/usr/lib/python2.6/posixpath.py", line 256, in expanduser 
    userhome = pwd.getpwuid(os.getuid()).pw_dir 
KeyError: 'getpwuid(): uid not found: 65530' 

Как я могу справиться с этими ситуациями?

+0

Я получил эту ошибку при запуске сценария Python в качестве Systemd службы с DynamicUser = да – aberaud

ответ

7

Похоже, он ожидает, что пользователь с id 65530 будет существовать в вашей системе, но это не так. И он получает этот идентификатор, вызывая os.getuid(), который возвращает текущий идентификатор пользователя.

Возможно, пользователь, которым вы пользуетесь этим, так как был удален или отключен за это время? Проверьте /etc/passwd за подсказками.


Обновление в свете Вашего комментария: видимо /etc/passwd не существует внутри CHROOT тюрьмы. Либо вы можете составить его, или вы можете установить переменные окружения HOME что-то дельное, как код expanduser говорит:

if 'HOME' not in os.environ: 
     import pwd 
     userhome = pwd.getpwuid(os.getuid()).pw_dir 
    else: 
     userhome = os.environ['HOME'] 
+0

я выполнить этот питон скрипт с изолированной. – user1035957

+0

Я прокомментировал этот блок и просто установил 'userhome = '/'', и эта ошибка исчезла, большое спасибо :) – user1035957

+0

Вы взломали стандартную библиотеку вашей общесистемной установки Python и таким ужасным способом ?! Я советую вернуть это, прежде чем вы сделаете свою систему непригодной для использования. Мой ответ содержит две лучшие альтернативы. – Thomas

0

Если вы получаете эту ошибку от mod_wsgi на апача (в вас приложение журнала ошибок), то FIX является добавление «дом =/путь/к/приложение» к вашей директиве WSGIDaemonProcess в ваш wsgi.conf (это не имеет значения, где вы устанавливаете путь). Для example--

WSGIDaemonProcess ckan_default display-name=ckan_default processes=2 threads=15 home=/usr/lib/ckan/default 
+0

Случай mod_wsgi отличается и не является той же основной проблемой. Какую версию mod_wsgi вы используете? Возможно, это имело место для очень старых версий mod_wsgi, но я не уверен, что это правда (не помню) из последних версий. –

Смежные вопросы