web-dev-qa-db-ja.com

ImportError:「yaml」という名前のモジュールはありません

実行しようとしているスクリプトが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をインポートするにはどうすればよいですか?

15
Neeraj

解決策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を使用する

https://docs.pipenv.org/

2
Waket Zheng

私の場合、これは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を検出することもできます。

1
Michael Croft

上記の解決策のどれもあなたのために機能しない場合に備えて、これは永久的な修正です。 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

注:ない場合は、入手可能な最新バージョンをダウンロードできます特定のバージョンについて確認してください。

0
Shravan40

開発者が作成するすべてのプロジェクトに対して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にインストールしたすべての依存関係を含むテキストドキュメントが表示されます。

乾杯:)

0
Vivek

ここでの問題は、パッケージマネージャによって古い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を汚染することなく非常に効率的に実行できます。

0
Anthon

次のことを試してください。
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
  1. Pyyamlをインストールする

    $ sudo pip3 install pyyaml

これでうまくいきました。

0
chitresh