Tôi khuyên bạn nên sử dụng tiện ích mở rộng tải tự động IPython .
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
Và từ bây giờ, tất cả các mô-đun đã nhập sẽ được làm mới trước khi đánh giá.
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
In [5]: print_something()
Out[5]: 'Something else'
Cũng hoạt động nếu một cái gì đó được nhập trước %load_ext autoreload
lệnh.
./manage.py shell
In [1]: from x import print_something
In [2]: print_something()
Out[2]: 'Something'
In [3]: %load_ext autoreload
In [4]: %autoreload 2
In [5]: print_something()
Out[5]: 'Something else'
Cũng có thể ngăn một số nhập làm mới bằng %aimport
lệnh và 3 chiến lược tải tự động:
%Nạp lại tự động
- Tự động tải lại tất cả các mô-đun (trừ những mô-đun bị% aimport loại trừ) ngay bây giờ.
% autoreload 0
% autoreload 1
- Tải lại tất cả các mô-đun đã nhập với% aimport mọi lúc trước khi thực thi mã Python đã nhập.
% autoreload 2
- Tải lại tất cả các mô-đun (ngoại trừ những mô-đun bị% aimport loại trừ) trước khi thực thi mã Python đã nhập.
% aimport
- Liệt kê các mô-đun sẽ được nhập tự động hoặc không được nhập.
% aimport foo
- Nhập mô-đun 'foo' và đánh dấu nó sẽ được tải tự động cho% autoreload 1
% aimport -foo
- Đánh dấu mô-đun 'foo' để không được tải lại tự động.
Điều này thường hoạt động tốt cho việc sử dụng của tôi, nhưng có một số điều cần lưu ý:
- Việc thay thế các đối tượng mã không phải lúc nào cũng thành công: việc thay đổi @property trong một lớp thành một phương thức thông thường hoặc một phương thức thành một biến thành viên có thể gây ra vấn đề (nhưng chỉ trong các đối tượng cũ).
- Các chức năng bị xóa (ví dụ: thông qua khỉ vá) khỏi một mô-đun trước khi tải lại sẽ không được nâng cấp.
- Không thể tải lại các mô-đun mở rộng C và do đó không thể tự động tải lại.