2012-05-20 46 views
8

Khi tôi thực hiện kịch bản python, vấn đề này xảy ra:python thất bại

'import site' failed; use -v for traceback 

vì vậy tôi cố gắng một lần nữa với tùy chọn -v, và tôi có thể nhận được những tin nhắn này:

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

Làm thế nào tôi có thể đối phó với tình huống này?

+0

Tôi gặp lỗi này khi chạy tập lệnh Python dưới dạng dịch vụ systemd với DynamicUser = yes – aberaud

Trả lời

7

Có vẻ như người dùng có id 65530 tồn tại trên hệ thống của bạn nhưng không. Và nó nhận được id đó bằng cách gọi os.getuid() trả về id người dùng hiện tại.

Có lẽ người dùng bạn đang chạy như đã bị xóa hoặc vô hiệu hóa trong thời gian chờ đợi? Kiểm tra /etc/passwd để tìm manh mối.


Cập nhật trong ánh sáng bình luận của bạn: rõ ràng /etc/passwd không tồn tại trong nhà tù chroot của bạn. Hoặc bạn có thể thử lập bản đồ nó vào, hoặc bạn có thể thiết lập các biến môi trường HOME một cái gì đó hợp lý, vì mã cho expanduser nói:

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

Tôi thực thi tập lệnh python này với chroot. – user1035957

+0

Tôi đã nhận xét khối này và chỉ đặt 'userhome = '/'' và lỗi này biến mất, cảm ơn rất nhiều :) – user1035957

+0

Bạn đã hack thư viện chuẩn của quá trình cài đặt Python trên toàn hệ thống và theo cách kinh khủng như vậy ?! Tôi khuyên bạn nên hoàn nguyên ngay lập tức trước khi bạn làm cho hệ thống của bạn không sử dụng được. Câu trả lời của tôi chứa hai lựa chọn thay thế tốt hơn. – Thomas

0

Nếu bạn nhận được lỗi này từ mod_wsgi trên apache (trong bạn log lỗi ứng dụng), các FIX là thêm "nhà =/path/to/app" để chỉ thị WSGIDaemonProcess của bạn trong wsgi.conf của bạn (nó không quan trọng mà bạn thiết lập đường dẫn đến). Ví dụ:

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

Trường hợp mod_wsgi là khác nhau và không phải là cùng một vấn đề cơ bản. Bạn đang sử dụng phiên bản mod_wsgi nào? Đó có thể là trường hợp cho các phiên bản mod_wsgi rất cũ, nhưng tôi không chắc chắn đó là sự thật (không thể nhớ) của các phiên bản mới nhất. –

Các vấn đề liên quan