рдПрдХрд▓ рдкрд╛рдпрдерди рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛

рдХрднреА-рдХрднреА рд╡рд┐рднрд┐рдиреНрди рднреМрддрд┐рдХ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рдкрдбрд╝реЗ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рдореЗрдВ рдЙрдирдХреЗ рд╕реНрдерд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдиреЗ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВред

рдпрд╣ рдЪреАрдЯ рд╢реАрдЯ, рдЬреЛ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдкрд╛рдпрдерди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╛рдпрдерди 2 рдЕрдм рдЬрд▓реНрдж рд╣реА рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЕрднреА рджреЛ рдЖрдЧ рдХреЗ рдмреАрдЪ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рдВрдХреНрд░рдордг рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

рд╣рдо рдкреИрдХреЗрдЬ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

namespace1 package1 module1 package2 module2 

рдореЙрдбреНрдпреВрд▓ 1 рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА

 print('package 1') var1 = 1 

рдореЙрдбреНрдпреВрд▓ 2 рд╕рд╛рдордЧреНрд░реА

 print('package 2') var2 = 2 

рдЙрд╕реА рд╕рдордп, рдкреИрдХреЗрдЬ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

  path1 namespace1 package1 module1 path2 namespace1 package2 module2 

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ path1 рдФрд░ path2 рдХреЛ рдкрд╣рд▓реЗ рд╣реА sys.path рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ 1 рдФрд░ рдореЙрдбреНрдпреВрд▓ 2 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  from namespace1.package1 import module1 from namespace1.package2 import module2 

рдЬрдм рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ Python 3.7 рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рд╕рдм рдХреБрдЫ рдЕрджреНрднреБрдд рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

 package 1 package 2 

Python 3.3 рдореЗрдВ PEP-420 рдХреЗ рд╕рд╛рде, рдирд┐рд╣рд┐рдд рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, py33 рд╕реЗ рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ __init__.py рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ рдирд╛рдорд╕реНрдерд╛рди рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕рд┐рд░реНрдл _ рдирд┐рд╖рд┐рджреНрдз_ рд╣реИред рдпрджрд┐ __init__.py рдлрд╝рд╛рдЗрд▓ рдирд╛рдо name1 рдХреЗ рд╕рд╛рде рдПрдХ рдпрд╛ рджреЛрдиреЛрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдкреИрдХреЗрдЬ рдХреЗ рдЖрдпрд╛рдд рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

 ModuleNotFoundError: No module named 'namespace1.package2' 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЕрдВрджрд░реВрдиреА рд╕реВрддреНрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдкреИрдХреЗрдЬ рдХреЛ рд╕рдВрдпреБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдПрдХрд▓ рдЗрдХрд╛рдИ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкреБрд░рд╛рдиреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдФрд░ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдЪрд┐рдкрдХрдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрднреА-рдХрднреА рд╣рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рд░рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЖрдЗрдП рдкрд╛рдпрдерди 2.7 рдкрд░ рдЬрд╛рдПрдВред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЖрдкрдХреЛ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ __init__.py рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдореЗрдВ рдкреИрдХреЗрдЬ рдХреЛ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдирд╛рдорд╕реНрдерд╛рди 1 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд __in__ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд╛рдо рд╕реНрдерд╛рди рдХреА рдШреЛрд╖рдгрд╛ рд▓рд┐рдЦреЗрдВ, рдЕрдиреНрдпрдерд╛, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдкреИрдХреЗрдЬ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

 from pkgutil import extend_path __path__ = extend_path(__path__, __name__) 

рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдЬрдм рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдкрд░ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рддреЛ sys.path рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓рд╛ рдПрдХ рдкреИрдХреЗрдЬ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ path1 / namespace1 рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ path1 / namespace1 / __ init__.py рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЧреЗ рдХреА рдЦреЛрдЬ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, Extended_path рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ рд╕рднреА sys.path рдкрд░ рдПрдХ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, namepace1 рдФрд░ рдЖрдВрддрд░рд┐рдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рднреА рдкреИрдХреЗрдЬ рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреБрд▓ namespace1 рдХреЗ __path__ рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдмрд╛рд▓ рдкреИрдХреЗрдЬ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧрд╛рдЗрдбреЛрдВ рдореЗрдВ, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрддреА рд╣рд░ рдмрд╛рд░ рдирд╛рдорд╕реНрдерд╛рди 1 рдкрд░ рд░рдЦреЗ рдЬрд╛рдПрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рд╕рднреА рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ, рдЬреЛ рдХрд┐ sys.path рдореЗрдВ рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ pkgutil.extend_path рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдХреА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдХреЙрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ рдЯреАрдо рдореЗрдВ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рддрд░реНрдХ "рдорд╛рдорд▓реЗ рдореЗрдВ" рдЯрд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдФрд░ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдХреМрди рд╕реА рдЯреАрдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдереА, рдХреНрдпреЛрдВрдХрд┐ рдЦреЛрдЬ рдХреНрд░рдо рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ, рдЖрдкрдХреЛ рдЪрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рддрд░реНрдХ __init__ рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдЧрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рд╣рд░ рд╡рд┐рддрд░рд┐рдд рдкреИрдХреЗрдЬ рдореЗрдВ рдЪреБрдиреА рд╣реБрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╕рдВрд╕реНрдХрд░рдг 3 рдкрд░ рдЖрдк рдХреБрдЫ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ pkgutil.extend_path рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрди-рдмреЙрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрдм рдЖрдк python setup.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рддрд░реАрдХрд╛, рдЬрд┐рд╕реЗ рдЕрдм рдХреБрдЫ рдкреБрд░рд╛рдирд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 #namespace1/__init__.py __import__('pkg_resources').declare_namespace(__name__) 

Pkg_resource рдореЙрдбреНрдпреВрд▓ рд╕реЗрдЯрдкреВрд▓ рдХреЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЕрд░реНрде pkgutil рдХреЗ рд╕рдорд╛рди рд╣реИ - рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ namespace1 рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рддреНрдпреЗрдХ __init__ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдорд╕реНрдерд╛рди рдШреЛрд╖рдгрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдХреЛрдИ рдЕрдиреНрдп рдХреЛрдб рдирд╣реАрдВ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╕реЗрдЯрдЕрдк рдирд╛рдо рдореЗрдВ рдиреЗрдорд╕реНрдкреЗрд╕ рдирд╛рдорд╕реНрдерд╛рди_рдкреИрдХреЗрдЬ = ['рдирд╛рдорд╕реНрдерд╛рди 1'] рджрд░реНрдЬ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ

 try: __import__('pkg_resources').declare_namespace(__name__) except: from pkgutil import extend_path __path__ = extend_path(__path__, __name__) 

рдпрд╣рд╛рдВ рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ - рдЕрдЧрд░ рд╕реЗрдЯрдкреНрдЯреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╣рдо pkgutil рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рджреВрд╕рд░реЗ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдорд╕реНрдерд╛рди 1 / рдкреИрдХреЗрдЬ 2 / рдореЙрдбреНрдпреВрд▓ 2 рдмрджрд▓реЗрдВ

 import namespace1.package1.module1 print(var1) 

рдФрд░ рдлрд┐рд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдЧрд▓рддреА рд╕реЗ рдПрдХ рдирдП рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдореМрдЬреВрджрд╛ рдПрдХ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЙрд╕реА рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреИрдХреЗрдЬ 1 рдирд╛рдо рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рджреЛ рдкреИрдХреЗрдЬ рд╣реЛрдВрдЧреЗред

 namespace1 package1 module1 package1 module2 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдореЙрдбреНрдпреВрд▓ 2 рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреАред рдкреИрдХреЗрдЬ рд╕рдВрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред

 from namespace1.package1 import module1 from namespace1.package1 import module2 #>>ImportError: cannot import name module2 

рд╕рд╛рд░рд╛рдВрд╢:

  1. 3.3 рд╕реЗ рдЕрдзрд┐рдХ рдЙрдореНрд░ рдХреЗ рдФрд░ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдирд╛рдо рд╕реНрдерд╛рди рдШреЛрд╖рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  2. рд╕рдВрд╕реНрдХрд░рдг 2 рдФрд░ 3 рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкрд╛рдЗрдк рдФрд░ рдкрд╛рдЗрдерди рд╕реЗрдЯрдЕрдк рдерд┐рдВрдХрдкреИрдб рджреЛрдиреЛрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ, pkgutil рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред
  3. рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд░рд╛рдиреЗ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдЖрдкрдХреЛ zip-safe рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ pkg_resource рд╡рд┐рдХрд▓реНрдк рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:


рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

Source: https://habr.com/ru/post/hi458432/


All Articles