管理python import - jenhaoyang/backend_blog GitHub Wiki

Module

An object that serves as an organizational unit of Python code. Modules have a namespace containing arbitrary Python objects. Modules are loaded into Python by the process of importing.

在實務上,Module通常就是內含python並以.py為副檔名的檔案

Namespace

>>> import math
>>> math.pi
3.141592653589793

在這裡math.pi的math就等同於namespace
用dir()可以看到global namespace裡面的所有東西 dir(math)可以看到math這個namespace底下的東西

將module加入globel namespace

>>> from math import pi
>>> pi
3.141592653589793

>>> math.pi
NameError: name 'math' is not defined
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'pi']

這個例子可以發現pi被加到globel namespace了

Package

A Python module which can contain submodules or recursively, subpackages. Technically, a package is a Python module with an __path__ attribute.

在實務上,Package通常是一個資料夾,內含python檔或是其他資料夾,要建立packege必須在package資料夾裡建立一個__init__.py檔

通常import package的時候,submodules和subpackages不會被import,不過我們可以利用__init__.py來import需要的submodules和subpackages。


  • import module:
    建立namespace並且將module底下的內容都import
  • import package:
    建立namespace並且import init.py底下的內容,如果__init__.py為空則不import任何submodule或subpackage

參考:
https://realpython.com/python-import/
https://dev.to/codemouse92/dead-simple-python-project-structure-and-imports-38c6