2012-07-27 29 views
6

Tôi đang chạy Django 1.4PIL 1.1.7 trong một virtualenv được quản lý với pip. Bất cứ khi nào tôi tải lên một tập tin JPEG thông qua giao diện quản trị của tôi, tôi nhận được lỗi sau: Upload a valid image. The file you uploaded was either not an image or a corrupted image.Nhận Django để nhận dạng hỗ trợ PIL JPEG

Như nhiều người sử dụng Ubuntu đã được báo cáo, về cài đặt, PIL erronously nhìn vào /usr/lib/ cho libjpeg, trong khi vị trí thật sự của nó là trong /usr/lib/i386-linux-gnu/. Đó là chăm sóc; Tôi làm theo các câu trả lời trong các bài:

Django ImageField "Upload a valid image. The file you uploaded was either not an image or a corrupted image."

Why can't I upload jpg files to my Django app via admin/?

Bây giờ đầu ra cuối cùng của cài đặt trông như sau:


PIL 1.1.7 SETUP SUMMARY 
-------------------------------------------------------------------- 
version  1.1.7 
platform  linux2 2.7.3 (default, Apr 20 2012, 22:44:07) 
       [GCC 4.6.3] 
-------------------------------------------------------------------- 
--- TKINTER support available 
--- JPEG support available 
--- ZLIB (PNG/ZIP) support available 
--- FREETYPE2 support available 
*** LITTLECMS support not available 
-------------------------------------------------------------------- 
To add a missing option, make sure you have the required 
library, and set the corresponding ROOT variable in the 
setup.py script. 

To check the build, run the selftest.py script. 
changing mode of build/scripts-2.7/pilfile.py from 644 to 755 
changing mode of build/scripts-2.7/pilfont.py from 644 to 755 
changing mode of build/scripts-2.7/pilconvert.py from 644 to 755 
changing mode of build/scripts-2.7/pilprint.py from 644 to 755 
changing mode of build/scripts-2.7/pildriver.py from 644 to 755 

changing mode of /usr/local/bin/pilfile.py to 755 
changing mode of /usr/local/bin/pilfont.py to 755 
changing mode of /usr/local/bin/pilconvert.py to 755 
changing mode of /usr/local/bin/pilprint.py to 755 
changing mode of /usr/local/bin/pildriver.py to 755 
Successfully installed PIL 

Tuy nhiên, Django vẫn doesn không cho phép tôi tải lên bất kỳ thứ gì ngoài các tệp BMP, điều này không được chấp nhận cho dự án này. Không giống như người dùng trong liên kết thứ hai, tôi không sử dụng Apache, vì vậy vấn đề của tôi có lẽ không liên quan. Nghi ngờ của tôi là Django vẫn đang sử dụng một cài đặt cũ của PIL. Vấn đề là tôi không biết nó có thể lấy nó từ đâu. Các tệp trong ~/.virtualenvs/project/local/lib/python2.7/site-packages dường như được cập nhật cho tôi. Bất kỳ ý tưởng?

EDIT 1: Cũng lưu ý rằng tôi đã cố gắng đăng xuất và đăng nhập lại trong admin, cũng như cài đặt pillow, như trong bài này: Uploading a JPEG image via Django displays error

+0

Bạn đã thử cài đặt [Pillow] (http://pypi.python.org/pypi/Pillow) thay vì PIL? Kiểm tra sys.path của bạn – jterrace

+0

Bạn có thể tải lên mô hình của mình không? – nicowernli

+0

@jterrace: Có. Và cài đặt đó cũng cho tôi biết hỗ trợ JPEG đã có sẵn. – novembrine

Trả lời

2

Nó chỉ ra rằng toàn bộ điều này là lỗi của tôi do một sự hiểu lầm về cách pip thực sự hoạt động. Theo thói quen, tôi liên kết bất kỳ và tất cả các cài đặt với các đặc quyền superuser, mà không chỉ không cần thiết trong trường hợp này, mà là một công thức cho sự nhầm lẫn.

Lần đầu tiên tôi cài đặt PIL, tôi đã không thêm tiền tố với sudo, nhưng tôi đã làm mỗi lần sau đó. Vì vậy, xây dựng từ lời khuyên của Meitham, tôi đã kiểm tra xem nơi nhập khẩu đến từ đâu. Nó đến từ đúng nơi, nhưng nó không có phần mở rộng tôi mong muốn, mặc dù đầu ra sau khi cài đặt nói rằng tôi đã làm. Dài câu chuyện ngắn, tôi loại bỏ các thư mục từ trang web của tôi-gói, sau đó pip freeze tiếp tục cho tôi biết tôi đã không có PIL nhưng sudo pip install nói với tôi tôi đã làm.

Bài học kinh nghiệm: virtualenv được dựa vào thư mục của người dùng, về đặc quyền của người dùng. Suy nghĩ kỹ trước khi kết hợp sudopip trong cùng một lệnh.

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