{"id":120931,"date":"2025-11-20T15:27:56","date_gmt":"2025-11-20T08:27:56","guid":{"rendered":"https:\/\/tino.vn\/blog\/?p=120931"},"modified":"2025-11-20T15:29:15","modified_gmt":"2025-11-20T08:29:15","slug":"file-init-py-trong-python","status":"publish","type":"post","link":"https:\/\/tino.vn\/blog\/file-init-py-trong-python\/","title":{"rendered":"T\u00ecm hi\u1ec3u file __init__.py trong Python: Vai tr\u00f2, c\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng v\u00e0 l\u00fd do c\u1ea7n s\u1eed d\u1ee5ng"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Khi tham gia v\u00e0o c\u00e1c d\u1ef1 \u00e1n ph\u1ea7n m\u1ec1m quy m\u00f4 l\u1edbn ho\u1eb7c nghi\u00ean c\u1ee9u m\u00e3 ngu\u1ed3n c\u1ee7a c\u00e1c th\u01b0 vi\u1ec7n n\u1ed5i ti\u1ebfng, l\u1eadp tr\u00ecnh vi\u00ean th\u01b0\u1eddng xuy\u00ean b\u1eaft g\u1eb7p t\u1eadp tin __init__.py n\u1eb1m trong h\u1ea7u h\u1ebft c\u00e1c th\u01b0 m\u1ee5c con. D\u00f9 l\u00e0 m\u1ed9t th\u00e0nh ph\u1ea7n c\u01a1 b\u1ea3n, nh\u01b0ng __init__.py th\u01b0\u1eddng g\u00e2y b\u1ed1i r\u1ed1i cho nh\u1eefng ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u l\u00e0m quen v\u1edbi <a href=\"https:\/\/tino.vn\/blog\/python-la-gi\/\" target=\"_blank\" data-type=\"post\" data-id=\"16155\" rel=\"noreferrer noopener\">Python<\/a>, \u0111\u1eb7c bi\u1ec7t l\u00e0 v\u1ec1 ch\u1ee9c n\u0103ng th\u1ef1c t\u1ebf c\u1ee7a t\u1eadp tin n\u00e0y trong c\u00e1c phi\u00ean b\u1ea3n Python hi\u1ec7n \u0111\u1ea1i. C\u00f9ng Tino t\u00ecm hi\u1ec3u vai tr\u00f2 c\u1ee7a file <strong>__init__.py<\/strong> trong Python qua b\u00e0i vi\u1ebft d\u01b0\u1edbi \u0111\u00e2y nh\u00e9!<\/strong><\/p>\n\n\n\n<h2 id=\"T\u1ed5ng_quan_v\u1ec1_file___init__.py_trong_Python\"><a id=\"post-120931-_vxva1k9mg2dn\"><\/a>T\u1ed5ng quan v\u1ec1 file __init__.py trong Python<\/h2>\n\n\n\n<h3 id=\"File___init__.py_trong_Python_l\u00e0_g\u00ec?\"><a id=\"post-120931-_gnep33x0xhjw\"><\/a><strong>File __init__.py trong Python l\u00e0 g\u00ec?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Trong ki\u1ebfn tr\u00fac m\u00e3 ngu\u1ed3n Python, __init__.py l\u00e0 m\u1ed9t t\u1eadp tin k\u1ecbch b\u1ea3n (script) \u0111\u1eb7c bi\u1ec7t \u0111\u00f3ng vai tr\u00f2 x\u00e1c \u0111\u1ecbnh danh t\u00ednh cho m\u1ed9t th\u01b0 m\u1ee5c, bi\u1ebfn th\u01b0 m\u1ee5c ch\u1ee9a t\u1eadp tin n\u00e0y tr\u1edf th\u00e0nh m\u1ed9t Python Package (g\u00f3i ph\u1ea7n m\u1ec1m) ch\u00ednh th\u1ee9c \u0111\u1ec3 tr\u00ecnh th\u00f4ng d\u1ecbch c\u00f3 th\u1ec3 nh\u1eadn di\u1ec7n v\u00e0 x\u1eed l\u00fd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Khi m\u1ed9t package \u0111\u01b0\u1ee3c import v\u00e0o ch\u01b0\u01a1ng tr\u00ecnh, c\u00e1c m\u00e3 l\u1ec7nh n\u1eb1m b\u00ean trong __init__.py s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c th\u1ef1c thi \u0111\u1ea7u ti\u00ean, cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean thi\u1ebft l\u1eadp m\u00f4i tr\u01b0\u1eddng kh\u1edfi t\u1ea1o, \u0111\u1ecbnh ngh\u0129a c\u00e1c bi\u1ebfn to\u00e0n c\u1ee5c c\u1ea7n thi\u1ebft ho\u1eb7c ki\u1ec3m so\u00e1t kh\u00f4ng gian t\u00ean (namespace) b\u1eb1ng c\u00e1ch gom nh\u00f3m v\u00e0 \u0111\u01a1n gi\u1ea3n h\u00f3a vi\u1ec7c truy xu\u1ea5t c\u00e1c module con.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-1.png\" alt=\"File __init__.py trong Python l\u00e0 g\u00ec?\" class=\"wp-image-120935\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-1.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-1-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>File __init__.py trong Python l\u00e0 g\u00ec?<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">D\u00f9 n\u1ed9i dung b\u00ean trong c\u00f3 th\u1ec3 ho\u00e0n to\u00e0n \u0111\u1ec3 tr\u1ed1ng, s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a __init__.py v\u1eabn l\u00e0 d\u1ea5u hi\u1ec7u k\u1ef9 thu\u1eadt ti\u00eau chu\u1ea9n \u0111\u1ec3 ph\u00e2n bi\u1ec7t m\u1ed9t package Python v\u1edbi c\u00e1c th\u01b0 m\u1ee5c l\u01b0u tr\u1eef d\u1eef li\u1ec7u th\u00f4ng th\u01b0\u1eddng.<\/p>\n\n\n\n<h3 id=\"C\u1ea5u_tr\u00fac_c\u01a1_b\u1ea3n_c\u1ee7a_file___init__.py\"><a id=\"post-120931-_y5zayw2jtwps\"><\/a><strong>C\u1ea5u tr\u00fac c\u01a1 b\u1ea3n c\u1ee7a file __init__.py<\/strong><\/h3>\n\n\n\n<h4 id=\"C\u1ea5u_tr\u00fac_ti\u00eau_chu\u1ea9n_c\u1ee7a___init__.py\"><a id=\"post-120931-_jry2qxq8juac\"><\/a>C\u1ea5u tr\u00fac ti\u00eau chu\u1ea9n c\u1ee7a __init__.py<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Th\u00f4ng th\u01b0\u1eddng, n\u1ed9i dung c\u1ee7a t\u1eadp tin kh\u1edfi t\u1ea1o n\u00e0y \u0111\u01b0\u1ee3c chia th\u00e0nh 4 ph\u1ea7n ch\u00ednh theo th\u1ee9 t\u1ef1 t\u1eeb tr\u00ean xu\u1ed1ng d\u01b0\u1edbi:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Module Docstring (T\u00e0i li\u1ec7u m\u00f4 t\u1ea3):<\/strong> Gi\u1edbi thi\u1ec7u ng\u1eafn g\u1ecdn v\u1ec1 m\u1ee5c \u0111\u00edch c\u1ee7a package.<\/li>\n\n\n\n<li><strong>Package Metadata (Si\u00eau d\u1eef li\u1ec7u):<\/strong> \u0110\u1ecbnh ngh\u0129a phi\u00ean b\u1ea3n, t\u00e1c gi\u1ea3.<\/li>\n\n\n\n<li><strong>API Exposition (C\u00f4ng khai giao di\u1ec7n):<\/strong> Import c\u00e1c class\/h\u00e0m t\u1eeb module con l\u00ean c\u1ea5p package.<\/li>\n\n\n\n<li><strong>Export Control (Ki\u1ec3m so\u00e1t xu\u1ea5t kh\u1ea9u):<\/strong> \u0110\u1ecbnh ngh\u0129a danh s\u00e1ch __all__.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-2.png\" alt=\"C\u1ea5u tr\u00fac c\u01a1 b\u1ea3n c\u1ee7a file __init__.py\" class=\"wp-image-120936\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-2.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-2-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>C\u1ea5u tr\u00fac c\u01a1 b\u1ea3n c\u1ee7a file __init__.py<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h4 id=\"V\u00ed_d\u1ee5_m\u00e3_ngu\u1ed3n_m\u1eabu_(Template)\"><a id=\"post-120931-_96yxo0sdvbzr\"><\/a>V\u00ed d\u1ee5 m\u00e3 ngu\u1ed3n m\u1eabu (Template)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gi\u1ea3 s\u1eed ch\u00fang ta \u0111ang x\u00e2y d\u1ef1ng m\u1ed9t package x\u1eed l\u00fd d\u1eef li\u1ec7u t\u00ean l\u00e0 data_toolkit. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 n\u1ed9i dung file <em>data_toolkit\/__init__.py<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"\"\"\ndata_toolkit\n~~~~~~~~~~~~\n\nG\u00f3i ph\u1ea7n m\u1ec1m h\u1ed7 tr\u1ee3 x\u1eed l\u00fd v\u00e0 ph\u00e2n t\u00edch d\u1eef li\u1ec7u hi\u1ec7u su\u1ea5t cao.\nCung c\u1ea5p c\u00e1c c\u00f4ng c\u1ee5 \u0111\u1ec3 \u0111\u1ecdc, ghi v\u00e0 chuy\u1ec3n \u0111\u1ed5i \u0111\u1ecbnh d\u1ea1ng d\u1eef li\u1ec7u.\n\"\"\"\n\n# --- PH\u1ea6N 1: METADATA (TH\u00d4NG TIN G\u00d3I) ---\n# C\u00e1c bi\u1ebfn dunder (double underscore) gi\u00fap \u0111\u1ecbnh danh phi\u00ean b\u1ea3n v\u00e0 t\u00e1c gi\u1ea3\n__version__ = \"1.0.2\"\n__author__ = \"Ten Cua Ban\"\n__email__ = \"contact@example.com\"\n\n\n# --- PH\u1ea6N 2: API EXPOSITION (L\u00c0M PH\u1eb2NG NAMESPACE) ---\n# S\u1eed d\u1ee5ng import t\u01b0\u01a1ng \u0111\u1ed1i (relative import) \u0111\u1ec3 \u0111\u01b0a c\u00e1c class quan tr\u1ecdng ra ngo\u00e0i.\n# Thay v\u00ec: from data_toolkit.readers.csv_reader import CSVReader\n# Ng\u01b0\u1eddi d\u00f9ng ch\u1ec9 c\u1ea7n: from data_toolkit import CSVReader\n\nfrom .readers.csv_reader import CSVReader\nfrom .readers.json_reader import JSONReader\nfrom .writers.file_writer import DataWriter\nfrom .utils.common import validate_data\n\n\n# --- PH\u1ea6N 3: EXPORT CONTROL (KI\u1ec2M SO\u00c1T PH\u1ea0M VI) ---\n# Ch\u1ec9 \u0111\u1ecbnh r\u00f5 nh\u1eefng th\u00e0nh ph\u1ea7n n\u00e0o s\u1ebd \u0111\u01b0\u1ee3c xu\u1ea5t hi\u1ec7n khi d\u00f9ng l\u1ec7nh:\n# from data_toolkit import *\n# C\u00e1c module kh\u00e1c (nh\u01b0 c\u00e1c h\u00e0m n\u1ed9i b\u1ed9) s\u1ebd b\u1ecb \u1ea9n \u0111i.\n\n__all__ = &#91;\n    \"CSVReader\",\n    \"JSONReader\",\n    \"DataWriter\",\n    \"validate_data\",\n    \"__version__\",\n]<\/code><\/pre>\n\n\n\n<h4 id=\"Ph\u00e2n_t\u00edch_chi_ti\u1ebft_t\u1eebng_th\u00e0nh_ph\u1ea7n\"><a id=\"post-120931-_m9xtua7zsl6f\"><\/a>Ph\u00e2n t\u00edch chi ti\u1ebft t\u1eebng th\u00e0nh ph\u1ea7n<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Docstring (Chu\u1ed7i t\u00e0i li\u1ec7u):<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lu\u00f4n b\u1eaft \u0111\u1ea7u file b\u1eb1ng m\u1ed9t chu\u1ed7i k\u00fd t\u1ef1 \u0111a d\u00f2ng (triple quotes). Ph\u1ea7n n\u00e0y c\u1ef1c k\u1ef3 quan tr\u1ecdng v\u00ec khi ng\u01b0\u1eddi d\u00f9ng g\u1ecdi l\u1ec7nh help(package_name), Python s\u1ebd hi\u1ec3n th\u1ecb n\u1ed9i dung m\u00f4 t\u1ea3 n\u00e0y. Docstring gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean kh\u00e1c hi\u1ec3u nhanh m\u1ee5c \u0111\u00edch c\u1ee7a package m\u00e0 kh\u00f4ng c\u1ea7n \u0111\u1ecdc to\u00e0n b\u1ed9 m\u00e3 ngu\u1ed3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Dunder Variables (Bi\u1ebfn h\u1ec7 th\u1ed1ng):<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vi\u1ec7c khai b\u00e1o __version__ ngay trong __init__.py l\u00e0 m\u1ed9t quy t\u1eafc b\u1ea5t th\u00e0nh v\u0103n (convention). H\u00e0nh \u0111\u1ed9ng n\u00e0y cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng ki\u1ec3m tra phi\u00ean b\u1ea3n th\u01b0 vi\u1ec7n \u0111ang c\u00e0i \u0111\u1eb7t b\u1eb1ng l\u1ec7nh print(package.__version__), h\u1ed7 tr\u1ee3 \u0111\u1eafc l\u1ef1c cho vi\u1ec7c debug v\u00e0 qu\u1ea3n l\u00fd s\u1ef1 ph\u1ee5 thu\u1ed9c.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Relative Imports (Import t\u01b0\u01a1ng \u0111\u1ed1i):<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1ec3 &#8220;l\u00e0m ph\u1eb3ng&#8221; c\u1ea5u tr\u00fac g\u00f3i, l\u1eadp tr\u00ecnh vi\u00ean s\u1eed d\u1ee5ng c\u00fa ph\u00e1p from .module import Class. D\u1ea5u ch\u1ea5m . \u0111\u1ea1i di\u1ec7n cho th\u01b0 m\u1ee5c hi\u1ec7n t\u1ea1i. C\u00e1ch vi\u1ebft n\u00e0y gi\u00fap m\u00e3 ngu\u1ed3n linh ho\u1ea1t h\u01a1n; n\u1ebfu t\u00ean th\u01b0 m\u1ee5c cha thay \u0111\u1ed5i, c\u00e1c l\u1ec7nh import b\u00ean trong __init__.py v\u1eabn ho\u1ea1t \u0111\u1ed9ng ch\u00ednh x\u00e1c m\u00e0 kh\u00f4ng c\u1ea7n s\u1eeda \u0111\u1ed5i.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Bi\u1ebfn __all__:<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u00e2y l\u00e0 &#8220;b\u1ee9c t\u01b0\u1eddng l\u1eeda&#8221; cu\u1ed1i c\u00f9ng. Danh s\u00e1ch n\u00e0y x\u00e1c \u0111\u1ecbnh giao di\u1ec7n c\u00f4ng khai (Public API) c\u1ee7a package. N\u1ebfu thi\u1ebfu __all__, l\u1ec7nh from package import * s\u1ebd kh\u00f4ng import c\u00e1c submodule m\u1ed9t c\u00e1ch t\u1ef1 \u0111\u1ed9ng (tr\u1eeb khi m\u00e3 l\u1ec7nh import \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ea1y). Vi\u1ec7c khai b\u00e1o minh b\u1ea1ch danh s\u00e1ch n\u00e0y gi\u00fap IDE g\u1ee3i \u00fd code (autocomplete) ch\u00ednh x\u00e1c h\u01a1n v\u00e0 ng\u0103n ch\u1eb7n vi\u1ec7c l\u1ed9 c\u00e1c h\u00e0m n\u1ed9i b\u1ed9 kh\u00f4ng mong mu\u1ed1n.<\/p>\n\n\n\n<h3 id=\"4_vai_tr\u00f2_ch\u1ee7_\u0111\u1ea1o_c\u1ee7a_file___init__.py_trong_Python\"><a id=\"post-120931-_n452y6uzbltc\"><\/a><strong>4 vai tr\u00f2 ch\u1ee7 \u0111\u1ea1o c\u1ee7a file __init__.py trong Python<\/strong><\/h3>\n\n\n\n<h4 id=\"\u0110\u00e1nh_d\u1ea5u_v\u00e0_\u0111\u1ecbnh_danh_Python_Package\"><a id=\"post-120931-_k2xbfrag3arn\"><\/a>\u0110\u00e1nh d\u1ea5u v\u00e0 \u0111\u1ecbnh danh Python Package<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trong c\u00e1c phi\u00ean b\u1ea3n Python c\u0169 (tr\u01b0\u1edbc 3.3), s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a __init__.py l\u00e0 \u0111i\u1ec1u ki\u1ec7n b\u1eaft bu\u1ed9c \u0111\u1ec3 tr\u00ecnh th\u00f4ng d\u1ecbch nh\u1eadn di\u1ec7n m\u1ed9t th\u01b0 m\u1ee5c l\u00e0 m\u1ed9t g\u00f3i (package) c\u00f3 th\u1ec3 import \u0111\u01b0\u1ee3c. M\u1eb7c d\u00f9 Python hi\u1ec7n \u0111\u1ea1i \u0111\u00e3 gi\u1edbi thi\u1ec7u kh\u00e1i ni\u1ec7m &#8220;Implicit Namespace Package&#8221; (cho ph\u00e9p b\u1ecf qua t\u1eadp tin n\u00e0y), nh\u01b0ng vi\u1ec7c t\u1ea1o __init__.py v\u1eabn l\u00e0 ti\u00eau chu\u1ea9n v\u00e0ng (Best Practice) \u0111\u1ec3 \u0111\u1ecbnh ngh\u0129a m\u1ed9t &#8220;Regular Package&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e0nh \u0111\u1ed9ng n\u00e0y gi\u00fap ph\u00e2n bi\u1ec7t r\u00f5 r\u00e0ng gi\u1eefa c\u00e1c th\u01b0 m\u1ee5c ch\u1ee9a m\u00e3 ngu\u1ed3n \u1ee9ng d\u1ee5ng v\u00e0 c\u00e1c th\u01b0 m\u1ee5c t\u00e0i nguy\u00ean th\u00f4ng th\u01b0\u1eddng (nh\u01b0 h\u00ecnh \u1ea3nh, log, cache), \u0111\u1ea3m b\u1ea3o tr\u00ecnh th\u00f4ng d\u1ecbch kh\u00f4ng l\u00e3ng ph\u00ed t\u00e0i nguy\u00ean qu\u00e9t qua c\u00e1c th\u01b0 m\u1ee5c kh\u00f4ng c\u1ea7n thi\u1ebft.<\/p>\n\n\n\n<h4 id=\"Thi\u1ebft_l\u1eadp_v\u00e0_kh\u1edfi_t\u1ea1o_m\u00f4i_tr\u01b0\u1eddng_t\u1ef1_\u0111\u1ed9ng\"><a id=\"post-120931-_ahlbo184meyc\"><\/a>Thi\u1ebft l\u1eadp v\u00e0 kh\u1edfi t\u1ea1o m\u00f4i tr\u01b0\u1eddng t\u1ef1 \u0111\u1ed9ng<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ngay khi m\u1ed9t package \u0111\u01b0\u1ee3c import l\u1ea7n \u0111\u1ea7u ti\u00ean v\u00e0o ch\u01b0\u01a1ng tr\u00ecnh, to\u00e0n b\u1ed9 m\u00e3 l\u1ec7nh n\u1eb1m trong __init__.py s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c thi t\u1ef1 \u0111\u1ed9ng. C\u01a1 ch\u1ebf n\u00e0y cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean th\u1ef1c hi\u1ec7n c\u00e1c t\u00e1c v\u1ee5 kh\u1edfi t\u1ea1o quan tr\u1ecdng tr\u01b0\u1edbc khi b\u1ea5t k\u1ef3 module con n\u00e0o \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng, bao g\u1ed3m:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Thi\u1ebft l\u1eadp c\u00e1c bi\u1ebfn c\u1ea5u h\u00ecnh to\u00e0n c\u1ee5c ho\u1eb7c c\u00e1c h\u1eb1ng s\u1ed1 d\u00f9ng chung.<\/li>\n\n\n\n<li>Kh\u1edfi t\u1ea1o k\u1ebft n\u1ed1i c\u01a1 s\u1edf d\u1eef li\u1ec7u ho\u1eb7c logging.<\/li>\n\n\n\n<li>Ki\u1ec3m tra c\u00e1c \u0111i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft c\u1ee7a h\u1ec7 th\u1ed1ng (phi\u00ean b\u1ea3n th\u01b0 vi\u1ec7n ph\u1ee5 thu\u1ed9c, bi\u1ebfn m\u00f4i tr\u01b0\u1eddng).<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-3.png\" alt=\"4 vai tr\u00f2 ch\u1ee7 \u0111\u1ea1o c\u1ee7a file __init__.py trong Python\" class=\"wp-image-120937\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-3.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-3-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>4 vai tr\u00f2 ch\u1ee7 \u0111\u1ea1o c\u1ee7a file __init__.py trong Python<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h4 id=\"&#8220;L\u00e0m_ph\u1eb3ng&#8221;_kh\u00f4ng_gian_t\u00ean_v\u00e0_t\u1ed1i_\u01b0u_h\u00f3a_Import_(API_Exposure)\"><a id=\"post-120931-_vzzn4ray1zj0\"><\/a>&#8220;L\u00e0m ph\u1eb3ng&#8221; kh\u00f4ng gian t\u00ean v\u00e0 t\u1ed1i \u01b0u h\u00f3a Import (API Exposure)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Th\u00f4ng th\u01b0\u1eddng, \u0111\u1ec3 s\u1eed d\u1ee5ng m\u1ed9t h\u00e0m n\u1eb1m s\u00e2u trong c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c, ng\u01b0\u1eddi d\u00f9ng ph\u1ea3i vi\u1ebft nh\u1eefng c\u00e2u l\u1ec7nh d\u00e0i d\u00f2ng nh\u01b0: <em>import my_package.sub_folder.module_a<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">__init__.py cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean import c\u00e1c l\u1edbp (class) ho\u1eb7c h\u00e0m (function) quan tr\u1ecdng t\u1eeb c\u00e1c module con v\u00e0o ngay c\u1ea5p \u0111\u1ed9 package cao nh\u1ea5t. K\u1ef9 thu\u1eadt n\u00e0y gi\u00fap &#8220;l\u00e0m ph\u1eb3ng&#8221; c\u1ea5u tr\u00fac g\u00f3i, cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng g\u1ecdi h\u00e0m m\u1ed9t c\u00e1ch ng\u1eafn g\u1ecdn v\u00e0 thanh l\u1ecbch h\u01a1n: <em>import my_package<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vi\u1ec7c n\u00e0y gi\u00fap che gi\u1ea5u s\u1ef1 ph\u1ee9c t\u1ea1p c\u1ee7a c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c b\u00ean trong, mang l\u1ea1i tr\u1ea3i nghi\u1ec7m Clean Code cho ng\u01b0\u1eddi s\u1eed d\u1ee5ng th\u01b0 vi\u1ec7n.<\/p>\n\n\n\n<h4 id=\"Ki\u1ec3m_so\u00e1t_t\u00ednh_\u0111\u00f3ng_g\u00f3i_v\u1edbi_bi\u1ebfn___all__\"><a id=\"post-120931-_yudeoipvzpjd\"><\/a>Ki\u1ec3m so\u00e1t t\u00ednh \u0111\u00f3ng g\u00f3i v\u1edbi bi\u1ebfn __all__<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1ec3 ng\u0103n ch\u1eb7n vi\u1ec7c import tr\u00e0n lan c\u00e1c module n\u1ed9i b\u1ed9 kh\u00f4ng mong mu\u1ed1n khi ng\u01b0\u1eddi d\u00f9ng s\u1eed d\u1ee5ng l\u1ec7nh <em>from package import *<\/em>, l\u1eadp tr\u00ecnh vi\u00ean s\u1ebd \u0111\u1ecbnh ngh\u0129a danh s\u00e1ch <em>__all__<\/em> b\u00ean trong __init__.py.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Danh s\u00e1ch n\u00e0y ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u1ed9t b\u1ed9 l\u1ecdc (whitelist), ch\u1ec9 \u0111\u1ecbnh r\u00f5 r\u00e0ng nh\u1eefng module, h\u00e0m ho\u1eb7c l\u1edbp n\u00e0o \u0111\u01b0\u1ee3c ph\u00e9p xu\u1ea5t ra b\u00ean ngo\u00e0i (public interface). B\u1ea5t k\u1ef3 th\u00e0nh ph\u1ea7n n\u00e0o kh\u00f4ng n\u1eb1m trong danh s\u00e1ch <em>__all__<\/em> s\u1ebd \u0111\u01b0\u1ee3c coi l\u00e0 n\u1ed9i b\u1ed9 (private) v\u00e0 \u0111\u01b0\u1ee3c b\u1ea3o v\u1ec7 kh\u1ecfi vi\u1ec7c import h\u00e0ng lo\u1ea1t, gi\u00fap gi\u1eef cho kh\u00f4ng gian t\u00ean c\u1ee7a d\u1ef1 \u00e1n s\u1ea1ch s\u1ebd v\u00e0 tr\u00e1nh xung \u0111\u1ed9t.<\/p>\n\n\n\n<h3 id=\"__init__.py_trong_Python_3.3+_c\u00f3_c\u00f2n_c\u1ea7n_thi\u1ebft_kh\u00f4ng?\"><a id=\"post-120931-_pzpcq5n7ng8y\"><\/a><strong>__init__.py trong Python 3.3+ c\u00f3 c\u00f2n c\u1ea7n thi\u1ebft kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Kh\u00f4ng b\u1eaft bu\u1ed9c v\u1ec1 m\u1eb7t c\u00fa ph\u00e1p, nh\u01b0ng r\u1ea5t c\u1ea7n thi\u1ebft v\u1ec1 m\u1eb7t ki\u1ebfn tr\u00fac.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tr\u01b0\u1edbc phi\u00ean b\u1ea3n 3.3, Python bu\u1ed9c m\u1ecdi th\u01b0 m\u1ee5c ph\u1ea3i ch\u1ee9a __init__.py \u0111\u1ec3 \u0111\u01b0\u1ee3c coi l\u00e0 m\u1ed9t package. Tuy nhi\u00ean, s\u1ef1 ra \u0111\u1eddi c\u1ee7a <strong>PEP 420<\/strong> trong Python 3.3 \u0111\u00e3 gi\u1edbi thi\u1ec7u kh\u00e1i ni\u1ec7m <strong>Implicit Namespace Packages<\/strong>. Thay \u0111\u1ed5i n\u00e0y cho ph\u00e9p tr\u00ecnh th\u00f4ng d\u1ecbch Python import c\u00e1c th\u01b0 m\u1ee5c kh\u00f4ng ch\u1ee9a file __init__.py.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00f9 v\u1eady, vi\u1ec7c lo\u1ea1i b\u1ecf t\u1eadp tin n\u00e0y kh\u00f4ng ph\u1ea3i l\u00fac n\u00e0o c\u0169ng l\u00e0 \u00fd t\u01b0\u1edfng t\u1ed1t. C\u00e1c chuy\u00ean gia l\u1eadp tr\u00ecnh v\u1eabn khuy\u1ebfn ngh\u1ecb duy tr\u00ec __init__.py trong h\u1ea7u h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p v\u00ec:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>T\u01b0\u01a1ng th\u00edch ng\u01b0\u1ee3c:<\/strong> \u0110\u1ea3m b\u1ea3o m\u00e3 ngu\u1ed3n ho\u1ea1t \u0111\u1ed9ng t\u1ed1t tr\u00ean c\u00e1c c\u00f4ng c\u1ee5 c\u0169 ho\u1eb7c c\u00e1c phi\u00ean b\u1ea3n Python th\u1ea5p h\u01a1n n\u1ebfu c\u1ea7n.<\/li>\n\n\n\n<li><strong>\u0110\u1ecbnh danh r\u00f5 r\u00e0ng:<\/strong> Gi\u00fap c\u00e1c c\u00f4ng c\u1ee5 ph\u00e2n t\u00edch m\u00e3 (IDE, Linters) v\u00e0 l\u1eadp tr\u00ecnh vi\u00ean ph\u00e2n bi\u1ec7t ngay l\u1eadp t\u1ee9c \u0111\u00e2u l\u00e0 package m\u00e3 ngu\u1ed3n, \u0111\u00e2u l\u00e0 th\u01b0 m\u1ee5c ch\u1ee9a d\u1eef li\u1ec7u t\u0129nh.<\/li>\n\n\n\n<li><strong>Ch\u1ee9c n\u0103ng kh\u1edfi t\u1ea1o:<\/strong> Namespace Package (kh\u00f4ng c\u00f3 __init__.py) kh\u00f4ng th\u1ec3 ch\u1ea1y m\u00e3 kh\u1edfi t\u1ea1o khi import, l\u00e0m m\u1ea5t \u0111i kh\u1ea3 n\u0103ng thi\u1ebft l\u1eadp m\u00f4i tr\u01b0\u1eddng thi\u1ebft y\u1ebfu cho package.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"S\u1ef1_kh\u00e1c_bi\u1ec7t_gi\u1eefa_th\u01b0_m\u1ee5c_C\u00d3_v\u00e0_KH\u00d4NG_C\u00d3_file___init__.py\"><a id=\"post-120931-_5uqjpbdu7dne\"><\/a><strong>S\u1ef1 kh\u00e1c bi\u1ec7t gi\u1eefa th\u01b0 m\u1ee5c C\u00d3 v\u00e0 KH\u00d4NG C\u00d3 file __init__.py<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a t\u1eadp tin n\u00e0y t\u1ea1o ra hai lo\u1ea1i package v\u1edbi h\u00e0nh vi kh\u00e1c nhau ho\u00e0n to\u00e0n:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\u0110\u1eb7c \u0111i\u1ec3m<\/strong><\/td><td><strong>Regular Package (C\u00f3 <code>__init__.py<\/code>)<\/strong><\/td><td><strong>Namespace Package (Kh\u00f4ng c\u00f3 <code>__init__.py<\/code>)<\/strong><\/td><\/tr><tr><td><strong>Kh\u1edfi t\u1ea1o<\/strong><\/td><td>Th\u1ef1c thi m\u00e3 trong <code>__init__.py<\/code> ngay khi \u0111\u01b0\u1ee3c import.<\/td><td>Kh\u00f4ng th\u1ef1c thi b\u1ea5t k\u1ef3 m\u00e3 kh\u1edfi t\u1ea1o n\u00e0o.<\/td><\/tr><tr><td><strong>Thu\u1ed9c t\u00ednh <code>__file__<\/code><\/strong><\/td><td>C\u00f3 thu\u1ed9c t\u00ednh <code>__file__<\/code> tr\u1ecf \u0111\u1ebfn \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a file <code>__init__.py<\/code>.<\/td><td>Kh\u00f4ng c\u00f3 thu\u1ed9c t\u00ednh <code>__file__<\/code>.<\/td><\/tr><tr><td><strong>Ph\u1ea1m vi l\u01b0u tr\u1eef<\/strong><\/td><td>Th\u01b0\u1eddng n\u1eb1m tr\u1ecdn v\u1eb9n trong m\u1ed9t th\u01b0 m\u1ee5c duy nh\u1ea5t.<\/td><td>C\u00f3 th\u1ec3 n\u1eb1m r\u1ea3i r\u00e1c tr\u00ean nhi\u1ec1u th\u01b0 m\u1ee5c kh\u00e1c nhau trong <code>sys.path<\/code>.<\/td><\/tr><tr><td><strong>M\u1ee5c \u0111\u00edch s\u1eed d\u1ee5ng<\/strong><\/td><td>D\u00f9ng cho c\u00e1c module g\u1eafn k\u1ebft ch\u1eb7t ch\u1ebd, c\u1ea7n c\u1ea5u h\u00ecnh chung.<\/td><td>D\u00f9ng khi mu\u1ed1n chia nh\u1ecf m\u1ed9t package l\u1edbn th\u00e0nh nhi\u1ec1u ph\u1ea7n ph\u00e2n t\u00e1n.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 id=\"C\u00e1c_c\u00e1ch_s\u1eed_d\u1ee5ng_file___init__.py_trong_th\u1ef1c_t\u1ebf\"><a id=\"post-120931-_wjoe4z7aeiyw\"><\/a>C\u00e1c c\u00e1ch s\u1eed d\u1ee5ng file __init__.py trong th\u1ef1c t\u1ebf<\/h2>\n\n\n\n<h3 id=\"Ki\u1ebfn_tr\u00fac_&#8220;Facade&#8221;:_\u0110\u01a1n_gi\u1ea3n_h\u00f3a_Interface_cho_ng\u01b0\u1eddi_d\u00f9ng\"><a id=\"post-120931-_8it3dia1q7mw\"><\/a><strong>Ki\u1ebfn tr\u00fac &#8220;Facade&#8221;: \u0110\u01a1n gi\u1ea3n h\u00f3a Interface cho ng\u01b0\u1eddi d\u00f9ng<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u00e2y l\u00e0 \u1ee9ng d\u1ee5ng ph\u1ed5 bi\u1ebfn nh\u1ea5t nh\u1eb1m t\u1ed1i \u01b0u h\u00f3a tr\u1ea3i nghi\u1ec7m c\u1ee7a l\u1eadp tr\u00ecnh vi\u00ean khi s\u1eed d\u1ee5ng th\u01b0 vi\u1ec7. Th\u00f4ng th\u01b0\u1eddng, c\u1ea5u tr\u00fac th\u01b0 m\u1ee5c c\u1ee7a m\u1ed9t d\u1ef1 \u00e1n c\u00f3 th\u1ec3 ph\u00e2n chia r\u1ea5t s\u00e2u \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh t\u1ed5 ch\u1ee9c, v\u00ed d\u1ee5: <em>backend\/database\/connectors\/mysql.py<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N\u1ebfu kh\u00f4ng c\u1ea5u h\u00ecnh __init__.py, ng\u01b0\u1eddi s\u1eed d\u1ee5ng bu\u1ed9c ph\u1ea3i vi\u1ebft nh\u1eefng c\u00e2u l\u1ec7nh import d\u00e0i d\u00f2ng v\u00e0 \u0111\u1ec3 l\u1ed9 chi ti\u1ebft c\u1ea5u tr\u00fac n\u1ed9i b\u1ed9. \u0110\u1ec3 kh\u1eafc ph\u1ee5c, l\u1eadp tr\u00ecnh vi\u00ean s\u1ebd import c\u00e1c l\u1edbp (Class) ho\u1eb7c h\u00e0m quan tr\u1ecdng v\u00e0o file __init__.py \u1edf c\u1ea5p cao nh\u1ea5t. H\u00e0nh \u0111\u1ed9ng n\u00e0y gi\u00fap &#8220;l\u00e0m ph\u1eb3ng&#8221; g\u00f3i ph\u1ea7n m\u1ec1m, cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng truy c\u1eadp ch\u1ee9c n\u0103ng ch\u1ec9 v\u1edbi m\u1ed9t c\u00e2u l\u1ec7nh ng\u1eafn g\u1ecdn, v\u00ed d\u1ee5: <em>from<\/em> <em>backend import MySQLConnector<\/em>.<\/p>\n\n\n\n<h3 id=\"Thi\u1ebft_l\u1eadp_&#8220;Single_Source_of_Truth&#8221;_(Ngu\u1ed3n_ch\u00e2n_l\u00fd_duy_nh\u1ea5t)\"><a id=\"post-120931-_ktzajmo500n7\"><\/a><strong>Thi\u1ebft l\u1eadp &#8220;Single Source of Truth&#8221; (Ngu\u1ed3n ch\u00e2n l\u00fd duy nh\u1ea5t)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">__init__.py l\u00e0 v\u1ecb tr\u00ed l\u00fd t\u01b0\u1edfng \u0111\u1ec3 \u0111\u1ecbnh ngh\u0129a c\u00e1c th\u00f4ng tin si\u00eau d\u1eef li\u1ec7u (metadata) ho\u1eb7c c\u1ea5u h\u00ecnh d\u00f9ng chung cho to\u00e0n b\u1ed9 package. Thay v\u00ec khai b\u00e1o ph\u00e2n t\u00e1n \u1edf nhi\u1ec1u n\u01a1i, l\u1eadp tr\u00ecnh vi\u00ean th\u01b0\u1eddng \u0111\u1eb7t c\u00e1c bi\u1ebfn nh\u01b0 <em>__version__<\/em>, <em>__author__<\/em>, ho\u1eb7c c\u1ea5u h\u00ecnh <em>logging<\/em> m\u1eb7c \u0111\u1ecbnh ngay t\u1ea1i t\u1eadp tin kh\u1edfi t\u1ea1o n\u00e0y.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00e1ch ti\u1ebfp c\u1eadn n\u00e0y \u0111\u1ea3m b\u1ea3o t\u00ednh nh\u1ea5t qu\u00e1n d\u1eef li\u1ec7u tr\u00ean to\u00e0n h\u1ec7 th\u1ed1ng. Khi c\u1ea7n ki\u1ec3m tra phi\u00ean b\u1ea3n c\u1ee7a th\u01b0 vi\u1ec7n ho\u1eb7c thay \u0111\u1ed5i c\u1ea5u h\u00ecnh chung, ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb d\u1ef1 \u00e1n ch\u1ec9 c\u1ea7n ch\u1ec9nh s\u1eeda t\u1ea1i m\u1ed9t n\u01a1i duy nh\u1ea5t, gi\u1ea3m thi\u1ec3u r\u1ee7i ro sai s\u00f3t v\u00e0 xung \u0111\u1ed9t th\u00f4ng tin.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-4.png\" alt=\"C\u00e1c c\u00e1ch s\u1eed d\u1ee5ng file __init__.py trong th\u1ef1c t\u1ebf\" class=\"wp-image-120938\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-4.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-4-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>C\u00e1c c\u00e1ch s\u1eed d\u1ee5ng file __init__.py trong th\u1ef1c t\u1ebf<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"Ki\u1ec3m_so\u00e1t_ph\u1ea1m_vi_truy_c\u1eadp_v\u1edbi_danh_s\u00e1ch___all__\"><a id=\"post-120931-_6zzrnsciyol2\"><\/a><strong>Ki\u1ec3m so\u00e1t ph\u1ea1m vi truy c\u1eadp v\u1edbi danh s\u00e1ch __all__<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Trong c\u00e1c d\u1ef1 \u00e1n l\u1edbn, vi\u1ec7c ki\u1ec3m so\u00e1t nh\u1eefng th\u00e0nh ph\u1ea7n n\u00e0o \u0111\u01b0\u1ee3c ph\u00e9p &#8220;xu\u1ea5t kh\u1ea9u&#8221; ra b\u00ean ngo\u00e0i l\u00e0 c\u1ef1c k\u1ef3 quan tr\u1ecdng \u0111\u1ec3 b\u1ea3o v\u1ec7 t\u00ednh \u0111\u00f3ng g\u00f3i (Encapsulation). Python cung c\u1ea5p bi\u1ebfn \u0111\u1eb7c bi\u1ec7t <em>__all__<\/em> \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">B\u1eb1ng c\u00e1ch khai b\u00e1o m\u1ed9t danh s\u00e1ch c\u00e1c chu\u1ed7i t\u00ean module ho\u1eb7c h\u00e0m trong __init__.py (v\u00ed d\u1ee5: __all__ = [&#8220;User&#8221;, &#8220;Auth&#8221;]), t\u00e1c gi\u1ea3 package thi\u1ebft l\u1eadp m\u1ed9t b\u1ed9 l\u1ecdc r\u00f5 r\u00e0ng. Khi ng\u01b0\u1eddi d\u00f9ng th\u1ef1c hi\u1ec7n l\u1ec7nh <em>from package import *<\/em>, tr\u00ecnh th\u00f4ng d\u1ecbch s\u1ebd ch\u1ec9 t\u1ea3i nh\u1eefng th\u00e0nh ph\u1ea7n \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea trong danh s\u00e1ch __all__. C\u00e1c module h\u1ed7 tr\u1ee3 n\u1ed9i b\u1ed9 (internal helpers) kh\u00f4ng c\u00f3 t\u00ean trong danh s\u00e1ch n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c gi\u1eef k\u00edn, gi\u00fap kh\u00f4ng gian t\u00ean c\u1ee7a ng\u01b0\u1eddi s\u1eed d\u1ee5ng kh\u00f4ng b\u1ecb \u201cr\u1ed1i lo\u1ea1n\u201d b\u1edfi c\u00e1c bi\u1ebfn ho\u1eb7c h\u00e0m kh\u00f4ng c\u1ea7n thi\u1ebft.<\/p>\n\n\n\n<h2 id=\"Khi_n\u00e0o_n\u00ean_th\u00eam_file___init__.py_v\u00e0o_d\u1ef1_\u00e1n_Python?\"><a id=\"post-120931-_ebhf7syafqq3\"><\/a>Khi n\u00e0o n\u00ean th\u00eam file __init__.py v\u00e0o d\u1ef1 \u00e1n Python?<\/h2>\n\n\n\n<h3 id=\"Khi_c\u1ea7n_ki\u1ebfn_t\u1ea1o_m\u1ed9t_API_g\u1ecdn_g\u00e0ng\"><a id=\"post-120931-_9zb7w4nwqh3f\"><\/a><strong>Khi c\u1ea7n ki\u1ebfn t\u1ea1o m\u1ed9t API g\u1ecdn g\u00e0ng<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u1ebfu m\u1ee5c ti\u00eau l\u00e0 cung c\u1ea5p tr\u1ea3i nghi\u1ec7m import \u0111\u01a1n gi\u1ea3n cho ng\u01b0\u1eddi s\u1eed d\u1ee5ng th\u01b0 vi\u1ec7n, s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a __init__.py l\u00e0 b\u1eaft bu\u1ed9c. Thay v\u00ec \u0111\u1ec3 ng\u01b0\u1eddi d\u00f9ng ph\u1ea3i ghi nh\u1edb v\u00e0 import t\u1eeb c\u00e1c file n\u1eb1m s\u00e2u trong c\u00e2y th\u01b0 m\u1ee5c (v\u00ed d\u1ee5: <em>from package.sub.module import ClassA<\/em>), t\u1eadp tin kh\u1edfi t\u1ea1o cho ph\u00e9p gom nh\u00f3m c\u00e1c ch\u1ee9c n\u0103ng quan tr\u1ecdng l\u00ean c\u1ea5p cao nh\u1ea5t. K\u1ef9 thu\u1eadt n\u00e0y gi\u00fap ng\u01b0\u1eddi d\u00f9ng ch\u1ec9 c\u1ea7n g\u1ecdi <em>from package import ClassA<\/em> m\u00e0 kh\u00f4ng c\u1ea7n quan t\u00e2m \u0111\u1ebfn c\u00e1ch t\u1ed5 ch\u1ee9c file v\u1eadt l\u00fd b\u00ean d\u01b0\u1edbi.<\/p>\n\n\n\n<h3 id=\"Khi_b\u1eaft_bu\u1ed9c_ph\u1ea3i_s\u1eed_d\u1ee5ng_Import_t\u01b0\u01a1ng_\u0111\u1ed1i\"><a id=\"post-120931-_2ba057vnd5g7\"><\/a><strong>Khi b\u1eaft bu\u1ed9c ph\u1ea3i s\u1eed d\u1ee5ng Import t\u01b0\u01a1ng \u0111\u1ed1i<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Trong c\u00e1c d\u1ef1 \u00e1n c\u00f3 c\u1ea5u tr\u00fac module ph\u1ee9c t\u1ea1p, vi\u1ec7c c\u00e1c file n\u1ed9i b\u1ed9 g\u1ecdi l\u1eabn nhau b\u1eb1ng c\u00fa ph\u00e1p &#8220;d\u1ea5u ch\u1ea5m&#8221; (v\u00ed d\u1ee5: <em>from . import datab<\/em>ase ho\u1eb7c <em>from ..utils import helper<\/em>) l\u00e0 r\u1ea5t ph\u1ed5 bi\u1ebfn. \u0110\u1ec3 c\u01a1 ch\u1ebf Import t\u01b0\u01a1ng \u0111\u1ed1i n\u00e0y ho\u1ea1t \u0111\u1ed9ng ch\u00ednh x\u00e1c v\u00e0 tr\u00e1nh l\u1ed7i <em>ImportError: attempted relative import with no known parent package<\/em>, th\u01b0 m\u1ee5c ch\u1ee9a m\u00e3 ngu\u1ed3n ph\u1ea3i \u0111\u01b0\u1ee3c Python c\u00f4ng nh\u1eadn l\u00e0 m\u1ed9t Regular Package th\u00f4ng qua vi\u1ec7c ch\u1ee9a file __init__.py.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-5.png\" alt=\"Khi n\u00e0o n\u00ean th\u00eam file __init__.py v\u00e0o d\u1ef1 \u00e1n Python?\" class=\"wp-image-120939\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-5.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-5-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>Khi n\u00e0o n\u00ean th\u00eam file __init__.py v\u00e0o d\u1ef1 \u00e1n Python?<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"Khi_c\u1ea7n_th\u1ef1c_thi_logic_kh\u1edfi_t\u1ea1o\"><a id=\"post-120931-_3d8yek8eopjj\"><\/a><strong>Khi c\u1ea7n th\u1ef1c thi logic kh\u1edfi t\u1ea1o<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u1ebfu module y\u00eau c\u1ea7u thi\u1ebft l\u1eadp m\u00f4i tr\u01b0\u1eddng tr\u01b0\u1edbc khi ho\u1ea1t \u0111\u1ed9ng\u2014ch\u1eb3ng h\u1ea1n nh\u01b0 t\u1ea3i c\u1ea5u h\u00ecnh t\u1eeb bi\u1ebfn m\u00f4i tr\u01b0\u1eddng, m\u1edf k\u1ebft n\u1ed1i \u0111\u1ebfn c\u01a1 s\u1edf d\u1eef li\u1ec7u, ho\u1eb7c \u0111\u0103ng k\u00fd c\u00e1c handler cho logging\u2014l\u1eadp tr\u00ecnh vi\u00ean c\u1ea7n m\u1ed9t n\u01a1i \u0111\u1ec3 th\u1ef1c thi m\u00e3 l\u1ec7nh n\u00e0y ngay th\u1eddi \u0111i\u1ec3m import. __init__.py ch\u00ednh l\u00e0 v\u1ecb tr\u00ed duy nh\u1ea5t \u0111\u1ea3m nh\u1eadn vai tr\u00f2 n\u00e0y, \u0111\u1ea3m b\u1ea3o m\u1ecdi \u0111i\u1ec1u ki\u1ec7n ti\u00ean quy\u1ebft \u0111\u1ec1u \u0111\u01b0\u1ee3c th\u1ecfa m\u00e3n tr\u01b0\u1edbc khi ng\u01b0\u1eddi d\u00f9ng truy c\u1eadp v\u00e0o c\u00e1c ch\u1ee9c n\u0103ng kh\u00e1c.<\/p>\n\n\n\n<h3 id=\"Khi_x\u00e2y_d\u1ef1ng_th\u01b0_vi\u1ec7n_\u0111\u1ec3_\u0111\u00f3ng_g\u00f3i_v\u00e0_ph\u00e2n_ph\u1ed1i_(Packaging_&amp;_Distribution)\"><a id=\"post-120931-_tc24vrbdy0j5\"><\/a><strong>Khi x\u00e2y d\u1ef1ng th\u01b0 vi\u1ec7n \u0111\u1ec3 \u0111\u00f3ng g\u00f3i v\u00e0 ph\u00e2n ph\u1ed1i (Packaging &amp; Distribution)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1ed1i v\u1edbi c\u00e1c d\u1ef1 \u00e1n d\u1ef1 \u0111\u1ecbnh ph\u00e1t h\u00e0nh l\u00ean PyPI ho\u1eb7c \u0111\u00f3ng g\u00f3i th\u00e0nh file .whl (Wheel), vi\u1ec7c s\u1eed d\u1ee5ng Regular Package (c\u00f3 __init__.py) gi\u00fap \u0111\u1ea3m b\u1ea3o t\u00ednh t\u01b0\u01a1ng th\u00edch t\u1ed1i \u0111a v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 nh\u01b0 <em>setuptools<\/em> v\u00e0 <em>pip<\/em>. S\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a file n\u00e0y gi\u00fap c\u00e1c c\u00f4ng c\u1ee5 \u0111\u00f3ng g\u00f3i t\u1ef1 \u0111\u1ed9ng ph\u00e1t hi\u1ec7n v\u00e0 bao g\u1ed3m to\u00e0n b\u1ed9 m\u00e3 ngu\u1ed3n v\u00e0o b\u1ea3n build cu\u1ed1i c\u00f9ng m\u1ed9t c\u00e1ch ch\u00ednh x\u00e1c nh\u1ea5t, tr\u00e1nh t\u00ecnh tr\u1ea1ng thi\u1ebfu s\u00f3t module khi c\u00e0i \u0111\u1eb7t tr\u00ean m\u00e1y ng\u01b0\u1eddi d\u00f9ng.<\/p>\n\n\n\n<h3 id=\"Khi_c\u1ea7n_h\u1ed7_tr\u1ee3_t\u1ed1i_\u0111a_cho_IDE_v\u00e0_C\u00f4ng_c\u1ee5_ph\u00e2n_t\u00edch_m\u00e3\"><a id=\"post-120931-_1y1u1berjlx8\"><\/a><strong>Khi c\u1ea7n h\u1ed7 tr\u1ee3 t\u1ed1i \u0111a cho IDE v\u00e0 C\u00f4ng c\u1ee5 ph\u00e2n t\u00edch m\u00e3<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00e1c IDE nh\u01b0 <a href=\"https:\/\/www.jetbrains.com\/pycharm\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/pycharm\/\" rel=\"noreferrer noopener nofollow\">PyCharm<\/a> ho\u1eb7c <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/code.visualstudio.com\/\" rel=\"noreferrer noopener nofollow\">VS Code<\/a>, c\u00f9ng c\u00e1c c\u00f4ng c\u1ee5 nh\u01b0 <a href=\"https:\/\/mypy-lang.org\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/mypy-lang.org\/\" rel=\"noreferrer noopener nofollow\">MyPy<\/a> hay <a href=\"https:\/\/www.pylint.org\/\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/www.pylint.org\/\" rel=\"noreferrer noopener nofollow\">Pylint<\/a>, ho\u1ea1t \u0111\u1ed9ng hi\u1ec7u qu\u1ea3 h\u01a1n nhi\u1ec1u khi d\u1ef1 \u00e1n tu\u00e2n th\u1ee7 c\u1ea5u tr\u00fac Regular Package. Vi\u1ec7c c\u00f3 __init__.py gi\u00fap c\u00e1c c\u00f4ng c\u1ee5 n\u00e0y x\u00e2y d\u1ef1ng c\u00e2y ch\u1ec9 m\u1ee5c (index tree) ch\u00ednh x\u00e1c, t\u1eeb \u0111\u00f3 cung c\u1ea5p t\u00ednh n\u0103ng g\u1ee3i \u00fd m\u00e3 (Intellisense) v\u00e0 ph\u00e1t hi\u1ec7n l\u1ed7i t\u0129nh nhanh ch\u00f3ng h\u01a1n so v\u1edbi c\u00e1c Namespace Package.<\/p>\n\n\n\n<h2 id=\"M\u1ed9t_s\u1ed1_l\u1ed7i_th\u01b0\u1eddng_g\u1eb7p_khi_l\u00e0m_vi\u1ec7c_v\u1edbi___init__.py_v\u00e0_c\u00e1ch_x\u1eed_l\u00fd\"><a id=\"post-120931-_q2h1au6rikrx\"><\/a><strong>M\u1ed9t s\u1ed1 l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi l\u00e0m vi\u1ec7c v\u1edbi __init__.py v\u00e0 c\u00e1ch x\u1eed l\u00fd<\/strong><\/h2>\n\n\n\n<h3 id=\"L\u1ed7i_Circular_Imports_(Import_v\u00f2ng_tr\u00f2n)\"><a id=\"post-120931-_e4fc1p7y8e3l\"><\/a><strong>L\u1ed7i Circular Imports (Import v\u00f2ng tr\u00f2n)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u00e2y l\u00e0 v\u1ea5n \u0111\u1ec1 kinh \u0111i\u1ec3n nh\u1ea5t v\u00e0 c\u0169ng g\u00e2y b\u1ed1i r\u1ed1i nh\u1ea5t cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">M\u00f4 t\u1ea3:<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Module A import Module B. Tuy nhi\u00ean, Module B l\u1ea1i c\u1ea7n import m\u1ed9t th\u00e0nh ph\u1ea7n t\u1eeb Module A (th\u01b0\u1eddng th\u00f4ng qua __init__.py \u0111\u1ec3 l\u1ea5y c\u00e1c bi\u1ebfn chung). K\u1ebft qu\u1ea3 l\u00e0 tr\u00ecnh th\u00f4ng d\u1ecbch Python r\u01a1i v\u00e0o v\u00f2ng l\u1eb7p v\u00f4 h\u1ea1n v\u00e0 kh\u00f4ng th\u1ec3 x\u00e1c \u0111\u1ecbnh module n\u00e0o c\u1ea7n \u0111\u01b0\u1ee3c t\u1ea3i tr\u01b0\u1edbc, d\u1eabn \u0111\u1ebfn l\u1ed7i <em>ImportError<\/em> ho\u1eb7c <em>AttributeError<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Gi\u1ea3i ph\u00e1p x\u1eed l\u00fd:<\/span><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Chi\u1ebfn l\u01b0\u1ee3c 1 (Import c\u1ee5c b\u1ed9):<\/strong> Chuy\u1ec3n c\u00e2u l\u1ec7nh import v\u00e0o b\u00ean trong th\u00e2n h\u00e0m ho\u1eb7c ph\u01b0\u01a1ng th\u1ee9c thay v\u00ec \u0111\u1ec3 \u1edf \u0111\u1ea7u file (top-level). H\u00e0nh \u0111\u1ed9ng n\u00e0y tr\u00ec ho\u00e3n vi\u1ec7c import cho \u0111\u1ebfn khi h\u00e0m th\u1ef1c s\u1ef1 \u0111\u01b0\u1ee3c g\u1ecdi.<\/li>\n\n\n\n<li><strong>Chi\u1ebfn l\u01b0\u1ee3c 2 (T\u00e1i c\u1ea5u tr\u00fac):<\/strong> T\u00e1ch c\u00e1c th\u00e0nh ph\u1ea7n ph\u1ee5 thu\u1ed9c chung ra m\u1ed9t module th\u1ee9 ba \u0111\u1ed9c l\u1eadp (v\u00ed d\u1ee5: <em>common.py<\/em> ho\u1eb7c <em>base.py<\/em>) v\u00e0 \u0111\u1ec3 c\u1ea3 Module A v\u00e0 Module B c\u00f9ng import t\u1eeb module trung gian n\u00e0y.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"L\u1ed7i_vi\u1ebft_qu\u00e1_nhi\u1ec1u_Logic\"><a id=\"post-120931-_sl5xb5v3oubv\"><\/a><strong>L\u1ed7i vi\u1ebft qu\u00e1 nhi\u1ec1u Logic<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">M\u1ed9t sai l\u1ea7m ph\u1ed5 bi\u1ebfn v\u1ec1 hi\u1ec7u n\u0103ng l\u00e0 bi\u1ebfn __init__.py th\u00e0nh n\u01a1i ch\u1ee9a qu\u00e1 nhi\u1ec1u m\u00e3 x\u1eed l\u00fd.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">M\u00f4 t\u1ea3:<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u1eadp tr\u00ecnh vi\u00ean \u0111\u1eb7t c\u00e1c t\u00e1c v\u1ee5 n\u1eb7ng nh\u01b0 k\u1ebft n\u1ed1i c\u01a1 s\u1edf d\u1eef li\u1ec7u, t\u1ea3i m\u00f4 h\u00ecnh AI, ho\u1eb7c \u0111\u1ecdc file c\u1ea5u h\u00ecnh l\u1edbn ngay trong t\u1eadp tin n\u00e0y. H\u1ec7 qu\u1ea3 l\u00e0 b\u1ea5t c\u1ee9 khi n\u00e0o ng\u01b0\u1eddi d\u00f9ng import package (d\u00f9 ch\u1ec9 c\u1ea7n m\u1ed9t h\u00e0m nh\u1ecf), to\u00e0n b\u1ed9 m\u00e3 kh\u1edfi t\u1ea1o n\u1eb7ng n\u1ec1 kia \u0111\u1ec1u b\u1ecb th\u1ef1c thi, l\u00e0m ch\u1eadm \u0111\u00e1ng k\u1ec3 th\u1eddi gian kh\u1edfi \u0111\u1ed9ng \u1ee9ng d\u1ee5ng.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Gi\u1ea3i ph\u00e1p x\u1eed l\u00fd:<\/span><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00c1p d\u1ee5ng k\u1ef9 thu\u1eadt <strong>Lazy Loading<\/strong> (T\u1ea3i l\u01b0\u1eddi). Ch\u1ec9 th\u1ef1c hi\u1ec7n import ho\u1eb7c kh\u1edfi t\u1ea1o c\u00e1c th\u00e0nh ph\u1ea7n n\u1eb7ng khi ng\u01b0\u1eddi d\u00f9ng g\u1ecdi \u0111\u1ebfn h\u00e0m c\u1ee5 th\u1ec3.<\/li>\n\n\n\n<li>Gi\u1eef cho __init__.py th\u1eadt nh\u1eb9 nh\u00e0ng, ch\u1ec9 n\u00ean ch\u1ee9a c\u00e1c l\u1ec7nh import \u0111\u1ec3 l\u00e0m ph\u1eb3ng namespace ho\u1eb7c thi\u1ebft l\u1eadp c\u00e1c bi\u1ebfn metadata \u0111\u01a1n gi\u1ea3n.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"700\" height=\"375\" src=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-6.png\" alt=\"M\u1ed9t s\u1ed1 l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi l\u00e0m vi\u1ec7c v\u1edbi __init__.py v\u00e0 c\u00e1ch x\u1eed l\u00fd\" class=\"wp-image-120940\" title=\"\" srcset=\"https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-6.png 700w, https:\/\/tino.vn\/blog\/wp-content\/uploads\/2025\/11\/file-init-py-trong-python-6-300x161.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><figcaption class=\"wp-element-caption\"><strong>M\u1ed9t s\u1ed1 l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi l\u00e0m vi\u1ec7c v\u1edbi __init__.py v\u00e0 c\u00e1ch x\u1eed l\u00fd<\/strong><\/figcaption><\/figure>\n<\/div>\n\n\n<h3 id=\"L\u1ed7i_xung_\u0111\u1ed9t_t\u00ean_v\u1edbi_th\u01b0_vi\u1ec7n_chu\u1ea9n\"><a id=\"post-120931-_gjugl5hips14\"><\/a><strong>L\u1ed7i xung \u0111\u1ed9t t\u00ean v\u1edbi th\u01b0 vi\u1ec7n chu\u1ea9n<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">L\u1ed7i n\u00e0y th\u01b0\u1eddng x\u1ea3y ra do s\u1ef1 b\u1ea5t c\u1ea9n trong vi\u1ec7c \u0111\u1eb7t t\u00ean th\u01b0 m\u1ee5c ch\u1ee9a __init__.py.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">M\u00f4 t\u1ea3:<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u0110\u1eb7t t\u00ean package tr\u00f9ng v\u1edbi c\u00e1c module c\u00f3 s\u1eb5n c\u1ee7a Python (v\u00ed d\u1ee5: email, json, logging, code). Khi ch\u01b0\u01a1ng tr\u00ecnh ch\u1ea1y, tr\u00ecnh th\u00f4ng d\u1ecbch s\u1ebd \u01b0u ti\u00ean t\u00ecm ki\u1ebfm trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n tr\u01b0\u1edbc. Do \u0111\u00f3, thay v\u00ec import th\u01b0 vi\u1ec7n chu\u1ea9n, Python l\u1ea1i import nh\u1ea7m package c\u1ee7a ng\u01b0\u1eddi d\u00f9ng, g\u00e2y ra h\u00e0ng lo\u1ea1t l\u1ed7i kh\u00f4ng t\u01b0\u01a1ng th\u00edch ph\u01b0\u01a1ng th\u1ee9c.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Gi\u1ea3i ph\u00e1p x\u1eed l\u00fd:<\/span><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lu\u00f4n ki\u1ec3m tra danh s\u00e1ch module chu\u1ea9n c\u1ee7a Python tr\u01b0\u1edbc khi \u0111\u1eb7t t\u00ean cho package m\u1edbi.<\/li>\n\n\n\n<li>N\u1ebfu bu\u1ed9c ph\u1ea3i d\u00f9ng t\u00ean tr\u00f9ng (r\u1ea5t kh\u00f4ng khuy\u1ebfn kh\u00edch), h\u00e3y s\u1eed d\u1ee5ng import tuy\u1ec7t \u0111\u1ed1i (absolute import) \u0111\u1ec3 ch\u1ec9 \u0111\u1ecbnh r\u00f5 ngu\u1ed3n g\u1ed1c th\u01b0 vi\u1ec7n.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"L\u1ed7i_Import_t\u01b0\u01a1ng_\u0111\u1ed1i_khi_ch\u1ea1y_Script_tr\u1ef1c_ti\u1ebfp\"><a id=\"post-120931-_5c5v1tju0hgl\"><\/a><strong>L\u1ed7i Import t\u01b0\u01a1ng \u0111\u1ed1i khi ch\u1ea1y Script tr\u1ef1c ti\u1ebfp<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">V\u1ea5n \u0111\u1ec1 n\u00e0y li\u00ean quan \u0111\u1ebfn c\u00e1ch Python x\u00e1c \u0111\u1ecbnh ng\u1eef c\u1ea3nh c\u1ee7a package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">M\u00f4 t\u1ea3:<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trong file <em>package\/module.py<\/em> c\u00f3 d\u00f2ng l\u1ec7nh <em>from . import utility<\/em>. N\u1ebfu l\u1eadp tr\u00ecnh vi\u00ean c\u1ed1 g\u1eafng ch\u1ea1y file n\u00e0y tr\u1ef1c ti\u1ebfp b\u1eb1ng l\u1ec7nh python <em>package\/module.py<\/em>, h\u1ec7 th\u1ed1ng s\u1ebd b\u00e1o l\u1ed7i <em>ImportError: attempted relative import with no known parent package<\/em>. Nguy\u00ean nh\u00e2n l\u00e0 khi ch\u1ea1y tr\u1ef1c ti\u1ebfp, Python coi file \u0111\u00f3 l\u00e0 script \u0111\u1ed9c l\u1eadp (<em>__main__<\/em>) ch\u1ee9 kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ph\u1ea7n c\u1ee7a package.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span style=\"text-decoration: underline;\">Gi\u1ea3i ph\u00e1p x\u1eed l\u00fd:<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lu\u00f4n ch\u1ea1y script t\u1eeb th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n b\u1eb1ng c\u1edd <em>-m<\/em> (module): <em>python -m package.module<\/em>. C\u00e1ch n\u00e0y gi\u00fap Python nh\u1eadn di\u1ec7n \u0111\u1ea7y \u0111\u1ee7 c\u1ea5u tr\u00fac package v\u00e0 x\u1eed l\u00fd ch\u00ednh x\u00e1c c\u00e1c import t\u01b0\u01a1ng \u0111\u1ed1i trong __init__.py c\u0169ng nh\u01b0 c\u00e1c module con.<\/p>\n\n\n\n<h3 id=\"K\u1ebft_lu\u1eadn\"><a id=\"post-120931-_nmb2ralje77s\"><\/a><strong>K\u1ebft lu\u1eadn<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">T\u00f3m l\u1ea1i, __init__.py \u0111\u00f3ng vai tr\u00f2 kh\u00f4ng th\u1ec3 thi\u1ebfu trong vi\u1ec7c ki\u1ebfn t\u1ea1o n\u00ean c\u1ea5u tr\u00fac module m\u1ea1ch l\u1ea1c v\u00e0 chuy\u00ean nghi\u1ec7p cho c\u00e1c d\u1ef1 \u00e1n Python. M\u1eb7c d\u00f9 c\u00e1c phi\u00ean b\u1ea3n Python m\u1edbi \u0111\u00e3 n\u1edbi l\u1ecfng quy \u0111\u1ecbnh v\u1ec1 s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a t\u1eadp tin n\u00e0y \u0111\u1ec3 t\u1ea1o Namespace Package, nh\u01b0ng vi\u1ec7c s\u1eed d\u1ee5ng __init__.py m\u1ed9t c\u00e1ch ch\u1ee7 \u0111\u1ed9ng v\u1eabn l\u00e0 ph\u01b0\u01a1ng ph\u00e1p t\u1ed1t nh\u1ea5t \u0111\u1ec3 kh\u1edfi t\u1ea1o package, qu\u1ea3n l\u00fd API public v\u00e0 tr\u00e1nh c\u00e1c xung \u0111\u1ed9t kh\u00f4ng \u0111\u00e1ng c\u00f3.<\/p>\n\n\n\n<h2 id=\"Nh\u1eefng_c\u00e2u_h\u1ecfi_th\u01b0\u1eddng_g\u1eb7p\"><a id=\"post-120931-_t6rnrk61861w\"><\/a>Nh\u1eefng c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p<\/h2>\n\n\n\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"C\u00f3_b\u1eaft_bu\u1ed9c_ph\u1ea3i_vi\u1ebft_code_v\u00e0o_b\u00ean_trong_file___init__.py_kh\u00f4ng?\">C\u00f3 b\u1eaft bu\u1ed9c ph\u1ea3i vi\u1ebft code v\u00e0o b\u00ean trong file __init__.py kh\u00f4ng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p class=\"wp-block-paragraph\">Ho\u00e0n to\u00e0n kh\u00f4ng. M\u1ed9t t\u1eadp tin __init__.py ho\u00e0n to\u00e0n r\u1ed7ng v\u1eabn h\u1ee3p l\u1ec7 v\u00e0 \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n \u0111\u1ec3 \u0111\u00e1nh d\u1ea5u th\u01b0 m\u1ee5c ch\u1ee9a t\u1eadp tin n\u00e0y l\u00e0 m\u1ed9t Python Package. Vi\u1ec7c \u0111\u1ec3 tr\u1ed1ng th\u01b0\u1eddng \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng khi l\u1eadp tr\u00ecnh vi\u00ean ch\u1ec9 mu\u1ed1n \u0111\u1ecbnh danh package m\u00e0 kh\u00f4ng c\u1ea7n th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 logic kh\u1edfi t\u1ea1o hay thi\u1ebft l\u1eadp bi\u1ebfn to\u00e0n c\u1ee5c n\u00e0o.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"T\u1ea1i_sao_code_v\u1eabn_ch\u1ea1y_b\u00ecnh_th\u01b0\u1eddng_sau_khi_t\u00f4i_x\u00f3a_file___init__.py?\">T\u1ea1i sao code v\u1eabn ch\u1ea1y b\u00ecnh th\u01b0\u1eddng sau khi t\u00f4i x\u00f3a file __init__.py?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p class=\"wp-block-paragraph\">K\u1ec3 t\u1eeb phi\u00ean b\u1ea3n Python 3.3, ng\u00f4n ng\u1eef n\u00e0y \u0111\u00e3 gi\u1edbi thi\u1ec7u kh\u00e1i ni\u1ec7m &#8220;Implicit Namespace Packages&#8221;, cho ph\u00e9p t\u1ea1o package m\u00e0 kh\u00f4ng c\u1ea7n t\u1eadp tin __init__.py. Do \u0111\u00f3, m\u00e3 ngu\u1ed3n v\u1eabn c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng. Tuy nhi\u00ean, c\u00e1c chuy\u00ean gia v\u1eabn khuy\u1ebfn ngh\u1ecb gi\u1eef l\u1ea1i t\u1eadp tin n\u00e0y \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh t\u01b0\u01a1ng th\u00edch ng\u01b0\u1ee3c, h\u1ed7 tr\u1ee3 c\u00f4ng c\u1ee5 testing v\u00e0 x\u00e1c \u0111\u1ecbnh r\u00f5 r\u00e0ng ranh gi\u1edbi c\u1ee7a package.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"Bi\u1ebfn___all___trong___init__.py_c\u00f3_t\u00e1c_d\u1ee5ng_c\u1ee5_th\u1ec3_l\u00e0_g\u00ec?_\">Bi\u1ebfn __all__ trong __init__.py c\u00f3 t\u00e1c d\u1ee5ng c\u1ee5 th\u1ec3 l\u00e0 g\u00ec? <\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p class=\"wp-block-paragraph\">Bi\u1ebfn __all__ l\u00e0 m\u1ed9t danh s\u00e1ch (list) ch\u1ee9a t\u00ean c\u00e1c module, h\u00e0m ho\u1eb7c l\u1edbp d\u1ea1ng chu\u1ed7i. Danh s\u00e1ch n\u00e0y quy \u0111\u1ecbnh ch\u00ednh x\u00e1c nh\u1eefng th\u00e0nh ph\u1ea7n n\u00e0o s\u1ebd \u0111\u01b0\u1ee3c xu\u1ea5t ra khi ng\u01b0\u1eddi d\u00f9ng s\u1eed d\u1ee5ng l\u1ec7nh from package import *. C\u00e1c th\u00e0nh ph\u1ea7n kh\u00f4ng n\u1eb1m trong __all__ s\u1ebd \u0111\u01b0\u1ee3c xem l\u00e0 n\u1ed9i b\u1ed9 v\u00e0 kh\u00f4ng \u0111\u01b0\u1ee3c import trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section\t\thelp class=\"sc_fs_faq sc_card    \"\n\t\t\t\t>\n\t\t\t\t<h2 id=\"L\u00e0m_th\u1ebf_n\u00e0o_\u0111\u1ec3_bi\u1ebft_m\u1ed9t_th\u01b0_m\u1ee5c_l\u00e0_Package_hay_ch\u1ec9_l\u00e0_th\u01b0_m\u1ee5c_th\u01b0\u1eddng?\">L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 bi\u1ebft m\u1ed9t th\u01b0 m\u1ee5c l\u00e0 Package hay ch\u1ec9 l\u00e0 th\u01b0 m\u1ee5c th\u01b0\u1eddng?<\/h2>\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"sc_fs_faq__content\">\n\t\t\t\t\n\n<p class=\"wp-block-paragraph\">\u0110\u1ed1i v\u1edbi c\u00e1c d\u1ef1 \u00e1n tu\u00e2n th\u1ee7 c\u1ea5u tr\u00fac chu\u1ea9n, s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a file __init__.py ch\u00ednh l\u00e0 d\u1ea5u hi\u1ec7u nh\u1eadn bi\u1ebft. N\u1ebfu m\u1ed9t th\u01b0 m\u1ee5c ch\u1ee9a t\u1eadp tin n\u00e0y, tr\u00ecnh th\u00f4ng d\u1ecbch Python s\u1ebd x\u1eed l\u00fd th\u01b0 m\u1ee5c \u0111\u00f3 nh\u01b0 m\u1ed9t package c\u00f3 th\u1ec3 import \u0111\u01b0\u1ee3c. Ng\u01b0\u1ee3c l\u1ea1i, c\u00e1c th\u01b0 m\u1ee5c kh\u00f4ng ch\u1ee9a t\u1eadp tin n\u00e0y th\u01b0\u1eddng ch\u1ec9 d\u00f9ng \u0111\u1ec3 l\u01b0u tr\u1eef t\u00e0i nguy\u00ean t\u0129nh ho\u1eb7c t\u00e0i li\u1ec7u.<\/p>\n\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/section>\n\t\t\n<script type=\"application\/ld+json\">\n\t{\n\t\t\"@context\": \"https:\/\/schema.org\",\n\t\t\"@type\": \"FAQPage\",\n\t\t\"mainEntity\": [\n\t\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"C\u00f3 b\u1eaft bu\u1ed9c ph\u1ea3i vi\u1ebft code v\u00e0o b\u00ean trong file __init__.py kh\u00f4ng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Ho\u00e0n to\u00e0n kh\u00f4ng. M\u1ed9t t\u1eadp tin __init__.py ho\u00e0n to\u00e0n r\u1ed7ng v\u1eabn h\u1ee3p l\u1ec7 v\u00e0 \u0111\u1ee7 \u0111i\u1ec1u ki\u1ec7n \u0111\u1ec3 \u0111\u00e1nh d\u1ea5u th\u01b0 m\u1ee5c ch\u1ee9a t\u1eadp tin n\u00e0y l\u00e0 m\u1ed9t Python Package. Vi\u1ec7c \u0111\u1ec3 tr\u1ed1ng th\u01b0\u1eddng \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng khi l\u1eadp tr\u00ecnh vi\u00ean ch\u1ec9 mu\u1ed1n \u0111\u1ecbnh danh package m\u00e0 kh\u00f4ng c\u1ea7n th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 logic kh\u1edfi t\u1ea1o hay thi\u1ebft l\u1eadp bi\u1ebfn to\u00e0n c\u1ee5c n\u00e0o.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"T\u1ea1i sao code v\u1eabn ch\u1ea1y b\u00ecnh th\u01b0\u1eddng sau khi t\u00f4i x\u00f3a file __init__.py?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>K\u1ec3 t\u1eeb phi\u00ean b\u1ea3n Python 3.3, ng\u00f4n ng\u1eef n\u00e0y \u0111\u00e3 gi\u1edbi thi\u1ec7u kh\u00e1i ni\u1ec7m \\\"Implicit Namespace Packages\\\", cho ph\u00e9p t\u1ea1o package m\u00e0 kh\u00f4ng c\u1ea7n t\u1eadp tin __init__.py. Do \u0111\u00f3, m\u00e3 ngu\u1ed3n v\u1eabn c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng. Tuy nhi\u00ean, c\u00e1c chuy\u00ean gia v\u1eabn khuy\u1ebfn ngh\u1ecb gi\u1eef l\u1ea1i t\u1eadp tin n\u00e0y \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh t\u01b0\u01a1ng th\u00edch ng\u01b0\u1ee3c, h\u1ed7 tr\u1ee3 c\u00f4ng c\u1ee5 testing v\u00e0 x\u00e1c \u0111\u1ecbnh r\u00f5 r\u00e0ng ranh gi\u1edbi c\u1ee7a package.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"Bi\u1ebfn __all__ trong __init__.py c\u00f3 t\u00e1c d\u1ee5ng c\u1ee5 th\u1ec3 l\u00e0 g\u00ec? \",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>Bi\u1ebfn __all__ l\u00e0 m\u1ed9t danh s\u00e1ch (list) ch\u1ee9a t\u00ean c\u00e1c module, h\u00e0m ho\u1eb7c l\u1edbp d\u1ea1ng chu\u1ed7i. Danh s\u00e1ch n\u00e0y quy \u0111\u1ecbnh ch\u00ednh x\u00e1c nh\u1eefng th\u00e0nh ph\u1ea7n n\u00e0o s\u1ebd \u0111\u01b0\u1ee3c xu\u1ea5t ra khi ng\u01b0\u1eddi d\u00f9ng s\u1eed d\u1ee5ng l\u1ec7nh from package import *. C\u00e1c th\u00e0nh ph\u1ea7n kh\u00f4ng n\u1eb1m trong __all__ s\u1ebd \u0111\u01b0\u1ee3c xem l\u00e0 n\u1ed9i b\u1ed9 v\u00e0 kh\u00f4ng \u0111\u01b0\u1ee3c import trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t,\t\t\t\t{\n\t\t\t\t\"@type\": \"Question\",\n\t\t\t\t\"name\": \"L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 bi\u1ebft m\u1ed9t th\u01b0 m\u1ee5c l\u00e0 Package hay ch\u1ec9 l\u00e0 th\u01b0 m\u1ee5c th\u01b0\u1eddng?\",\n\t\t\t\t\"acceptedAnswer\": {\n\t\t\t\t\t\"@type\": \"Answer\",\n\t\t\t\t\t\"text\": \"<p>\u0110\u1ed1i v\u1edbi c\u00e1c d\u1ef1 \u00e1n tu\u00e2n th\u1ee7 c\u1ea5u tr\u00fac chu\u1ea9n, s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a file __init__.py ch\u00ednh l\u00e0 d\u1ea5u hi\u1ec7u nh\u1eadn bi\u1ebft. N\u1ebfu m\u1ed9t th\u01b0 m\u1ee5c ch\u1ee9a t\u1eadp tin n\u00e0y, tr\u00ecnh th\u00f4ng d\u1ecbch Python s\u1ebd x\u1eed l\u00fd th\u01b0 m\u1ee5c \u0111\u00f3 nh\u01b0 m\u1ed9t package c\u00f3 th\u1ec3 import \u0111\u01b0\u1ee3c. Ng\u01b0\u1ee3c l\u1ea1i, c\u00e1c th\u01b0 m\u1ee5c kh\u00f4ng ch\u1ee9a t\u1eadp tin n\u00e0y th\u01b0\u1eddng ch\u1ec9 d\u00f9ng \u0111\u1ec3 l\u01b0u tr\u1eef t\u00e0i nguy\u00ean t\u0129nh ho\u1eb7c t\u00e0i li\u1ec7u.<\/p>\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t]\n\t}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Khi tham gia v\u00e0o c\u00e1c d\u1ef1 \u00e1n ph\u1ea7n m\u1ec1m quy m\u00f4 l\u1edbn ho\u1eb7c nghi\u00ean c\u1ee9u m\u00e3 ngu\u1ed3n c\u1ee7a c\u00e1c th\u01b0 vi\u1ec7n n\u1ed5i ti\u1ebfng, l\u1eadp tr\u00ecnh vi\u00ean th\u01b0\u1eddng xuy\u00ean b\u1eaft g\u1eb7p t\u1eadp tin __init__.py n\u1eb1m trong h\u1ea7u h\u1ebft c\u00e1c th\u01b0 m\u1ee5c con. D\u00f9 l\u00e0 m\u1ed9t th\u00e0nh ph\u1ea7n c\u01a1 b\u1ea3n, nh\u01b0ng __init__.py th\u01b0\u1eddng g\u00e2y b\u1ed1i r\u1ed1i cho [&hellip;]<\/p>\n","protected":false},"author":23,"featured_media":120942,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5389],"tags":[7460],"class_list":["post-120931","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kien-thuc-tong-hop","tag-file-__init__-py"],"_links":{"self":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/120931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/comments?post=120931"}],"version-history":[{"count":5,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/120931\/revisions"}],"predecessor-version":[{"id":120943,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/posts\/120931\/revisions\/120943"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media\/120942"}],"wp:attachment":[{"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/media?parent=120931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/categories?post=120931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tino.vn\/blog\/wp-json\/wp\/v2\/tags?post=120931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}