---
# System prepended metadata

title: Python / import
tags: [import, Python, package]

---

Python / import
===
###### tags: `Python`
###### tags: `Python`, `import`, `package`

<br>

[TOC]

<br>


## [教學範例] 建立 import 捷近
### 專案結構

```
myproject/
└── mylib/
    ├── __init__.py
    └── main.py
```

### 程式碼
- ### `mylib/main.py`
    ```python
    def hello() -> None:
        print("Hello, world!")
    ```
- ### `mylib/__init__.py`
    ```python
    # 讓 hello 成為套件頂層屬性
    from .main import hello

    # （可選）讓 IDE/型別工具更清楚可用介面
    __all__ = ["hello"]
    ```

<br>

### 使用方式
- ### 舊的使用方式
    ```python
    from mylib.main import hello
    hello()  # 印出: Hello, world!
    ```
- ### 建立 import 捷近後，新的使用方式
    ```python
    from mylib import hello
    hello()  # 印出: Hello, world!
    ```

<br>

### 小提醒（避免踩雷）

- **避免循環匯入**：只在 `__init__.py` 做「重新匯出」即可，不要在 `main.py` 反向 `import mylib`。
- **命名衝突**：若日後增加同名符號，記得同步更新 `__all__` 或改用明確匯入。


<br>

---

## 討論
### import 順序
- ### Question
    一般是怎麼排序？ from 優先？ import 優先？
    內建/內部 lib 優先？外部 lib 優先？
- ### gpt-4o (2025/04/24)
   這是一個很棒的問題！Python 的 import 排序 是有「公認慣例」的，特別是如果你希望你的專    案看起來專業、乾淨、好維護。這個慣例主要是由 PEP 8 所制定。

    ### ✅ PEP 8 建議的 import 排序順序：
    三個區塊，並且 中間用一行空行分隔
    1. 標準函式庫（Standard Library imports）
    2. 第三方套件（Third-party imports，如 `requests`, `numpy`）
    3. 本地應用/模組（Local application/library imports）

<br>

{%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}
