目次
1. 質問する - Python パッケージを通常のパスにインストールできません
2. 問題を分析します - 通常のサイトパッケージフォルダーは書き込み可能ではありません
2.1 サードパーティ ソフトウェア パッケージのインストール パスを変更する許可 (効率的かつ正確な操作)
2.2 パッケージを現在のユーザーに対してのみ有効に制限する (無効)
2.3 仮想環境の構築と仮想環境へのソフトウェアパッケージのインストール
3. 解決策 - 最初に Python のバージョンを確認し、アクセス許可を正確に変更します。
1. 質問する - Python パッケージを通常のパスにインストールできません
前回以降、setuptoolsのコンパイル警告は解決しました。
パッケージを通常のパスにインストールできないという問題に再び遭遇しました。
pip install を使用して Python パッケージをインストールすると、例外プロンプトが表示されます。内容は次のとおりです。
Defaulting to user installation because normal site-packages is not writeable.
これは単なるエラー メッセージですが、ソフトウェアは正常にインストールできますが、ファイルは一時パスに配置されるため、ROS2 によるソフトウェア パッケージの呼び出しに影響を与える可能性があります。
2. 問題を分析します - 通常のサイトパッケージフォルダーは書き込み可能ではありません
2.1 サードパーティ ソフトウェア パッケージのインストール パスを変更する許可 (効率的かつ正確な操作)
いくつかの記事では、次のように提案しています。 現在の Python 環境ディレクトリ (通常は /usr/local/lib ) を見つけます。その中で対応する Python バージョンを見つけて、その中にある dist-packages フォルダーのアクセス許可を開きます。
では、現在使用している Python のバージョンとディレクトリを確認するにはどうすればよいでしょうか? これについては後で話しましょう。
まず、現在 python3.10 がデフォルトで使用されていることがすでにわかっていると仮定し、次の手順を実行します。
sudo chmod 777 /usr/local/lib/python3.10/dist-packages
これまでのところ、問題が解決した場合、現在の Python バージョンは確かに 3.10 であることを意味します。
失敗した場合は続きを読んでください。
実際、失敗の原因は、Python のパッケージ管理パスが複数の場所にあり、必要なインストール パスを正確に解放する必要があるためです。
ヒント: Python でサードパーティ パッケージをインストールするには、2 つのインストール パスがあります。
システムに付属の Python の場合は、dist-packages ディレクトリが使用されます。
通常、/usr/local/lib/<Python バージョン番号>/dist-packages/;
Python を手動でインストールすると、site-packages ディレクトリが直接使用されます。
通常、/usr/local/lib/<Python バージョン番号>/site-packages/;
臨時通路もございます。(注: これは、この記事の冒頭で説明した一時的なパスです)
~/.local/lib/ <Python バージョン番号> /site-packages
サードパーティライブラリのパスを確認する必要がある状況では、ここに落とし穴がある可能性があります。特定のライブラリが通常のパスに存在する場合でも、インポートが見つからないため、方法を見つけるしかありません。ここで一時ライブラリを指定します。
2.2 パッケージを現在のユーザーに対してのみ有効に制限する (無効)
申し訳ありませんが、うまくいきませんでした。sudo の使用も含めて、機能しませんでした。
pip install --user <package-name>
2.3 仮想環境の構築と仮想環境へのソフトウェアパッケージのインストール
このアイデアは非常に良いですが、前提として、virtualenv などの仮想環境ツールをインストールする必要があります。
virtualenv は、独立した Python 仮想環境を作成するために使用されます。これにより、相互に影響を与えることなく各プロジェクトを他のプロジェクトから分離でき、依存パッケージのバージョン競合の問題を解決できます。
その後、仮想環境ツールをインストールするときに、通常のサイト パッケージは書き込みできないため、ユーザー インストールをデフォルトにするというメッセージが表示されます。この警告を受け入れられる場合は、この方法を使用して問題なく進めることができます。
# 安装virtualenv
sudo pip install virtualenv
# 以默认的python创建虚拟环境,名为new_env
virtualenv new_env
# 当系统中存在多个python版本时,选择指定版本的python创建虚拟环境
virtualenv --python /usr/lib/bin/python3.10 new_env
# 默认情况下虚拟环境不会依赖系统环境的site-packages,
# 如果想依赖系统环境的site-packages,可以使用--system-site-packages来设置。
virtualenv --system-site-packages cms
これを使用すると、比較的独立した Python 環境を作成できますが、使用する前に毎回手動でアクティブ化する必要があります。
# 启动虚拟环境:activate,其中new_env为上一步创建的虚拟环境名称
[...]$ source new_env/bin/activate
(new_env)[...]$
# 退出虚拟环境:deactivate
(new_env)[...]$ deactivate
[...]$
さらに、virtualenvwrapper と呼ばれる virtualenv 拡張ツールもあり、異なる仮想環境間の作成、削除、コピー、切り替えを簡単に行うことができます。インストール方法は次のとおりです。
pip install virtualenvwrapper
virtualenvwrapper の機能もさらに強力で、virtualenv に基づいて、仮想環境を操作するための豊富なコマンドが提供されます。
- 仮想環境を作成します: mkvirtualenv [仮想環境名]
- 仮想環境のリスト: lsvirtualenv
- 仮想環境の切り替え: workon [仮想環境名]
- 現在の環境にどのパッケージがインストールされているかを確認します: lssitepackages
- 現在の環境のディレクトリを入力します: cdvirtualenv [サブディレクトリ名]
- 現在の環境の site-packages ディレクトリを入力します: cdsitepackages [サブディレクトリ名]
- 現在の環境でグローバル サイト パッケージを使用するかどうかを制御します: toggleglobalsitepackages
- 仮想環境のコピー: cpvirtualenv [ソース] [宛先]
- 仮想環境を終了します: 非アクティブ化します
- 仮想環境の削除: rmvirtualenv [仮想環境名]
3. 解決策 - 最初に Python のバージョンを確認し、アクセス許可を正確に変更します。
3 つのスキームを比較すると、実際には、方法が適切であれば、最初のスキームの方が便利です。
全部で2つのステップがあり、プロテストは効果的です。推奨される手順は次のとおりです。
3.1 Pythonのバージョンを問い合わせる
Bash が Python 対話モードに入り、次のように入力します。
import sys
print(sys.path)
当然のことながら、Python パスのリストが返されます。
/usr/local/lib/pythonで始まるパスを見つけます。これは、現在の Python 環境のサードパーティ ソフトウェア パッケージのインストール パスに対応します。
上のスクリーンショットの例では、対応するパスは /usr/local/lib/python3.10/dist-packagesです。
3.2 フォルダーのアクセス許可を変更する
# 请用上一步查询得到的python软件包安装路径
sudo chmod 777 /usr/local/lib/python3.10/dist-packages
これまでのところ、問題は解決しました。次に進みます。
後の言葉
この方法はプロテストに効果的です。
環境が異なると、サードパーティ ソフトウェア パッケージのインストール パスが異なる場合があります。
方法が無効な場合は、現在のPython環境におけるサードパーティ製ソフトウェアのインストールパスを再確認してください。
お役に立てば幸いです。