2013-01-24 21 views
6

Tôi muốn có thể mở trình bao Python, thực thi một số mã được xác định trong mô-đun, sau đó sửa đổi mô-đun, sau đó chạy lại trong cùng một vỏ mà không đóng/mở lại.Chạy mã từ mô-đun Python, sửa đổi mô-đun, sau đó chạy lại mà không thoát khỏi interpeter

Tôi đã thử reimporting các chức năng/đối tượng sau khi sửa đổi kịch bản, và điều đó không làm việc:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from my_module import buggy_function, test_input 
>>> buggy_function(test_input) 
wrong_value # Returns incorrect result 

# Go to the editor, make some changes to the code and save them 

# Thought reimporting might get the new version 
>>> from my_module import buggy_function, test_input 

>>> buggy_function(test_input) 
wrong_value # Returns the same incorrect result 

Rõ ràng reimporting đã không nhận được tôi 'Phiên bản mới' của hàm.

Trong trường hợp này, nó không phải là một thỏa thuận lớn để đóng trình thông dịch và mở lại nó. Nhưng, nếu mã tôi đang thử nghiệm là đủ phức tạp, đôi khi tôi phải làm một số tiền hợp lý của các đối tượng nhập khẩu và xác định các biến giả để tạo ra một ngữ cảnh có thể kiểm tra đầy đủ mã. Thật khó chịu khi phải làm điều này mỗi lần tôi thay đổi.

Bất kỳ ai biết cách "làm mới" mã mô-đun trong bộ xen kẽ Python?

+1

Bạn luôn có thể viết một module nhập khẩu tất cả mọi thứ, định nghĩa các biến giả, vv, và sau đó mỗi khi bạn mở lại phiên dịch, bạn chỉ cần 'từ testsetup nhập khẩu * 'để có được đúng ngữ cảnh (hoặc làm 'python -i test.py' thay vì chỉ' python'). – abarnert

Trả lời

9

sử dụng imp.reload():

In [1]: import imp 

In [2]: print imp.reload.__doc__ 
reload(module) -> module 

Reload the module. The module must have been successfully imported before. 
+0

tải lại() cũng có sẵn trong không gian tên chung mà không cần nhập imp. –

+0

@LieRyan chỉ trong py2x. –

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