PR

【Windows】警告が出て「pip install」できない時の解決方法

OSS開発

この記事では、Windowsで「pip install」 を実行した際に、「WARNING: Failed to write executable – trying to use .deleteme logic」という警告が発生しインストールに失敗する方に向けた解決方法を解説します。

WordPressブロガーの方必見! 外出先でもブログ執筆作業がはかどる、 Ankerの大容量モバイルバッテリー をご紹介します。

どのような時に起きる問題か?

自分が開発したPythonパッケージ「clipcount」をインストールしてみましょう。
pip install clipcountで本来はインストールされる筈です。

PowerShell
> pip install clipcount
Collecting clipcount
  Using cached clipcount-1.0.1-py3-none-any.whl.metadata (7.2 kB)
Requirement already satisfied: pyperclip>=1.8.2 in c:\python312\lib\site-packages (from clipcount) (1.8.2)
Using cached clipcount-1.0.1-py3-none-any.whl (6.3 kB)
Installing collected packages: clipcount
  WARNING: Failed to write executable - trying to use .deleteme logic
ERROR: Could not install packages due to an OSError: [WinError 2] 指定されたファイルが見つかりません。: 'C:\\Python312\\Scripts\\clipcount.exe' -> 'C:\\Python312\\Scripts\\clipcount.exe.deleteme'

上記のように「WARNING: Failed to write executable - trying to use .deleteme logic」という警告が出てインストール出来ませんでした。

「WARNING: Failed to write executable – trying to use .deleteme logic」とは?

このエラーメッセージは、pip installを実行する際に発生する警告です。
一般的に、この警告は、実行可能ファイルの書き込みに関する問題を指しています。

以下の2つのどちらかの方法を取ることで、書き込みの問題は解決します。

  1. 管理者権限でpip installする
  2. ユーザーディレクトリにpip installする

1.管理者権限でpip installする

一番分かりやすいのは管理者権限でインストールすることです。
PowershellではLinuxのようなsudoが使えないため、専用のアプリを立ち上げる必要があります。

管理者権限用のPowershellを立ち上げる

Windowsボタンを押して下記の画面を表示させ、「アプリ、設定、ドキュメントの検索」欄に「powershell」と入力してください。

「Windows Powershell」が表示されるので>をクリックし、「管理者として実行する」をクリックしてください。

すると、下記のような管理者権限用のPowershellが立ち上がります。

もし「Powershell 7」をご利用の方は、同じように「Powershell」と打ち込むと、今度は「Powershell 7(x64)」が表示されるので>をクリックし、「Run as Administrator」をクリックししてください。

下記のような管理者権限のPowershellが立ち上がります。

管理者権限用のPowershellでインストールする

立ち上げたPowershellでインストールします。すると、今度は何の問題もなくインストール出来ました。

PowerShell
> pip install clipcount
Collecting clipcount
  Using cached clipcount-1.0.1-py3-none-any.whl.metadata (7.2 kB)
Requirement already satisfied: pyperclip>=1.8.2 in c:\python312\lib\site-packages (from clipcount) (1.8.2)
Using cached clipcount-1.0.1-py3-none-any.whl (6.3 kB)
Installing collected packages: clipcount
Successfully installed clipcount-1.0.1

pip showでインストール先を確認します。

PowerShell
> pip show clipcount
Name: clipcount
Version: 1.0.1
Summary: Reads the clipboard and outputs the character count.
Home-page: https://github.com/yusu79/clipcount
Author: yusu79
Author-email: oss@yusu79.com
License: MIT License

Copyright (c) 2024 yusu79

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Location: C:\Python312\Lib\site-packages
Requires: pyperclip
Required-by:

Location: C:\Python312\Lib\site-packagesにより、グローバル環境にインストールされていることが分かります。

2.ユーザーディレクトリにpip installする

管理者権限用のPowershellでインストールするのは、グローバル環境にインストールするためです。
つまり、ユーザーディレクトリ以下にインストールするのならば、通常のPowershellでもインストールできます

ユーザーディレクトリへのインストール方法は以下の2つです。

  • --userオプションを使用する
  • scoopでPythonをインストールする

--userオプションを使用する

管理者権限のないユーザーがユーザーディレクトリ以下にインストール方法がpipにはあります。それが--userオプションです。

PowerShell
> pip install --user clipcount
Collecting clipcount
  Using cached clipcount-1.0.1-py3-none-any.whl.metadata (7.2 kB)
Requirement already satisfied: pyperclip>=1.8.2 in c:\python312\lib\site-packages (from clipcount) (1.8.2)
Using cached clipcount-1.0.1-py3-none-any.whl (6.3 kB)
Installing collected packages: clipcount
  WARNING: The script clipcount.exe is installed in 'C:\Users\ユーザー名\AppData\Roaming\Python\Python312\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed clipcount-1.0.1

上記のようにオプションをつけるだけでインストールすることが出来ました。インストール先は「C:\Users\ユーザー名\AppData\Roaming\Python\Python312\Scripts」です。

上記では「 WARNING: The script clipcount.exe is installed in 'C:\Users\ユーザー名\AppData\Roaming\Python\Python312\Scripts' which is not on PATH.」と表示され、「インストール先のPATHが通っていない」旨の新しい警告が出ています。このままではせっかくインストールしたPythonパッケージを実行できないため、上記のインストール先のPATHをProfile.ps1に設定します。
詳しくは、以下の記事をご参照ください。

scoopでPythonをインストールする

もう一つの方法はPythonそのものを「Scoop」でインストールすることです。
scoopとは、Windows 用のコマンドラインインストーラ[1]です。特徴は、自動生成される「C:\Users\ユーザー名\scoop」以下にパッケージをインストールするため、管理者権限を必要としないことです。

まずはscoopをインストールします。下記をコピーしてPowershellで実行してください。

PowerShell
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
> Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

インストールしたscoopでPythonをインストールします。以下のコードを実行してください。

PowerShell
> scoop install main/python

これで「C:\Users\ユーザー名\scoop」以下にPythonがインストールされました。clipcountをインストールしてみましょう。

PowerShell
> pip install clipcount
Collecting clipcount
  Using cached clipcount-1.0.1-py3-none-any.whl.metadata (7.2 kB)
Collecting pyperclip>=1.8.2 (from clipcount)
  Using cached pyperclip-1.8.2-py3-none-any.whl
Using cached clipcount-1.0.1-py3-none-any.whl (6.3 kB)
Installing collected packages: pyperclip, clipcount
Successfully installed clipcount-1.0.1 pyperclip-1.8.2

インストールできました。パッケージの場所を確認します。

PowerShell
> pip show clipcount
Name: clipcount
Version: 1.0.1
Summary: Reads the clipboard and outputs the character count.
Home-page: https://github.com/yusu79/clipcount
Author: yusu79
Author-email: oss@yusu79.com
License: MIT License

Copyright (c) 2024 yusu79

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Location: C:\Users\ユーザー名\scoop\apps\python\current\Lib\site-packages
Requires: pyperclip
Required-by:

Location: C:\Users\ユーザー名\scoop\apps\python\current\Lib\site-packagesにより、clipcountはユーザーディレクトリ以下にインストールされていることが分かりました。

Python以外のパッケージを検索したい方は以下をご参照ください。

https://scoop.sh
A command-line installer for Windows

まとめ

この記事では、Windowsで「pip install」 をした際に「WARNING: Failed to write executable - trying to use .deleteme logic」という警告が出てインストール出来ない時の解決方法を解説しました。

解決方法は大きく「管理者権限でグローバル環境にインストールする」「管理者権限無しでユーザーディレクトリ以下にインストールする」の2つの方法があります。

大きな違いはグローバル環境に影響があるかどうかです。ユーザーディレクトリ以下にインストールする場合は、「--userオプションを使う方法」と「scoopで管理する方法」の二種類がありますが、これはどちらも大した違いはありません。

皆さんの問題解決の一助になれば幸いです。

参考サイト


  1. scoop – windows [ともやん・どっと・ねっと] ↩︎

タイトルとURLをコピーしました