2009-02-17 45 views
18

tôi đang cố gắng để tạo ra trang web đầu tiên của tôi trong Django và như tôi đang tìm ví dụ ứng dụng ra khỏi đó để lấy cảm hứng từ, tôi liên tục vấp ngã khi một thuật ngữ gọi là "ứng dụng có thể sử dụng lại".Làm thế nào để tái sử dụng một ứng dụng tái sử dụng trong Django

Tôi hiểu khái niệm của một ứng dụng có thể sử dụng lại đủ dễ dàng, nhưng phương tiện sử dụng lại ứng dụng ở Django khá mất đối với tôi. Vài câu hỏi khiến tôi lo lắng trong toàn bộ doanh nghiệp là:

Cách ưa thích để sử dụng lại ứng dụng Django hiện có là gì? Tôi đặt nó ở đâu và làm cách nào để tham khảo? Từ những gì tôi hiểu, đề nghị là đặt nó vào "PYTHONPATH" của bạn, nhưng điều đó sẽ phá vỡ ngay sau khi tôi cần triển khai ứng dụng của tôi đến một vị trí ở xa mà tôi có quyền truy cập hạn chế (ví dụ: trên dịch vụ lưu trữ) . Vì vậy, nếu tôi phát triển trang web của mình trên máy tính cục bộ và dự định triển khai nó trên một ISP nơi tôi chỉ có quyền truy cập ftp, làm cách nào để sử dụng lại các ứng dụng Django của bên thứ 3 để nếu tôi triển khai trang web của mình, trang web tiếp tục làm việc (ví dụ điều duy nhất tôi có thể tin cậy là nhà cung cấp dịch vụ đã cài đặt Python 2.5 và Django 1.x)?

Làm cách nào để tổ chức dự án Django của tôi để tôi có thể triển khai dễ dàng cùng với tất cả các ứng dụng có thể sử dụng lại mà tôi muốn sử dụng?

Trả lời

25

Nói chung, điều duy nhất cần thiết để sử dụng ứng dụng có thể tái sử dụng là đảm bảo ứng dụng đó nằm trên sys.path, để bạn có thể nhập từ mã Python. Trong hầu hết các trường hợp (nếu tác giả theo sau thực hành tốt nhất), gói ứng dụng hoặc gói ứng dụng có thể sử dụng lại sẽ chứa thư mục cấp cao nhất với tài liệu, README, setup.py và sau đó là thư mục con chứa ứng dụng thực tế (xem django-voting ví dụ; bản thân ứng dụng nằm trong thư mục con "bỏ phiếu"). Thư mục con này là những gì cần phải được đặt trong đường dẫn Python của bạn. phương pháp tốt để làm điều đó bao gồm:

  • chạy pip install appname, nếu ứng dụng đã được tải lên PyPI (những ngày này hầu hết là)
  • cài đặt ứng dụng với setup.py install (điều này có kết quả tương tự như pip install appname, nhưng đòi hỏi trước tiên bạn tải xuống và giải nén mã đó; pip sẽ làm điều đó cho bạn)
  • liên kết tượng trưng thư mục mã theo cách thủ công với thư mục gói trang web Python của bạn
  • sử dụng phần mềm như virtualenv để tạo một môi trường Python ảo thư mục wn site-packages và sau đó chạy setup.py install hoặc pip install appname với virtualenv đó, hoặc đặt hoặc liên kết symlinking ứng dụng trong gói trang web của virtualenv (được khuyến nghị cao hơn tất cả tùy chọn "cài đặt toàn cầu", nếu bạn đánh giá sự tỉnh táo trong tương lai)
  • đặt ứng dụng vào một số thư mục mà bạn dự định đặt các ứng dụng khác nhau và sau đó thêm thư mục đó vào biến môi trường PYTHONPATH

Bạn sẽ biết bạn đã đặt đúng nơi nếu bạn có thể kích hoạt Trình thông dịch Python và "bỏ phiếu nhập" (ví dụ) mà không nhận được một ImportError.

Trên máy chủ bạn chỉ có quyền truy cập FTP, tùy chọn duy nhất của bạn thực sự là tùy chọn cuối cùng và chúng phải thiết lập tùy chọn này cho bạn.Nếu họ yêu cầu hỗ trợ Django, họ phải cung cấp một số địa chỉ nơi bạn có thể tải lên các gói và chúng sẽ có sẵn để nhập bằng Python. Nếu không biết chi tiết về webhost của bạn, bạn không thể nói cách chúng cấu trúc cho bạn.

+0

Cảm ơn, điều đó rất hữu ích. :) –

2

Một câu hỏi cũ, nhưng đây là những gì tôi làm:

Nếu bạn đang sử dụng một hệ thống kiểm soát phiên bản (VCS), tôi đề nghị đặt tất cả các ứng dụng tái sử dụng và thư viện (bao gồm cả django) mà bạn yêu cầu phần mềm trong VCS. Nếu bạn không muốn đặt chúng trực tiếp dưới gốc của dự án, bạn có thể sửa đổi settings.py để thêm vị trí của chúng vào sys.path.

Sau khi triển khai đó đơn giản như nhân bản hoặc kiểm tra kho VCS đến bất cứ nơi nào bạn muốn sử dụng.

này có hai lợi ích gia tăng:

  • Version sai lệch; phần mềm của bạn luôn sử dụng phiên bản mà bạn đã thử nghiệm và không phải là phiên bản có sẵn tại thời điểm triển khai.
  • Nếu nhiều người làm việc trong dự án, không ai khác phải giải quyết việc cài đặt các phụ thuộc.

Khi đến lúc cập nhật phiên bản của thành phần, hãy cập nhật phiên bản đó trong VCS và sau đó truyền bá bản cập nhật cho các triển khai của bạn qua nó.

+0

Tôi nghiêng về phía tuyến virtualenv. Đó là cách tiếp cận rõ ràng hơn và không quá khó để cài đặt virtualenv nên "các ủy viên" cũng sẽ được thiết lập độc đáo (tôi lười biếng như bất cứ ai, vì vậy bất cứ khi nào tôi cảm thấy muốn giữ lại, tôi thích kịch bản gọn gàng đẹp sẽ tái tạo môi trường của tôi thành một loạt các bước thủ công ...) –

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