実行しようとしているスクリプトが1つあります
python3 env/common_config/add_imagepullsecret.py
しかし、次のエラーが発生します。
[root@kevin]# python3 env/common_config/add_imagepullsecret.py
Traceback (most recent call last):
File "env/common_config/add_imagepullsecret.py", line 4, in <module>
import yaml
ImportError: No module named 'yaml'
[root@kevin]# pip3 install pyyaml
Requirement already satisfied: pyyaml in /usr/lib64/python3.4/site-packages
(3.12)
[root@kevin]#
PyYAMLはすでにマシンにインストールされています:
[root@bhimsvm31 k8s]# pip3 install pyyaml
Requirement already satisfied: pyyaml in /usr/lib64/python3.4/site-packages
(3.12)
[root@bhimsvm31 k8s]#
このスクリプトでPyYAMLをインポートするにはどうすればよいですか?
解決策1:python 3.6とln python3をインストールする
export $PYPATH=`which python3`
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
tar -Jxf Python-3.6.5.tar.xz
cd Python-3.6.5/
./configure && make && make altinstall
rm $PYPATH
ln -s `which python3.6` $PYPATH
python3 -m pip install pyyaml
python3 env/common_config/add_imagepullsecret.py
解決策2:virtualenvを使用する
pip3 install virtualenv
virtualenv --python=python3 venv
source venv/bin/activate
pip install pyyaml
python env/common_config/add_imagepullsecret.py
解決策3:pipenvを使用する
私の場合、これはbashスクリプトの「#!/ usr/bin/env python」が原因でした。 PATHの先頭に/Library/Frameworks/Python.framework/Versions/3.8/binがあったとしても、envはv 3.8を見つけられませんでしたが、代わりにPyYAMLのない/ usr/binからv 2.7にデフォルト設定しました。
私の解決策は、python3を明示的に呼び出すようにスクリプトを変更することでしたが、3.8 binディレクトリにシンボリックリンクを配置して、pythonを検出することもできます。
上記の解決策のどれもあなたのために機能しない場合に備えて、これは永久的な修正です。 pyyamlの適切なバージョンをダウンロード 、抽出してインストールします。
例:
wget https://pyyaml.org/download/pyyaml/PyYAML-5.1.tar.gz
tar -xvzf PyYAML-5.1.tar.gz
cd PyYAML-5.1
Sudo setup.py install
注:ない場合は、入手可能な最新バージョンをダウンロードできます特定のバージョンについて確認してください。
開発者が作成するすべてのプロジェクトに対してvirtualenvを作成することが開発者のベストプラクティスです。これは、システムのルート構成から分離された依存関係を維持するのに役立ちます
virtualenvのインストール
cd /*desired*/
mkdir myProject
pip install virtualenv -p python3 . #For python 3
pip install virtualenv -p python2 . #For python 2
pip install pyyaml
pip freeze > requirements.txt
この後、virtualenvにインストールしたすべての依存関係を含むテキストドキュメントが表示されます。
乾杯:)
ここでの問題は、パッケージマネージャによって古いpython3
がインストールされているマシンにpython3
の(新しい)バージョンをダウンロード、コンパイル、およびインストールしたことが原因です。後者にはpip3
が関連付けられており、前者にはありません。これを確認するには、/usr/local/bin/python3 --version
および/usr/bin/python3 --version
を実行します。
そのため、pip3 install pyyaml
を実行すると、古いPython3にPyYAMLパッケージが追加されます。あなたがするとき:
/usr/bin/python3 env/common_config/add_imagepullsecret.py
新しいpython3
のいくつかの機能に依存しない限り、問題はありません。
より構造的なソリューションは 新しいpython3
の場合はpip
をインストールし、それを使用してPyYAMLをインストールします。
より構造的な解決策は、そのような追加のpython3
をパスにインストールしないことです。 /opt/python/3.7.0
で、virtualenv -p /opt/python/3.7.0/bin/python /opt/util/yourutil
を使用し、/opt/util/yourutil/bin/pip3 install package_name
を使用してすべてのパッケージをインストールしてから、次のようにします。
/opt/util/yourutil/bin/python env/common_config/add_imagepullsecret.py
プログラムを実行します。いくつかのサポートスクリプト/関数/エイリアス/リンクを使用すると、これは、システムpython3の「インストールスペース」やPATHを汚染することなく非常に効率的に実行できます。
次のことを試してください。
1。 python-yamlとその依存関係をアンインストールします。
$ Sudo apt-get remove python3-yaml
$ Sudo apt-get remove --auto-remove python3-yaml
構成/データも削除します。
$ Sudo apt-get purge python3-yaml
$ Sudo apt-get purge --auto-remove python3-yaml
Pyyamlをインストールする
$ sudo pip3 install pyyaml
これでうまくいきました。