Trong Python bạn có thể tải lại một mô-đun như sau ...gói Reloading (và các môđun con của họ) một cách đệ quy bằng Python
import foobar
import importlib
importlib.reload(foobar)
này làm việc cho .py
tác phẩm, nhưng đối với Python gói nó sẽ chỉ tải lại gói và không phải bất kỳ mô đun phụ lồng nhau nào.
Với gói:
foobar/__init__.py
foobar/spam.py
foobar/eggs.py
Python Script:
import foobar
# assume `spam/__init__.py` is importing `.spam`
# so we dont need an explicit import.
print(foobar.spam) # ok
import importlib
importlib.reload(foobar)
# foobar.spam WONT be reloaded.
Không được đề nghị thứ là một lỗi, nhưng có lần hữu ích của nó để tải lại một gói và tất cả các mô-đun con của nó. (Nếu bạn muốn chỉnh sửa mô-đun trong khi tập lệnh chạy ví dụ).
Một số cách tốt để đệ quy tải lại gói bằng Python là gì?
Ghi chú:
Đối với mục đích của câu hỏi này giả định Python3.x mới nhất
(hiện đang sử dụng
importlib
)- phép rằng điều này có requre một số chỉnh sửa để các module mình.
- Giả sử nhập khẩu ký tự đại diện không được sử dụng (
from foobar import *
), vì chúng có thể làm phức tạp logic tải lại.
IPython cung cấp module 'IPython.lib.deepreload' cho nạp lại đệ quy. Bạn có thể tìm thấy [mã tại đây] (https://github.com/ipython/ipython/blob/master/IPython/lib/deepreload.py). Thật thú vị, mô-đun là 285 sloc. – jme
Gợi ý tuyệt vời, nhưng thay thế móc nhập khẩu là một loại giải pháp trọng lượng nặng (có ý nghĩa đối với IPython) nhưng không phải một số đoạn tôi muốn trong dự án của tôi chỉ để tải lại làm việc một cách hữu ích hơn một chút. – ideasman42