Post

ruby/python 套件管理速查

ruby/python 套件管理速查

Ruby vs Python 套件管理完整對照表

🔥 常用指令速查表

Ruby (Jekyll/Rails 專案)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1️⃣ 檢查版本
ruby -v
rvm list

# 2️⃣ 切換版本
rvm use 3.3.0 --ruby-version

# 3️⃣ 設定專案隔離
bundle config set --local path 'vendor/bundle'

# 4️⃣ 安裝套件
bundle install

# 5️⃣ 執行指令
bundle exec jekyll serve
bundle exec rails server

Python (Django/Flask 專案)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 1️⃣ 檢查版本
python --version
pyenv versions

# 2️⃣ 切換版本
pyenv local 3.11.0

# 3️⃣ 建立虛擬環境
python -m venv venv

# 4️⃣ 啟動環境 + 安裝套件
source venv/bin/activate
pip install -r requirements.txt

# 5️⃣ 執行指令
python manage.py runserver
python script.py

# 6️⃣ 離開虛擬環境
deactivate

📊 核心概念對照表

功能RubyPython
語言RubyPython
套件管理器gempip
套件倉庫RubyGems.orgPyPI
依賴管理工具Bundlerpip / Poetry / Pipenv
套件定義檔Gemfilerequirements.txt
鎖定版本檔Gemfile.lockpoetry.lock / Pipfile.lock
版本管理器rbenv / rvmpyenv
虛擬環境Bundler path / gemsetsvenv / virtualenv
執行前綴bundle execsource venv/bin/activate

🔧 詳細對應關係

1. 套件安裝

Ruby

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 全域安裝套件
gem install rails
gem install jekyll

# 查看已安裝的 gems
gem list

# 移除套件
gem uninstall rails

# 專案依賴安裝
bundle install

# 更新套件
bundle update

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 全域安裝套件
pip install django
pip install flask

# 查看已安裝的套件
pip list

# 移除套件
pip uninstall django

# 專案依賴安裝
pip install -r requirements.txt

# 更新套件
pip install --upgrade django

2. 依賴定義檔案

Ruby - Gemfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
source 'https://rubygems.org'

# 指定版本
gem 'rails', '7.0.0'

# 版本範圍
gem 'jekyll', '~> 4.3'        # >= 4.3.0 且 < 5.0.0
gem 'pg', '>= 1.0'            # >= 1.0.0

# 開發環境專用
group :development do
  gem 'pry'
end

# 測試環境專用
group :test do
  gem 'rspec'
end

Python - requirements.txt

# 指定版本
Django==4.2.0

# 版本範圍
Flask>=2.3.0,<3.0.0
requests>=2.28.0

# 最新版本
pytest

Python - pyproject.toml (Poetry)

1
2
3
4
5
6
7
8
[tool.poetry.dependencies]
python = "^3.11"
django = "^4.2"
requests = "^2.28"

[tool.poetry.dev-dependencies]
pytest = "^7.0"
black = "^23.0"

3. 版本管理

Ruby

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安裝 Ruby 版本
rvm install 3.3.0
rbenv install 3.3.0

# 查看已安裝的版本
rvm list
rbenv versions

# 切換全域版本
rvm use 3.3.0 --default
rbenv global 3.3.0

# 切換專案版本(會建立 .ruby-version)
rvm use 3.3.0 --ruby-version
rbenv local 3.3.0

# 查看目前版本
ruby -v

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安裝 Python 版本
pyenv install 3.11.0

# 查看已安裝的版本
pyenv versions

# 切換全域版本
pyenv global 3.11.0

# 切換專案版本(會建立 .python-version)
pyenv local 3.11.0

# 查看目前版本
python --version

4. 專案隔離環境

Ruby - Bundler

1
2
3
4
5
6
7
8
9
10
11
12
13
# 設定套件安裝到專案目錄
bundle config set --local path 'vendor/bundle'

# 安裝依賴
bundle install

# 查看配置
bundle config list

# 執行指令(使用專案的 gems)
bundle exec jekyll serve
bundle exec rails console
bundle exec rake test

Ruby - RVM Gemsets (較少用)

1
2
3
4
5
6
7
8
# 建立並使用 gemset
rvm use 3.3.0@myproject --create

# 列出 gemsets
rvm gemset list

# 刪除 gemset
rvm gemset delete myproject

Python - venv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 建立虛擬環境
python -m venv venv

# 啟動虛擬環境
source venv/bin/activate      # Linux/Mac
venv\Scripts\activate         # Windows

# 安裝套件(會安裝到虛擬環境)
pip install django

# 凍結依賴
pip freeze > requirements.txt

# 離開虛擬環境
deactivate

# 刪除虛擬環境
rm -rf venv

5. 執行指令

Ruby

1
2
3
4
5
6
7
8
# 使用專案的 gems
bundle exec jekyll serve
bundle exec rails server
bundle exec rake db:migrate
bundle exec rspec

# 為什麼需要 bundle exec?
# 確保使用 Gemfile 指定的 gem 版本,而非全域安裝的版本

Python

1
2
3
4
5
6
7
8
9
# 方法 1: 啟動虛擬環境後執行
source venv/bin/activate
python manage.py runserver
python script.py
pytest

# 方法 2: 直接使用虛擬環境的 Python
./venv/bin/python script.py
./venv/bin/pytest

🎯 實際應用範例

Ruby 專案:tofly.org (Jekyll)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 第一次設定
cd tofly.org
rvm use 3.3.0 --ruby-version           # 建立 .ruby-version
bundle config set --local path 'vendor/bundle'
bundle install

# 日常使用
cd tofly.org
bundle exec jekyll serve

# 更新套件
bundle update jekyll

# 新增套件
# 1. 編輯 Gemfile
# 2. bundle install

目錄結構:

1
2
3
4
5
6
7
8
9
10
tofly.org/
├── .ruby-version          # Ruby 版本
├── .bundle/
│   └── config            # Bundler 配置
├── vendor/
│   └── bundle/           # gems 安裝位置(不提交)
├── Gemfile               # 依賴定義
├── Gemfile.lock          # 版本鎖定
├── _config.yml
└── ...

.gitignore:

1
2
vendor/bundle
.bundle

Python 專案:mysite (Django)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 第一次設定
cd mysite
pyenv local 3.11.0                    # 建立 .python-version
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 日常使用
cd mysite
source venv/bin/activate
python manage.py runserver

# 更新套件
pip install --upgrade django
pip freeze > requirements.txt

# 新增套件
pip install requests
pip freeze > requirements.txt

目錄結構:

1
2
3
4
5
6
mysite/
├── .python-version       # Python 版本
├── venv/                 # 虛擬環境(不提交)
├── requirements.txt      # 依賴定義
├── manage.py
└── ...

.gitignore:

1
2
3
venv/
__pycache__/
*.pyc

💡 記憶口訣

Ruby 三步驟

1
2
3
1. rvm use      → 選版本
2. bundle install → 裝套件
3. bundle exec   → 跑程式

Python 三步驟

1
2
3
1. pyenv local             → 選版本
2. source venv/bin/activate → 進環境
3. python                  → 跑程式

概念對應

1
2
3
4
5
6
gem           = pip
Bundler       = venv + pip
Gemfile       = requirements.txt
bundle exec   = source venv/bin/activate
rvm/rbenv     = pyenv
gemsets       = venv

🚨 常見問題

Ruby

Q: 為什麼每次都要 bundle install

  • A: 沒有設定 path,gems 安裝在臨時位置
  • 解決:bundle config set --local path 'vendor/bundle'

Q: 為什麼要用 bundle exec

  • A: 確保使用 Gemfile 指定的版本,避免版本衝突
  • 例外:已安裝 binstubs 可以直接用 ./bin/jekyll

Q: ~> 是什麼意思?

  • A: 悲觀版本鎖定
    • ~> 4.3 = >= 4.3.0< 5.0.0
    • ~> 4.3.1 = >= 4.3.1< 4.4.0

Q: RVM 沒有生效?

  • A: 沒有載入到 shell
    1
    2
    
    echo 'source ~/.rvm/scripts/rvm' >> ~/.bashrc
    source ~/.bashrc
    

Python

Q: 為什麼要用虛擬環境?

  • A: 隔離不同專案的依賴,避免版本衝突

Q: 忘記啟動虛擬環境會怎樣?

  • A: 套件會安裝到系統 Python,可能造成權限問題或版本混亂

Q: pip freeze vs pip list

  • A:
    • pip list: 顯示所有套件
    • pip freeze: 輸出 requirements.txt 格式

Q: 虛擬環境可以移動嗎?

  • A: 不行,路徑是寫死的。要在新位置重新建立

🔗 參考資源

Ruby

Python


📝 快速除錯檢查清單

Ruby 專案無法啟動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 檢查 Ruby 版本
ruby -v
rvm list

# 2. 檢查 Bundler 配置
bundle config list

# 3. 檢查 gems 是否安裝
bundle check

# 4. 重新安裝
bundle install

# 5. 清除快取重裝
rm -rf vendor/bundle .bundle
bundle install

Python 專案無法啟動

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 檢查 Python 版本
python --version
pyenv versions

# 2. 檢查虛擬環境是否啟動
which python  # 應該指向 venv/bin/python

# 3. 檢查套件是否安裝
pip list

# 4. 重新安裝
pip install -r requirements.txt

# 5. 重建虛擬環境
deactivate
rm -rf venv
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

🎓 進階主題

Ruby

Binstubs(不用每次 bundle exec)

1
2
3
bundle install --binstubs
./bin/jekyll serve
./bin/rails console

多個 Ruby 版本切換

1
2
3
4
5
# .ruby-version 檔案
3.3.0

# 進入目錄自動切換
cd tofly.org  # 自動載入 Ruby 3.3.0

Python

Poetry(現代化工具)

1
2
3
4
5
6
7
8
9
10
# 安裝
curl -sSL https://install.python-poetry.org | python3 -

# 初始化專案
poetry init
poetry add django
poetry install

# 執行
poetry run python manage.py runserver

conda(數據科學常用)

1
2
3
4
5
6
7
8
# 建立環境
conda create -n myenv python=3.11

# 啟動環境
conda activate myenv

# 安裝套件
conda install numpy pandas

版本: 1.0 更新日期: 2025-10-25 適用對象: Ruby 和 Python 開發者

This post is licensed under CC BY 4.0 by the author.