2012-05-20 85 views
8

当我执行python脚本,就会出现此问题:蟒蛇导入站点失败

'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得到这个错误= YES – aberaud

回答

7

看起来像是希望系统中存在具有ID 65530的用户,但它不会。它通过调用os.getuid()来获得该ID,它返回当前用户ID。

也许您正在运行此用户的用户在此期间已被删除或禁用?检查/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

我执行与chroot的这个python脚本。 – user1035957

+0

我评论了这个模块,并设置了'userhome ='/'',这个错误消失了,非常感谢:) – user1035957

+0

您破解了您的系统级Python安装的标准库,并且以这样一种可怕的方式?我建议您在使系统无法使用之前马上恢复。我的答案包含两个更好的选择。 – Thomas

0

如果你从阿帕奇mod_wsgi的这个错误(在你的应用程序错误日志),解决方法是增加“家庭= /路径/要/应用”你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版本,情况可能已经如此,但我不确定最新版本是否属实(不记得)。 –