觀察 VOICEVOX 的 API
VOICEVOX 是由編輯器、引擎與核心組成的。
參考: 整體構成
編輯器是應用程式、引擎是 HTTP 伺服器、核心則是執行語音合成處理的模組。
也就是說,編輯器對引擎呼叫 REST API(以下簡稱 API)。
因此這篇文章要觀察這個 API 的內容。
API 的擷取我使用 Wireshark。
啟動時的通訊
我用 http and tcp.port == 50021 做了過濾,結果如下:

啟動時似乎會讀取以下資訊:
- 版本資訊
/version - 引擎的 manifest 資訊
/engine_manifest - 聲優資訊
/speakers(像是 ずんだもん 等角色名單) - 歌手資訊
/singers(同上)
取得 speakers 和 singers 之後,會更詳細地取得各角色的資訊(/speaker_info?speaker_uuid=xxx, /singer_info?speaker_uuid=xxx)。
合成語音請求時的通訊

接著我用 ずんだもん 發送語音合成請求,觀察 API。

語音的取得流程似乎如下:
- 透過
/accent_phrases取得重音/語調資訊 - 透過
/synthesis?speaker=3合成 ずんだもん 的聲音
在 (2.) 發送的請求主體看起來和 (1.) 的回應類似,像下面這樣。
因此流程是先在 (1.) 取得重音資訊,接著在 (2.) 依據這些資訊合成語音。
實際呼叫 API 試試看
我使用 httpie 這個工具來呼叫 API。
- 取得 speakers 資訊

可以看到 ずんだもん(Normal)的 id 是 3。
- 取得重音資訊
我用「ずんだもんなのだ」取得重音資訊。(與取得 speaker 不同,這是用 POST)

- 合成語音
建立如下的請求主體:
{
"accent_phrases": <從 /accent_phrases 取得的資料>,
"speedScale": 1,
"pitchScale": 0,
"intonationScale": 1,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"outputSamplingRate": 24000,
"outputStereo": false,
"kana": ""
}
因為 httpie 好像不能處理 wav,所以改用 PowerShell 送請求。
# 定義 URL 與 JSON 資料
$url = 'http://localhost:50021/synthesis?speaker=3'
$jsonBody = @"
{
"accent_phrases": [
{
"moras": [
{
"text": "ズ",
"consonant": "z",
"consonant_length": 0.12722788751125336,
"vowel": "u",
"vowel_length": 0.11318323761224747,
"pitch": 5.773037910461426
},
{
"text": "ン",
"consonant": null,
"consonant_length": null,
"vowel": "N",
"vowel_length": 0.09306197613477707,
"pitch": 6.108947277069092
},
{
"text": "ダ",
"consonant": "d",
"consonant_length": 0.04249810427427292,
"vowel": "a",
"vowel_length": 0.09372275322675705,
"pitch": 6.09743070602417
},
{
"text": "モ",
"consonant": "m",
"consonant_length": 0.07012023776769638,
"vowel": "o",
"vowel_length": 0.1172478124499321,
"pitch": 5.932623386383057
},
{
"text": "ン",
"consonant": null,
"consonant_length": null,
"vowel": "N",
"vowel_length": 0.06496299058198929,
"pitch": 5.745952129364014
},
{
"text": "ナ",
"consonant": "n",
"consonant_length": 0.038462959229946136,
"vowel": "a",
"vowel_length": 0.08576127141714096,
"pitch": 5.5794854164123535
}
],
"accent": 1,
"pause_mora": null,
"is_interrogative": false
},
{
"moras": [
{
"text": "ノ",
"consonant": "n",
"consonant_length": 0.05504273623228073,
"vowel": "o",
"vowel_length": 0.0903041884303093,
"pitch": 5.551316261291504
},
{
"text": "ダ",
"consonant": "d",
"consonant_length": 0.05024997144937515,
"vowel": "a",
"vowel_length": 0.20450790226459503,
"pitch": 5.633930206298828
}
],
"accent": 2,
"pause_mora": null,
"is_interrogative": false
}
],
"speedScale": 1,
"pitchScale": 0,
"intonationScale": 1,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"outputSamplingRate": 24000,
"outputStereo": false,
"kana": ""
}
"@
# 建立 HTTP 標頭
$headers = @{
'Content-Type' = 'application/json'
}
# 發送 POST 請求並取得回應
$response = Invoke-WebRequest -Uri $url -Method Post -Headers $headers -Body $jsonBody -OutFile "output.wav"
# 開啟並播放
start output.wav
VOICEVOX:ずんだもん
以上!
fluent-listbox-scroll
0.248 (16) 轉換成十進位分數的簡單解法 (基本資訊技術人員考試)
「16 進位的小數 0.248 轉換成十進位的分數是什麼?」的問題,我將簡單介紹解法。
重點
16 進位的問題使用 2 進位
步驟
-
將 16 進位轉換成 2 進位
0.248(16) = 0.0010 0100 1000(2) -
去掉小數點
0.0010 0100 1000(2) = 0.0010 0100 1000(2) × 0010 0000 0000(2) / 0010 0000 0000(2) = 0100 1001(2) / 0010 0000 0000(2) -
將 2 進位轉換成 10 進位
0100 1001(2) / 0010 0000 0000(2) = (64 + 8 + 1) / 512
= 73 / 512
Matplotlib (Pyplot) 常用程式碼範例
這裡介紹一些常用的程式碼和圖表範例。
目次
建立圖表
首先載入所需的函式庫。
import matplotlib.pyplot as plt
import numpy as np
單一圖表
fig, ax = plt.subplots()

2 x 3 的圖表
fig, axs = plt.subplots(2, 3)

繪製圖表
繪製拋物線
x = np.linspace(-1, 1, 201)
y = x ** 2
fig, ax = plt.subplots()
ax.plot(x, y)

用點繪製拋物線
fig, ax = plt.subplots()
x = np.linspace(-1, 1, 21)
y = x ** 2
ax.plot(x, y, 'o')

顏色設為橘色
fig, ax = plt.subplots()
x = np.linspace(-1, 1, 21)
y = x ** 2
ax.plot(x, y, color="tab:orange")

標準顏色如下:
| 顏色 | 字串 |
|---|---|
| 藍 | tab:blue |
| 橘 | tab:orange |
| 綠 | tab:green |
| 紅 | tab:red |
| 紫 | tab:purple |
| 棕 | tab:brown |
| 粉紅 | tab:pink |
| 灰 | tab:gray |
| 橄欖 | tab:olive |
| 青 | tab:cyan |
設定線的粗細為 4
fig, ax = plt.subplots()
x = np.linspace(-1, 1, 21)
y = x ** 2
ax.plot(x, y, lw=4)

設定標題
將標題設為 Title
fig, ax = plt.subplots()
ax.set_title("Title")

設定軸標籤
設定 x 軸標籤
將 x 軸標籤設為 Time (s)
fig, ax = plt.subplots()
ax.set_xlabel("Time (s)")

設定 y 軸標籤
將 y 軸標籤設為 Distance (m)
fig, ax = plt.subplots()
ax.set_ylabel("Distance (m)")

設定圖表的上限與下限
將上限設為 100
fig, ax = plt.subplots()
ax.set_ylim(top=100)

將下限設為 -100
fig, ax = plt.subplots()
ax.set_ylim(bottom=-100)

將上限設為 100,下限設為 -100
fig, ax = plt.subplots()
ax.set_ylim([-100, 100])

設定圖表的左邊與右邊
將左邊設為 -100
fig, ax = plt.subplots()
ax.set_xlim(left=-100)

將右邊設為 100
fig, ax = plt.subplots()
ax.set_xlim(right=100)

將左邊設為 -100,右邊設為 100
fig, ax = plt.subplots()
ax.set_xlim([-100, 100])

顯示網格
fig, ax = plt.subplots()
ax.grid()

僅顯示垂直網格
fig, ax = plt.subplots()
ax.grid(axis="x")

僅顯示水平網格
fig, ax = plt.subplots()
ax.grid(axis="y")

設定刻度
設定 x 軸刻度
fig, ax = plt.subplots()
xticks = range(6)
ax.set_xticks(xticks)

設定 x 軸刻度和刻度標籤
fig, ax = plt.subplots()
xticks = range(6)
ax.set_xticks(xticks, [f"{xtick}m" for xtick in xticks])

設定 y 軸刻度
fig, ax = plt.subplots()
yticks = [i * 20 for i in range(6)]
ax.set_yticks(yticks)

設定 y 軸刻度和刻度標籤
fig, ax = plt.subplots()
yticks = [i * 20 for i in range(6)]
ax.set_yticks(yticks, [f"{ytick}%" for ytick in yticks])

刪除刻度
刪除 x 軸刻度
fig, ax = plt.subplots()
ax.tick_params(bottom=False)

刪除 x 軸刻度標籤
fig, ax = plt.subplots()
ax.tick_params(labelbottom=False)

刪除 y 軸刻度
fig, ax = plt.subplots()
ax.tick_params(left=False)

刪除 y 軸刻度標籤
fig, ax = plt.subplots()
ax.tick_params(labelleft=False)

設定刻度顏色
將 x 軸刻度顏色設為紅色
fig, ax = plt.subplots()
ax.tick_params(axis="x", color="tab:red")

將 x 軸刻度標籤顏色設為紅色
fig, ax = plt.subplots()
ax.tick_params(axis="x", labelcolor="tab:red")

將 y 軸刻度顏色設為紅色
fig, ax = plt.subplots()
ax.tick_params(axis="y", color="tab:red")

將 y 軸刻度標籤顏色設為紅色
fig, ax = plt.subplots()
ax.tick_params(axis="y", labelcolor="tab:red")

調整圖表間距
將縱向間距設為 0.2,橫向間距設為 0.3
fig, ax = plt.subplots(3, 3)
fig.subplots_adjust(hspace=0.2, wspace=0.3)

自動設定間距
fig, ax = plt.subplots(3, 3)
fig.tight_layout()

儲存圖片
以 PNG 格式儲存
fig, ax = plt.subplots()
plt.savefig("graph.png")
以 SVG 格式儲存
fig, ax = plt.subplots()
plt.savefig("svg.png")
以 PDF 格式儲存
fig, ax = plt.subplots()
plt.savefig("svg.pdf")
以 300 dpi 儲存
fig, ax = plt.subplots()
plt.savefig("graph300.png", dpi=300)

.NET CLI 備忘錄
這篇備忘錄記錄了 .NET CLI (命令行界面)。
.NET CLI 是一個跨平台的工具集,用於開發、構建、運行、發布和管理 .NET 項目。它提供了一組命令行命令,讓你可以在任何支持 .NET 的操作系統(Windows, Linux, macOS)上高效地工作,無需依賴 IDE。
1. 基本命令
A. 建立新專案
dotnet new 命令用於建立新專案、配置文件或解決方案。
dotnet new console -o MyConsoleApp # 建立一個新的控制台應用程式
dotnet new webapi -o MyWebApi # 建立一個新的 ASP.NET Core Web API 專案
dotnet new sln -n MySolution # 建立一個新的解決方案文件
-o:指定輸出目錄(專案名稱)。-n:指定解決方案名稱。
B. 還原依賴
dotnet restore 命令還原專案的依賴項和工具。
dotnet restore
通常,dotnet build、dotnet run 和 dotnet publish 命令會隱式執行還原操作。
C. 構建專案
dotnet build 命令編譯專案及其依賴項。
dotnet build
dotnet build --configuration Release # 以 Release 配置構建
D. 運行專案
dotnet run 命令在開發環境中運行專案。它會自動構建專案,然後運行可執行文件。
dotnet run
E. 測試專案
dotnet test 命令運行專案中的單元測試。
dotnet test
F. 發布專案
dotnet publish 命令將應用程式及其依賴項打包為部署單元。
dotnet publish -c Release -o ./publish # 以 Release 配置發布到 'publish' 目錄
-c Release:指定 Release 配置。-o ./publish:指定輸出目錄。
2. 專案管理
A. 添加專案到解決方案
dotnet sln add MyConsoleApp/MyConsoleApp.csproj
B. 添加參考 (Reference)
將一個專案參考添加到另一個專案:
cd MyWebApi
dotnet add reference ../MyConsoleApp/MyConsoleApp.csproj
C. 添加套件 (Package)
添加 NuGet 套件到專案:
dotnet add package Newtonsoft.Json
D. 移除套件
移除 NuGet 套件:
dotnet remove package Newtonsoft.Json
3. 工具命令
A. 管理全局工具
dotnet tool 命令用於安裝、列出、更新或卸載 .NET 全局工具。
dotnet tool install --global dotnet-ef # 安裝 Entity Framework Core CLI 工具
dotnet tool list --global # 列出所有全局工具
dotnet tool update --global dotnet-ef # 更新工具
dotnet tool uninstall --global dotnet-ef # 卸載工具
4. 其他常用命令
A. 清理專案
dotnet clean 命令清理專案的輸出文件。
dotnet clean
B. 查看信息
dotnet --info 顯示有關 .NET SDK 和運行時環境的詳細信息。
dotnet --info
C. 查看幫助
幾乎所有 dotnet 命令都支持 --help 選項。
dotnet new --help
dotnet build --help
總結
.NET CLI 是一個功能強大且必不可少的工具,它為 .NET 開發者提供了一個高效、跨平台的工作流。無論是從頭開始創建專案、管理依賴、構建、測試還是發布,熟練掌握 .NET CLI 命令都能極大地提高你的開發效率。
Linux NetworkManager 備忘錄
這篇備忘錄記錄了 Linux 上的 NetworkManager。
NetworkManager 是一個動態網絡配置和管理守護程式,主要用於 Linux 系統。它旨在簡化網絡配置過程,特別是對於那些經常在不同網絡環境之間切換的筆記本電腦用戶,或需要圖形界面管理網絡連接的桌面用戶。
NetworkManager 會監測網絡設備的狀態,並自動配置它們,包括有線、無線、移動寬帶等連接。
1. NetworkManager 的核心組件
NetworkManager守護程式:主要的後台服務,負責管理網絡連接。nmcli(NetworkManager Command Line Interface):命令行工具,用於配置和顯示 NetworkManager 的狀態。nmtui(NetworkManager Text User Interface):基於文本的用戶界面工具,提供一個互動式的菜單來管理連接。- 圖形化前端:如 GNOME Shell 的網絡設置、KDE Plasma 的網絡管理小程式等。
2. nmcli 基本用法
nmcli 是與 NetworkManager 交互最常用的命令行工具。
A. 顯示網絡設備狀態
nmcli device status
輸出會列出所有網絡設備及其狀態(例如 ethernet wifi connected disconnected)。
B. 顯示連接信息
nmcli connection show
這會列出所有已配置的網絡連接。
C. 啟用/禁用網絡設備
nmcli device disconnect eth0 # 斷開 eth0
nmcli device connect eth0 # 連接 eth0
nmcli radio wifi off # 禁用 Wi-Fi
nmcli radio wifi on # 啟用 Wi-Fi
D. 創建新連接
創建有線連接
nmcli connection add type ethernet con-name "MyWiredConnection" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1 dns "8.1.1.1 8.8.4.4"
nmcli connection up "MyWiredConnection"
con-name:連接名稱。ifname:接口名稱 (例如eth0)。ip4:IPv4 地址和子網掩碼。gw4:IPv4 網關。dns:DNS 服務器。
創建 Wi-Fi 連接
nmcli device wifi rescan # 掃描 Wi-Fi 網絡
nmcli device wifi list # 列出可用 Wi-Fi 網絡
nmcli connection add type wifi con-name "MyWiFi" ifname wlan0 ssid "Your_SSID"
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "Your_WiFi_Password"
nmcli connection up "MyWiFi"
ssid:Wi-Fi 網絡名稱。wifi-sec.key-mgmt wpa-psk:指定 WPA-PSK 密碼管理。wifi-sec.psk:Wi-Fi 密碼。
E. 修改現有連接
nmcli connection modify "MyWiredConnection" ipv4.addresses 192.168.1.101/24
nmcli connection modify "MyWiredConnection" ipv4.gateway 192.168.1.2
nmcli connection modify "MyWiredConnection" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection modify "MyWiredConnection" ipv4.method manual # 靜態 IP
nmcli connection modify "MyWiredConnection" ipv4.method auto # DHCP
nmcli connection up "MyWiredConnection" # 應用更改
F. 刪除連接
nmcli connection delete "MyWiredConnection"
3. nmtui 用法
nmtui 是一個基於文本的互動式工具,對於不習慣 nmcli 複雜語法的用戶來說非常方便。
sudo nmtui
它會打開一個菜單,允許你:
- 編輯連接
- 激活連接
- 設置主機名
4. NetworkManager 和 systemd-networkd / netplan
在現代 Linux 發行版中,網絡配置有多種方法。
- NetworkManager:主要針對桌面和筆記本用戶,提供豐富的自動配置和圖形界面。
systemd-networkd:Systemd 的網絡配置服務,更輕量,常用於伺服器環境。- Netplan (Ubuntu 專用):一個抽象層,用於統一管理網絡配置,底層可以是 NetworkManager 或
systemd-networkd。
通常,在桌面 Ubuntu 系統中,NetworkManager 是預設的網絡管理工具。
5. 常見問題和故障排除
- 連接失敗:檢查日誌 (
journalctl -u NetworkManager) 以獲取錯誤信息。 - 沒有網絡連接:確保
NetworkManager服務正在運行 (sudo systemctl status NetworkManager)。 - DNS 問題:檢查
/etc/resolv.conf文件,它通常由 NetworkManager 管理。
總結
NetworkManager 是 Linux 系統中一個功能強大且靈活的網絡管理工具。無論是通過 nmcli 進行命令行配置,還是通過 nmtui 進行互動式配置,它都極大地簡化了網絡連接的管理,對於從普通用戶到系統管理員來說都是一個寶貴的工具。
Linux 上的日語環境設置
這篇備忘錄記錄了在 Linux 上設置日語環境的方法。
在 Linux 系統中設置日語環境(包括語言、輸入法和字體)對於需要處理日語文本或開發日語應用程式的用戶來說至關重要。這確保了系統能夠正確顯示日語字符,並允許用戶使用日語輸入法。
1. 設置區域設置 (Locale)
區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。
A. 查看當前區域設置
locale
B. 生成日語區域設置
如果你的系統中沒有日語區域設置,你需要生成它。
-
編輯
locale.gen:sudo vim /etc/locale.gen查找並取消註釋(刪除前面的
#)以下行:ja_JP.UTF-8 UTF-8保存並退出。
-
生成區域設置:
sudo locale-gen
C. 設置系統區域設置
你可以將系統的默認區域設置設置為日語。
sudo update-locale LANG=ja_JP.UTF-8
或者,對於基於 Systemd 的系統:
sudo localectl set-locale LANG=ja_JP.UTF-8
重啟系統或重新登錄以應用更改。
2. 安裝日語輸入法
最流行的日語輸入法是 Fcitx 和 Mozc。
A. 安裝 Fcitx 和 Mozc
-
安裝 Fcitx 輸入法框架:
sudo apt install fcitx fcitx-mozc fcitx-ui-classic fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5(對於基於 Debian/Ubuntu 的系統)
-
配置 Fcitx:
- 打開「設定」 -> 「地區和語言」(或類似名稱)。
- 在「輸入來源」中,將 Fcitx 添加為輸入法系統。
- 重啟系統。
-
啟用 Mozc:
- 重新登錄後,啟動 Fcitx 配置工具 (在應用程式菜單中搜索「Fcitx Configuration」)。
- 在「Input Method」選項卡中,點擊左下角的「+」按鈕。
- 取消勾選「Only Show Current Language」,然後搜索「Mozc」並添加它。
- 將 Mozc 移動到列表的頂部或你偏好的位置。
-
切換輸入法: 通常默認的輸入法切換快捷鍵是
Ctrl + Space或Shift + Space。
B. 安裝 IBus 和 Anthy/Mozc (另一種選擇)
IBus 是另一個流行的輸入法框架。
-
安裝 IBus 和 Mozc/Anthy:
sudo apt install ibus ibus-mozc # 或 ibus-anthy -
配置 IBus:
- 打開「設定」 -> 「地區和語言」。
- 在「輸入來源」中,添加「日語 (Mozc)」或「日語 (Anthy)」。
- 重啟系統。
3. 安裝日語字體
為了正確顯示日語字符,你需要安裝日語字體。
A. 安裝常見的日語字體
sudo apt install fonts-noto-cjk fonts-ipafont fonts-japanese-gothic fonts-japanese-mincho
fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。fonts-ipafont:IPA 明朝/哥特體字體。
B. 配置字體 (可選)
在 GNOME 環境中,你可以通過「設定」->「外觀」->「字體」來更改系統默認字體。或者使用 GNOME Tweaks 工具進行更細緻的調整。
4. 終端中的日語支持
A. 檢查終端編碼
大多數現代終端模擬器都支持 UTF-8 編碼,這對於顯示日語字符是必要的。
echo $LANG
確保輸出包含 UTF-8。
B. 安裝日語 man page (可選)
如果你想查看日語版本的 man 手冊頁:
sudo apt install manpages-ja
5. 總結
在 Linux 上設置日語環境需要配置區域設置、安裝輸入法和字體。通過 Fcitx + Mozc 或 IBus + Mozc 的組合,你可以獲得一個功能齊全的日語輸入環境。安裝 Noto CJK 或 IPA 字體將確保日語字符的正確顯示。
Raspberry Pi 上的日語環境設置
這篇備忘錄記錄了在 Raspberry Pi 上設置日語環境的方法。
在 Raspberry Pi OS (基於 Debian) 上設置日語環境,與在其他 Debian/Ubuntu 系統上的過程類似,但需要注意資源限制和 Raspberry Pi 特有的配置。正確配置後,你可以顯示和輸入日語。
1. 設置區域設置 (Locale)
區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。
A. 打開 Raspberry Pi 配置工具
這是設置區域設置最簡單的方法。
- 在終端中運行:
sudo raspi-config
- 導航到
5 Localisation Options(本地化選項)。 - 選擇
L1 Locale。 - 在列表中找到
ja_JP.UTF-8 UTF-8,按下空白鍵選中它。確保en_GB.UTF-8或en_US.UTF-8也被選中。 - 在下一個屏幕中,選擇
ja_JP.UTF-8作為系統的默認區域設置。 - 選擇
L2 Timezone,並將時區設置為Asia/Tokyo。 - 完成後,重啟 Raspberry Pi。
B. 手動配置 (如果 raspi-config 無法使用)
如果出於某種原因無法使用 raspi-config,你可以手動配置。
-
編輯
locale.gen:sudo vim /etc/locale.gen查找並取消註釋(刪除前面的
#)以下行:ja_JP.UTF-8 UTF-8保存並退出。
-
生成區域設置:
sudo locale-gen -
設置系統區域設置:
sudo update-locale LANG=ja_JP.UTF-8重啟 Raspberry Pi。
2. 安裝日語字體
為了正確顯示日語字符,你需要安裝日語字體。
sudo apt update
sudo apt install fonts-noto-cjk fonts-ipafont fonts-ipaexfont
fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。fonts-ipafont:IPA 明朝/哥特體字體。fonts-ipaexfont:IPAEX 明朝/哥特體字體。
安裝後,可以通過 Raspberry Pi OS 的桌面環境中的「設定」->「外觀」或「字體」來檢查和配置。
3. 安裝日語輸入法 (Fcitx + Mozc)
Fcitx 和 Mozc 是在 Linux 環境中最常用且效果最好的日語輸入法組合。
-
安裝 Fcitx 和 Mozc:
sudo apt install fcitx fcitx-mozc -
設置 Fcitx 為默認輸入法框架:
im-config在彈出的界面中,選擇
fcitx作為默認輸入法。 -
配置 Fcitx:
- 重啟 Raspberry Pi。
- 登錄後,打開 Fcitx 配置工具 (在應用程式菜單中搜索「Fcitx Configuration」或運行
fcitx-configtool)。 - 在「Input Method」選項卡中,點擊左下角的「+」按鈕。
- 取消勾選「Only Show Current Language」,然後搜索「Mozc」並添加它。
- 將 Mozc 移動到列表的頂部或你偏好的位置。
-
切換輸入法: 通常默認的輸入法切換快捷鍵是
Ctrl + Space或Shift + Space。你可以在 Fcitx 配置工具中修改它。
4. 終端中的日語支持
確保你的終端模擬器(如 LXTerminal)使用支持 UTF-8 的字體,並且其編碼設置為 UTF-8。通常,在 Raspberry Pi OS 上,這些都是默認配置。
5. 總結
在 Raspberry Pi 上設置日語環境是一個相對簡單的過程,主要通過 raspi-config 工具來完成區域設置,然後安裝必要的字體和輸入法(Fcitx + Mozc)。完成這些步驟後,你的 Raspberry Pi 將能夠正確顯示和處理日語文本。
pyenv 安裝
這篇備忘錄記錄了 pyenv 的安裝。
pyenv 是一個命令行工具,用於管理多個 Python 版本。它允許你在同一台機器上輕鬆地安裝、切換和管理不同的 Python 環境,而不會相互衝突。
這對於需要使用不同 Python 版本進行開發的項目(例如,一個項目需要 Python 3.8,另一個需要 Python 3.10)非常有用。
1. 安裝 pyenv
安裝 pyenv 的方法因操作系統而異。
A. macOS (使用 Homebrew) - 推薦
在 macOS 上,使用 Homebrew 安裝 pyenv 是最簡單的方法。
brew update
brew install pyenv
B. Linux (使用 pyenv-installer 腳本) - 推薦
對於 Linux 系統,可以使用 pyenv-installer 腳本來自動化安裝 pyenv 及其常用的插件。
curl https://pyenv.run | bash
C. Windows (使用 pyenv-win)
對於 Windows 用戶,官方推薦使用 pyenv-win,它是 pyenv 的一個 Windows 版本。
# 通過 PowerShell 安裝
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" | Invoke-Expression
# 或者通過 pip 安裝 (需要先有 Python 環境)
pip install pyenv-win --target %USERPROFILE%\.pyenv
請參考 pyenv-win 的 GitHub 儲存庫獲取最新安裝說明:https://github.com/pyenv-win/pyenv-win
2. 配置 Shell 環境
安裝 pyenv 後,你需要將其添加到你的 Shell 環境中。這會讓 pyenv 命令在你的終端中可用。
A. Bash
將以下內容添加到你的 ~/.bashrc (或 ~/.bash_profile) 文件中:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)" # 確保 shell 能夠加載 pyenv
eval "$(pyenv virtualenv-init -)" # 如果你計劃使用虛擬環境
完成後,重新載入你的 shell 配置:
source ~/.bashrc
B. Zsh
將以下內容添加到你的 ~/.zshrc 文件中:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
完成後,重新載入你的 shell 配置:
source ~/.zshrc
C. 驗證安裝
打開一個新的終端會話,然後運行:
pyenv --version
如果成功,它會顯示 pyenv 的版本號。
3. 安裝 Python 版本
現在你可以使用 pyenv install 命令來安裝你需要的 Python 版本。
查看可用的 Python 版本
pyenv install --list
這會列出所有可安裝的 Python 版本,包括 CPython、Jython、Anaconda 等。
安裝特定版本
pyenv install 3.9.10 # 安裝 Python 3.9.10
pyenv install 3.10.6 # 安裝 Python 3.10.6
安裝可能需要一些時間,因為它會下載源碼並編譯 Python。
4. 使用 Python 版本
全局設置 Python 版本
設置全局 Python 版本:
pyenv global 3.10.6
這會將 3.10.6 設置為你所有 shell 會話的默認 Python 版本。
局部設置 Python 版本 (專案目錄)
在專案目錄中,你可以設置一個局部 Python 版本。
cd my_project
pyenv local 3.9.10
這會在當前目錄中創建一個 .python-version 文件。當你進入這個目錄時,pyenv 會自動切換到指定的 Python 版本。
查看當前使用的 Python 版本
pyenv versions
當前使用的版本會被標記一個星號 *。
* 3.10.6 (set by /home/user/.pyenv/version)
3.9.10
5. 總結
pyenv 是一個非常實用且強大的工具,用於管理 Python 版本。它提供了一種簡潔而可靠的方式來應對多個 Python 環境的需求,避免了版本衝突,讓你的開發工作流更加順暢。正確安裝和配置 pyenv 是任何嚴肅 Python 開發者的基本技能。

