你有沒有寫過一個 Python 工具,每次要用都得先 cd 進去那個目錄,然後 python main.py ...?
這篇文章要解決這個問題。透過 Python 標準的封裝機制,讓你的工具變成像 git、npm 一樣可以在任何地方直接呼叫的全域指令。
最終效果
封裝完成後,從任何目錄都能直接執行:
# 封裝前
cd /path/to/my-tool
python main.py list --site aroot
# 封裝後
orca-wp list --site aroot
前置條件
你已經有一個用 Typer 或 Click 寫好的 CLI 工具,進入點大概長這樣:
# main.py
import typer
app = typer.Typer()
@app.command()
def hello(name: str):
print(f"Hello, {name}!")
if __name__ == "__main__":
app()
Step 1:建立 setup.py
在專案根目錄建立 setup.py:
from setuptools import setup
setup(
name="my-tool",
version="1.0.0",
description="我的 CLI 工具",
py_modules=["main"], # 你的主程式檔名(不含 .py)
install_requires=[
"typer>=0.9",
"rich>=13",
],
entry_points={
"console_scripts": [
"my-tool=main:app", # 指令名稱=檔案名稱:typer app 變數
],
},
python_requires=">=3.10",
)
關鍵在 entry_points 裡的 console_scripts:
my-tool:安裝後可在 terminal 使用的指令名稱main:app:main.py裡名為app的物件(Typer / Click app)
Step 2:用 pip install -e . 安裝
pip install -e .
-e 是 editable 模式,意思是:安裝後直接指向你的原始碼目錄,修改 main.py 立即生效,不需要重新安裝。
安裝完成後確認:
which my-tool
# → /Users/yourname/anaconda3/bin/my-tool
my-tool --help
多個模組的情況
如果你的工具拆成多個 .py 檔,在 py_modules 裡列出所有需要的模組:
setup(
...
py_modules=["main", "wp_client", "utils"],
...
)
如果是整個套件目錄(有 __init__.py),改用 packages:
from setuptools import setup, find_packages
setup(
...
packages=find_packages(),
...
)
如何讓新機器也能安裝
把專案放到 Git(GitHub / Bitbucket),新機器上的流程就是:
git clone [email protected]:yourname/my-tool.git
cd my-tool
pip install -e .
後續更新只需要:
git pull # 不需要重新 pip install
注意事項
- 指令名稱建議用小寫加連字號,例如
orca-wp、my-tool,可讀性比mytool好 - 含帳密的設定檔(如
config.json)記得加進.gitignore - 如果同一環境有多個 Python 版本,確認
pip對應的是你要用的版本(可用pip3或指定python3 -m pip) - Anaconda 環境下安裝的指令會在
~/anaconda3/bin/,確認這個路徑在$PATH裡
完整範例:orca-wp
這是我日常用來管理多個 WordPress 站台的工具實際的 setup.py:
from setuptools import setup
setup(
name="orca-wp-cli",
version="1.0.0",
description="WordPress CLI 工具 - 在終端管理你的 WP 站台",
py_modules=["main", "wp_client"],
install_requires=[
"typer>=0.9",
"httpx>=0.27",
"rich>=13",
"python-dotenv",
],
entry_points={
"console_scripts": [
"orca-wp=main:app",
],
},
python_requires=">=3.10",
)
安裝後,不管在哪個目錄,直接跑 orca-wp list --site myblog 就能列出文章。工具的原始碼還在原本的目錄,改了馬上生效,不需要重新 build 或安裝。
這個方式對於個人工具、內部自動化腳本來說非常實用——不需要打包成 binary、不需要上 PyPI,只要一台有 Python 的機器,clone 下來 pip install 就能用。