Như hỏi, tốt nhất bạn có thể làm là
>>> from project.models.user import *
>>> import project # get module reference for reload
>>> reload(project.models.user) # reload step 1
>>> from project.models.user import * # reload step 2
nó sẽ được tốt hơn và sạch hơn nếu bạn sử dụng các module sử dụng trực tiếp, chứ không phải là làm import *
(đó là gần như không bao giờ đúng cách để làm điều đó) . Sau đó, nó sẽ chỉ là
>>> from project.models import user
>>> reload(user)
Điều này sẽ làm những gì bạn muốn. Nhưng, nó không phải là rất tốt đẹp. Nếu bạn thực sự cần tải lại các mô-đun một cách thường xuyên, tôi phải hỏi: tại sao?
Sự nghi ngờ của tôi (được hỗ trợ bởi trải nghiệm trước đó với những người đặt câu hỏi tương tự) là bạn đang thử nghiệm mô-đun của mình. Có rất nhiều cách để kiểm tra một mô-đun, và thực hiện nó bằng tay trong trình thông dịch tương tác là một trong những cách tồi tệ nhất. Lưu một trong các phiên của bạn vào một tệp và sử dụng doctest
để khắc phục nhanh chóng. Ngoài ra, viết nó ra như một chương trình và sử dụng python -i
. Tuy nhiên, giải pháp thực sự tuyệt vời nhất là sử dụng mô-đun unittest
.
Nếu không phải như vậy, hy vọng nó tốt hơn, không tệ hơn. Có thực sự không sử dụng tốt của reload
(trên thực tế, nó được loại bỏ trong 3.x). Nó không hoạt động hiệu quả - bạn có thể tải lại một mô-đun nhưng để lại các phần còn lại từ các phiên bản trước. Nó thậm chí không hoạt động trên tất cả các loại module-- mô-đun mở rộng sẽ không tải lại đúng cách, hoặc đôi khi thậm chí phá vỡ khủng khiếp, khi được tải lại.
Ngữ cảnh sử dụng nó trong trình thông dịch tương tác không để lại nhiều lựa chọn như những gì bạn đang làm và giải pháp thực sự tốt nhất sẽ là gì.Bên ngoài nó, đôi khi mọi người sử dụng reload()
để triển khai plugin, v.v. Điều này rất nguy hiểm ở mức tốt nhất và có thể được thực hiện khác nhau bằng cách sử dụng exec
(ah lãnh thổ tà ác mà chúng tôi tìm thấy) hoặc một quy trình tách biệt.
Nguồn
2010-03-28 20:53:06
+1: Thực sự không sử dụng tốt việc tải lại. –
Tôi đang làm gì để tìm câu hỏi này, tôi đang sử dụng bảng điều khiển để khám phá cấu trúc dữ liệu được nhập từ JSON. Tôi muốn sử dụng "tải lại" để giữ một số chức năng trong trình soạn thảo văn bản của tôi đi qua cấu trúc theo các cách khác nhau, chỉnh sửa chúng, sau đó chạy lại chúng mà không phải thoát khỏi bàn điều khiển. Tuy nhiên, nếu Python không thể hỗ trợ điều đó một cách rõ ràng, vì các lý do thực hiện như không có khả năng loại bỏ "các thức ăn thừa", tôi đoán tôi phải sai khi muốn làm điều đó ;-p +1 cho câu trả lời cho phép tôi làm điều đó, Tuy nhiên. –
+1 cho tôi thấy rằng tôi nên, thực sự thực sự, là viết bài kiểm tra thay vì làm những việc trong thông dịch viên bằng tay, ngay cả đối với tinh chỉnh. Điều này cũng sẽ hữu ích cho thử nghiệm không hồi quy trong tương lai. –