こすたろーんエンジニアの試行錯誤部屋

作成物の備忘録を書いていきますー

【完全版】pip installエラーまとめ|subprocess・依存関係・環境・権限の解決方法(Windows対応)

PythonやStable Diffusionの環境構築で、pip install時のエラーに困っていませんか?

  • subprocess-exited-with-error が出る
  • pip installが途中で失敗する
  • インストールが権限エラーで止まる

この記事では、pip installエラーの原因と対処法を原因別に整理し、最短で解決できるようにまとめています。
該当するエラーから詳細記事へ進んでください。
(Windows / Python環境でのトラブルに対応しています)

あなたのエラーはどれ?

  • エラー文に「subprocess」がある → subprocessエラー
  • 「dependency」「conflict」がある → 依存関係エラー
  • 「permission denied」がある → 権限エラー
  • よく分からない → 上から順に確認

エラー早見表(クリックで解決)

※ エラー文に近いものをクリックしてください

subprocess-exited-with-errorの原因と解決方法

原因:依存関係・環境不整合

→ 解決方法はこちら
technoxs-stacker.hatenablog.com

pip installで依存関係エラーが出る原因と対処法

原因:パッケージのバージョン競合

→ 解決方法はこちら
technoxs-stacker.hatenablog.com

pip install失敗(環境・手順系)

原因:インストール手順・仮想環境の問題

→ 解決方法はこちら
technoxs-stacker.hatenablog.com

環境構築・設定ミスによるエラー

原因:Python環境・pip状態の不整合

→ 解決方法はこちら
technoxs-stacker.hatenablog.com

権限エラー・インストール権限問題

原因:書き込み権限不足・実行環境

→ 解決方法はこちら
technoxs-stacker.hatenablog.com

よくある原因と対処法

原因①:依存関係の不整合(最も多い)

よくある症状:

  • subprocess-exited-with-error
  • pip installが途中で止まる

原因:

  • パッケージのバージョン競合
  • requirements.txtの依存崩れ

対処:

pip install --upgrade pip setuptools wheel  

関連:

原因②:環境の問題(Python・pip)

よくある症状:

  • 同じコマンドなのに動かない
  • 特定環境だけエラーになる

原因:

  • Pythonバージョンの違い
  • pipの状態不整合

対処:

  • pipを最新化
  • Python 3.10〜3.11を使用

関連:

原因③:インストール手順・設定ミス

よくある症状:

  • pip installが途中で失敗する
  • 仮想環境でうまく動かない

原因:

  • 仮想環境の不備
  • インストール手順ミス

対処:

  • 仮想環境を作り直す
  • クリーン環境で再インストール

関連:

technoxs-stacker.hatenablog.com

原因④:権限・実行環境の問題

よくある症状:

  • permission denied
  • インストールできない

原因:

  • 管理者権限不足
  • 書き込み権限がない

対処:

pip install --user パッケージ名  

または

  • 管理者権限で実行
  • 仮想環境を使用

関連:

technoxs-stacker.hatenablog.com

エラー別の詳しい解決方法

subprocess-exited-with-error(完全解説)

technoxs-stacker.hatenablog.com

subprocessエラー(別ケース)

technoxs-stacker.hatenablog.com

pip依存関係エラー

technoxs-stacker.hatenablog.com

pip install失敗(環境・手順)

technoxs-stacker.hatenablog.com

環境構築エラー(深い原因)

technoxs-stacker.hatenablog.com

権限エラー

technoxs-stacker.hatenablog.com

よくある検索例

  • pip install エラー Windows
  • pip install できない Python
  • subprocess-exited-with-error 対処

まとめ

  • pipエラーは「依存関係」「環境」「手順」「権限」に分類できる
  • subprocessエラーは依存関係問題の一種であることが多い
  • 原因ごとに切り分けて対処するのが重要

pipエラーやPython環境トラブルについても随時追加していきます。
ブックマークしておくとすぐに確認できます。

JiraをDockerでローカル環境に構築する手順(WSL / PostgreSQL)

本記事では WSL + Dockerを使用してJiraをローカル環境に構築する方法 を解説します。

Jiraはチーム開発で広く利用されている課題管理ツールですが、ローカル環境で検証したいケースも多いと思います。

例えば以下のような用途です。

  • 個人開発のタスク管理
  • Jiraのプラグイン検証
  • 開発環境での動作確認

本記事では Docker Composeを利用してJira + PostgreSQL環境をWSL上に構築する手順 をまとめています。
数分でローカル環境にJiraを構築できるので、ぜひ参考にしてみてください。

スポンサーリンク

目次

この記事でできること

この記事を読むことで以下ができるようになります。
- WSL上にJiraを構築する
- Docker ComposeでJira + PostgreSQL環境を作成する
- ローカル環境でJiraを起動する

Jiraとは

Jiraは Atlassian社が提供する課題管理ツール です。

主に以下の用途で利用されます。

  • ソフトウェア開発のタスク管理
  • バグトラッキング
  • アジャイル開発(スクラム / カンバン)

クラウド版を利用するケースが多いですが、Dockerを使用することでローカル環境でも構築できます。

今回は WSL + Docker環境でJiraをローカル構築する方法 を解説します。

今回構築する構成

今回構築する環境構成は以下です。

WSL2
└ Docker
├ Jira
└ PostgreSQL

Docker Composeを使用して
Jira + PostgreSQLの2コンテナ構成 を作成します。

使用環境

今回の環境は以下です。

- WSL2  
- Docker  
- Docker Compose  
- PostgreSQL  
- Jira Software  

Jiraはメモリを比較的使用するため、WSLのメモリ設定を調整します。

構築手順

1 WSL設定ファイルの変更

Jiraはメモリを多く使用するため、WSLの設定を変更します。

以下のファイルを編集します。

C:\Users\your user name\.wslconfig

設定例

[wsl2]  
memory=6GB  
processors=4  
swap=2GB  
localhostForwarding=true  

設定変更後はWSLを再起動します。

wsl --shutdown  

2 作業ディレクトリ作成

Jira用のディレクトリを作成します。

mkdir -p ~/jira-docker
cd ~/jira-docker  

3 docker-compose.yml作成

以下の内容で docker-compose.yml を作成します。

services:
  postgres:
    image: postgres:15
    container_name: jira-postgres
    environment:
      POSTGRES_DB: jira
      POSTGRES_USER: youruser
      POSTGRES_PASSWORD: yourpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data
    mem_limit: 1g
    restart: unless-stopped

  jira:
    image: atlassian/jira-software:9.12
    container_name: jira
    depends_on:
      - postgres
    ports:
      - "8080:8080"
    environment:
      ATL_JDBC_URL: jdbc:postgresql://postgres:5432/jira
      ATL_JDBC_USER: youruser
      ATL_JDBC_PASSWORD: yourpassword
      ATL_DB_TYPE: postgres72
      JVM_MINIMUM_MEMORY: 1g
      JVM_MAXIMUM_MEMORY: 2g
    volumes:
      - jira_data:/var/atlassian/application-data/jira
    mem_limit: 3g
    restart: unless-stopped

volumes:
  postgres_data:
  jira_data:

この設定では以下のコンテナが起動します。

PostgreSQL(Jiraデータベース)
Jira Software

4 Jiraコンテナ起動

以下のコマンドでJiraを起動します。

docker compose up -d

初回起動は数分かかる場合があります。

5 Jiraへアクセス

ブラウザで以下にアクセスします。

http://localhost:8080  

Jiraの初期セットアップ画面が表示されれば成功です。

よくあるエラー

Jiraが起動しない

原因として多いのは メモリ不足 です。

対策 .wslconfig

memory=8GB

に変更します。

ポート8080が使用されている

他のアプリがポート8080を使用している場合があります。

その場合はdocker-composeを変更します。

"8081:8080"

アクセス

http://localhost:8081  

Jira停止方法

Jiraを停止する場合は以下を実行します。

docker compose down  

データはvolumeに保存されるため、再起動しても保持されます。

スポンサーリンク

まとめ

今回は WSL + Docker環境でJiraをローカル構築する方法 を紹介しました。

Docker Composeを使用することで、Jira環境を簡単に作成できます。

ローカル環境にJiraを構築すると以下のような用途で活用できます。

個人開発のタスク管理

Jiraの検証環境

プラグイン開発

WSL + Dockerを使えば数分で環境構築できるので、ぜひ試してみてください。

【Stable Diffusion】I tried generating a kiss-waiting image of Mizuhara Chizuru from “Rent-A-Girlfriend” using AnyLoraCleanLinearMix_ClearVAE and LoRA.

スポンサーリンク

Previously, I generated images of Mizuhara Chizuru from “Rent-A-Girlfriend.”
This time, I tried generating images of Mizuhara Chizuru waiting for a kiss.

contents

スポンサーリンク

abstract

The model, LoRA, and prompt used to generate the “Kiss-Waiting” image of Mizuhara Chizuru from “Rent-A-Girlfriend.” on Google Colab and Diffusers

1.requirement

Google Colab
Diffusers transformers==4.26.0
model : AnyLoraCleanLinearMix_ClearVAE
LoRA: Mizuhara Chizuru 彼女、お借りします Ichinose Chizuru 水原千鶴 Kanojo, Okarishimasu
LoRA:Incoming kiss
LoRA:Detail Tweaker LoRA

2.result

positive prompt

brown hair, long hair, bangs,brown eyes, medium breasts, BREAK knit sweater, long sleeves, long skirt, Exquisite visuals, high-definition, masterpiece, best quality, BREAK incoming kiss, face focus, close-up, closed eyes

negative prompt

(worst quality, low quality:1.4), monochrome, zombie, (interlocked fingers:1.2), bad-hands-5, mutated hands, liquid fingers

seed=31815177576222

seed=19134324699012

seed=9552924619856

スポンサーリンク

3.refarence

civitai.com civitai.com

【Stable Diffusion】diffusersでVAEのMissing key(s) / Unexpected key(s) in state_dictエラーの原因と対処法(v0.17対応)

スポンサーリンク

Stable Diffusion(diffusers)を使用中に、VAEの読み込み時に以下のエラーが出ていませんか?

Missing key(s) in state_dict:
Unexpected key(s) in state_dict:

この記事では、このエラーの原因と対処法を分かりやすく解説します。


この記事でわかること

  • VAEのstate_dictエラーの原因
  • diffusersのバージョン差分による問題
  • 確実に解決する方法

エラー内容

diffusersをアップデートした際に、以下のエラーが発生します。

Missing key(s) in state_dict:
Unexpected key(s) in state_dict:

原因

このエラーは主に以下が原因です。

① diffusersのバージョン差分

モデル内部のキー名が変更されている

例:

  • v0.16.0
decoder.mid_block.attentions.0.key.bias
  • v0.17.0
decoder.mid_block.attentions.0.to_k.bias

👉 キー名が変更されたため不一致が発生


② VAEモデルとの不整合

古いVAEと新しいdiffusersの組み合わせで発生


③ カスタムモデル使用時

LoRAや独自VAEで特に発生しやすい


対処方法

方法①:キー名を変換する(今回の解決方法)

state_dict["decoder.mid_block.attentions.0.to_k.bias"] = \
    state_dict.pop("decoder.mid_block.attentions.0.key.bias", None)

👉 既存キーを新しいキーに置き換える


方法②:diffusersのバージョンを揃える

pip install diffusers==0.16.0

👉 モデルと同じバージョンに戻す


方法③:対応済みVAEを使う

👉 新しいdiffusersに対応したVAEを使用


Google Colab環境での注意点

  • セッション再起動後にバージョンが変わる
  • キャッシュが残る場合がある

👉 バージョン固定が重要


よくあるハマりポイント

  • エラーが長くて原因が分からない
  • 一部キーだけ違うケース
  • LoRA適用時に発生

関連記事

pip installなど他のエラーもまとめています。 環境構築で詰まった場合はこちらも参考にしてください。

▶ pip installエラーまとめはこちら https://technoxs-stacker.hatenablog.com/entry/2026/04/26/092732


まとめ

  • state_dictエラーは「キー不一致」が原因
  • diffusersのバージョン差分で発生する
  • キー変換 or バージョン統一で解決可能

Stable Diffusion環境ではバージョン差分によるエラーが多いため、依存関係を揃えることが重要です。

スポンサーリンク

【self supervised learning】yoloの自己教師あり学習結果を使って再学習してみた

スポンサーリンク

以前に物体検出タスクにて自己教師あり学習をやってみました

technoxs-stacker.hatenablog.com

今回は自己教師あり学習の結果を使って再学習する流れをやってみました
この記事は備忘録です

目次

スポンサーリンク

この記事でわかること

物体検出タスクのDNNにて自己教師あり学習の結果を使って再学習する際のサンプルコード

1.実行環境

Google Colab
ultralytics
lightly

1.1 モジュールインストール

!pip install -q lightly
!pip install -q ultralytics

2.ソースコード

import copy
import torch
import torchvision
from torch import nn
from lightly.loss import DINOLoss
from lightly.models.modules import DINOProjectionHead
from lightly.models.utils import deactivate_requires_grad, update_momentum
from lightly.transforms.dino_transform import DINOTransform
from lightly.utils.scheduler import cosine_schedule
from tqdm import tqdm
from ultralytics.nn.modules import Conv
import os

class DINO(torch.nn.Module):
    def __init__(self, backbone, input_dim):
        super().__init__()
        self.student_backbone = backbone
        self.student_head = DINOProjectionHead(
            input_dim, 512, 64, 2048, freeze_last_layer=1
        )
        self.teacher_backbone = copy.deepcopy(backbone)
        self.teacher_head = DINOProjectionHead(input_dim, 512, 64, 2048)
        deactivate_requires_grad(self.teacher_backbone)
        deactivate_requires_grad(self.teacher_head)

    def forward(self, x):
        y = self.student_backbone(x).flatten(start_dim=1)
        z = self.student_head(y)
        return z

    def forward_teacher(self, x):
        y = self.teacher_backbone(x).flatten(start_dim=1)
        z = self.teacher_head(y)
        return z

class PoolHead(nn.Module):
  def __init__(self, f: int, i: int, c1: int): # Added type hints for scripting
    super().__init__()
    self.f = f  # receive the outputs from these layers
    self.i = i  # layer number
    self.conv = Conv(c1, 1280, 1, 1, None, 1)
    self.avgpool = nn.AdaptiveAvgPool2d(1)

  def forward(self, x: torch.Tensor) -> torch.Tensor: # Added type hints for scripting
    return self.avgpool(self.conv(x))

def target_transform(t):
    return 0

import configparser
def main(model_name="yolov5n.pt",epochs=10, batch_size=256):
  from ultralytics import YOLO # Moved import inside the function
  model_name="yolov5n.pt"
  GLOBAL_CROP_SIZE = 224
  LOCAL_CROP_SIZE = 96
  backbone_layer_num=12

  # load base model
  yolo = YOLO(model_name)
  print("base model-----------------------------------------------------------------------------")
  print(yolo)
  # Only backbone
  yolo.model.model = yolo.model.model[:backbone_layer_num]  # Keep first n layer
  print("backbone model-----------------------------------------------------------------------------")
  print(yolo)

  dummy = torch.rand(2, 3, GLOBAL_CROP_SIZE, GLOBAL_CROP_SIZE)

  out = yolo.model.model[:-1](dummy) # Run forward pass only using the first n layers-> Upsampleの手前まで実行する-> Upsampleを置き換えるため手前の出力を取得する
  yolo.model.model[-1] = PoolHead(yolo.model.model[-1].f, yolo.model.model[-1].i, out.shape[1])  # Replace nth layer with PoolHead

  out = yolo.model(dummy)
  input_dim = out.flatten(start_dim=1).shape[1]
  input_dim

  backbone = yolo.model.requires_grad_()
  backbone.train()
  model = DINO(backbone, input_dim)

  device = "cuda" if torch.cuda.is_available() else "cpu"
  model.to(device)

  normalize = dict(mean=(0.0,0.0,0.0), std=(1.0,1.0,1.0))  # YOLO uses these values
  transform = DINOTransform(global_crop_size=GLOBAL_CROP_SIZE, local_crop_size=LOCAL_CROP_SIZE, normalize=normalize)

  dataset = torchvision.datasets.VOCDetection(
      "datasets/pascal_voc",
      download=True,
      # download=False,
      transform=transform,
      target_transform=target_transform,
  )

  dataloader = torch.utils.data.DataLoader(
      dataset,
      batch_size=batch_size,
      shuffle=True,
      drop_last=True,
      #num_workers=2,
      num_workers=os.cpu_count(),
      pin_memory=True,
  )

  criterion = DINOLoss(
      output_dim=2048,
      warmup_teacher_temp_epochs=5,
  )
  # move loss to correct device because it also contains parameters
  criterion = criterion.to(device)

  optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

  print("Starting Training")
  for epoch in range(epochs):
      total_loss = 0
      momentum_val = cosine_schedule(epoch, epochs, 0.996, 1)
      # Initialize the progress bar
      pbar = tqdm(dataloader, desc=f"Epoch {epoch+1}/{epochs}", unit="batch")

      for batch in pbar:
          views = batch[0]
          update_momentum(model.student_backbone, model.teacher_backbone, m=momentum_val)
          update_momentum(model.student_head, model.teacher_head, m=momentum_val)
          views = [view.to(device) for view in views]
          global_views = views[:2]
          teacher_out = [model.forward_teacher(view) for view in global_views]
          student_out = [model.forward(view) for view in views]
          loss = criterion(teacher_out, student_out, epoch=epoch)
          total_loss += loss.detach()
          loss.backward()
          # We only cancel gradients of student head.
          model.student_head.cancel_last_layer_gradients(current_epoch=epoch)
          optimizer.step()
          optimizer.zero_grad()

          # Update the progress bar with the current batch loss
          pbar.set_postfix(loss=loss.item())

      avg_loss = total_loss / len(dataloader)
      print(f"Epoch: {epoch + 1}, Loss: {avg_loss:.5f}")

  #Load and save pretrained backbone
  from ultralytics import YOLO
  # Load the same model that was used for pretraining
  yolo = YOLO(model_name)
  # Transfer weights from pretrained model
  yolo.model.load(model.student_backbone)
  # Save the model for later use
  yolo.save("pretrained.pt")

  return 0

3.自己教師あり学習実行

main()

4. 自己教師あり学習の結果を使って再学習

# Clone the YOLOv5 repository
!git clone https://github.com/ultralytics/yolov5

# Navigate to the cloned directory
%cd yolov5
# Install required packages
!pip install -r requirements.txt
!python train.py --data VOC.yaml --cache --epochs 3 --weights "/content/pretrained.pt" --cfg "/content/yolov5/models/yolov5n.yaml"

所感

まだまだ改良の余地ありますが、とりあえず自己教師あり学習から再学習までの流れを構築できました

スポンサーリンク

参考

colab.research.google.com

WSLにzを入れてディレクトリ移動を楽にする

スポンサーリンク

目次

スポンサーリンク

この記事でわかること

WSL上にzを導入する方法

1.モジュールをダウンロード

sudo git clone https://github.com/rupa/z ~/z

2.設定をbachrcへ追記

vim .bashrc
. ~/z/z.sh

スポンサーリンク

3.参考

qiita.com
qiita.com
github.com

所感

Zに慣れると戻れなくなりますね・・・

WSLにpecoを入れて開発環境を快適にする

スポンサーリンク

pecoなるモジュールを使うとターミナル上のコマンド入力が楽になりそうだったので
今回導入してみました
色んな方が便利な設定を記載してくれているので、自分に必要そうなものをWSLの環境に設定しています

N番煎じですが参考になれば嬉しいです★

目次

スポンサーリンク

この記事でわかること

WSL上でpecoを使ってコマンド入力を楽にする方法

1.インストール

以下コマンドでインストール

sudo apt install peco

2.機能追加

検索機能の置き換え

bashrcに追記してcntrk + Rの検索機能を上書きする

vim .bashrc

以下を追記する

function peco_search_history() {
  local l=$(HISTTIMEFORMAT= history | \
        sort -r | sed -E s/^\ *[0-9]\+\ \+// | \
          peco --query "$READLINE_LINE")
    READLINE_LINE="$l"
      READLINE_POINT=${#l}
}
bind -x '"\C-r": peco_search_history'

ディレクトリ移動の機能追加

bashrcに追記してディレクトリ検索機能を追加  

vim .bashrc

以下を追記する

function peco-cd {
  local sw="1"
  while [ "$sw" != "0" ]
   do
        if [ "$sw" = "1" ];then
            local list=$(echo -e "---$PWD\n../\n$( ls -F | grep / )\n---Show hidden directory\n---Show files, $(echo $(ls -F | grep -v / ))\n---HOME DIRECTORY")
        elif [ "$sw" = "2" ];then
            local list=$(echo -e "---$PWD\n$( ls -a -F | grep / | sed 1d )\n---Hide hidden directory\n---Show files, $(echo $(ls -F | grep -v / ))\n---HOME DIRECTORY")
        else
            local list=$(echo -e "---BACK\n$( ls -F | grep -v / )")
        fi
        
        local slct=$(echo -e "$list" | peco )
        
        if [ "$slct" = "---$PWD" ];then
            local sw="0"
        elif [ "$slct" = "---Hide hidden directory" ];then
            local sw="1"
        elif [ "$slct" = "---Show hidden directory" ];then
            local sw="2"
        elif [ "$slct" = "---Show files, $(echo $(ls -F | grep -v / ))" ];then
            local sw=$(($sw+2))
        elif [ "$slct" = "---HOME DIRECTORY" ];then
            cd "$HOME"
        elif [[ "$slct" =~ / ]];then
            cd "$slct"
        elif [ "$slct" = "" ];then
            :
        else
            local sw=$(($sw-2))
        fi
   done
}
alias sd='peco-cd'

※今後追加した機能があれば追記します

スポンサーリンク

3.参考

github.com
takagi.blog

bio-eco-evo.hatenablog.com