Tôi tự hỏi tại sao thư mục (gói phụ) chứa mô-đun con trong gói python hiển thị dưới dạng biểu tượng khi gói được nhập. Ví dụ, nếu tôi có gói này:gói nhập python - gói phụ không được hiển thị trong biểu tượng bảng
PyModTest/ Top-level package
__init__.py Initialize the package
Source/ Subpackage holding source files
__init__.py
WildMod.py Submodule containing a function: 'WildFunc'
nơi mức __init__.py đầu trông như thế này:
#!/usr/bin/env python
from Source.WildMod import WildFunc
và, cho đầy đủ vì lợi ích, các __init__.py cấp dưới trông như thế này :
#!/usr/bin/env python
__all__ = ["WildMod"]
OK, vì vậy bây giờ tôi mở ra người phiên dịch, nhập khẩu các mô-đun, và nhìn vào những biểu tượng:
>>> import PyModTest
>>> dir(PyModTest)
['Source', 'WildFunc', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
XEM, mô-đun 'Nguồn' hiển thị, mặc dù tôi chưa bao giờ nhập riêng nó!
Biểu tượng duy nhất (bên cạnh biểu tượng riêng tư) mà tôi muốn xem là 'WildFunc' của tôi. Có cách nào để ẩn gói 'Nguồn' không?
Tuyệt vời, điều đó có ý nghĩa. Cảm ơn bạn đã gợi ý về 'del Source' :) – rokuingh
'Source' là một gói con của' PyModTest', nhập ngầm sẽ được chuyển thành 'from PyModTest.Source import ...', và vì vậy mô-đun 'Source' phải được thêm vào như là một thuộc tính của mô-đun 'PyModTest'. Nếu 'Source' đã được tìm thấy bên ngoài gói' PyModTest' (có thể, các gói con được ưu tiên hơn 'sys.path'), điều này sẽ không xảy ra. Để tránh nhầm lẫn bản thân và người khác, luôn luôn thích nhập khẩu tuyệt đối. – SingleNegationElimination
@TokenMacGuy: ah, bắt tốt. Bằng cách nào đó tôi đã bỏ lỡ thực tế rằng đây là một nhập khẩu tương đối. –