0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「uv + 中央管理 venv + .venv シンボリックリンク」ワークフロー

Last updated at Posted at 2025-10-31

以下で説明する mkuv()mkvenv() は、uv コマンドを使って 仮想環境をホーム下の共通場所 (~/venvs/<name>) に作成し、プロジェクト内に .venv へのシンボリックリンクを置く ワークフローを自動化する shell 関数です。これにより、以下のメリットがあります。

  • venv を中央管理できる。
  • プロジェクト内にサイズの大きい venv を置かずに済む。
  • プロジェクトを移動した時に venv が壊れる心配がなく、シンボリックリンクを貼り直すだけで良い。

mkuv() のスクリプトとその内容

GREEN='\033[0;32m'
CYAN='\033[0;36m'
NC='\033[0m'

mkuv() {
    if [ -z "$1" ]; then
        echo "Usage: mkuv <project_name>"
        return 1
    fi
    
    local project_name="$1"
    local venv_dir="$HOME/venvs/$project_name"
    local project_dir="./$project_name"
    
    # Check if project directory already exists
    if [ -d "$project_dir" ]; then
        echo "Error: Directory '$project_dir' already exists."
        return 1
    fi
    
    # Check if venv directory already exists
    if [ -d "$venv_dir" ]; then
        echo "Error: venv directory '$venv_dir' already exists."
        return 1
    fi
    
    # Create project (directory is automatically created)
    echo "\nInitializing uv project ..."
    uv init "$project_name"
    
    # Move to project directory
    cd "$project_name"
    
    # Create ~/venvs/ directory if it doesn't exist
    mkdir -p "$HOME/venvs"
    # Create venv
    uv venv "$venv_dir" &>/dev/null || return 1
    echo "\n✓ Venv created at \`${CYAN}$venv_dir${NC}\`"
    # Create symlink
    ln -s "$venv_dir" .venv
    echo "✓ Symlink created: .venv -> $venv_dir"
    echo "  Activate with: ${GREEN}source .venv/bin/activate${NC}"
    
    # Create other common directories
    mkdir -p notebooks

    echo "\n✓ Project \`${CYAN}$(pwd)${NC}\` created successfully!"
}
  1. uv init <project_name> でプロジェクトを初期化
  2. uv venv ~/venvs/<project_name> でホーム下に仮想環境を作成
  3. プロジェクト内に .venv というシンボリックリンクを張る(→ 実際の venv は ~/venvs/<project_name>
  4. その他:notebooks ディレクトリを作成

実行例:

mkuv-example.png

mkvenv() のスクリプトとその内容

mkvenv() {
    if [ -z "$1" ]; then
        echo "Usage: mkvenv <venv_name>"
        return 1
    fi
    
    local venv_name="$1"
    local venv_dir="$HOME/venvs/$venv_name"
    
    if [ -d "$venv_dir" ]; then
        echo "Error: venv: '$venv_dir' already exists."
        return 1
    fi

    # Create ~/venvs/ directory if it doesn't exist
    mkdir -p "$HOME/venvs"
    # Create venv
    uv venv "$venv_dir" &>/dev/null || return 1
    echo "\n✓ Venv created at \`${CYAN}$venv_dir${NC}\`"
    
    # Force create symlink
    ln -sf "$venv_dir" ".venv" || return 1
    echo "✓ Symlink created: .venv -> $venv_dir"
    echo "  Activate with: ${GREEN}source .venv/bin/activate${NC}"
}
  • 既存プロジェクト内で実行し、~/venvs/<venv_name> を作り、プロジェクト内にシンボリックリンクを張ります。

実行例:

mkvenv-example.png

プロジェクトを移動すると .venv のシンボリックリンクが壊れるので、新しくシンボリックリンクを張り直してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?