web-dev-qa-db-ja.com

Pythonをアップグレードしましたが、「yum upgrade」を実行できなくなりました

システム(CentOS 7)をPython 3.7にアップグレードしましたが、多くの問題が発生しているようです。特に、yumアップグレードを実行できません...

[myuser@server ~]$ Sudo yum upgrade
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.us-midwest-1.nexcess.net
 * epel: mirror.layeronline.com
 * extras: mirror.us-midwest-1.nexcess.net
 * updates: mirror.us-midwest-1.nexcess.net
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax


Exiting on user cancel

ここで痛みを癒す方法はありますか?

1
Dave

この問題を修正するには、CentOS 7に付属するPython 2.7を再インストールする必要があります。

(再インストールする必要がある理由、およびCentOSなどのディストリビューションでソフトウェアの新しいバージョンを管理する方法については、以下を参照してください。)

RPMから古いPythonを再インストールする

yumは機能しないため、パッケージをダウンロードし、rpmを直接使用して再インストールすることにより、ほとんどの作業を手動で行う必要があります。

たとえば、Python 2.7 RPMここにあります(x86_64上のCentOS 7の場合):

http://mirror.centos.org/centos/7/os/x86_64/Packages/python-2.7.5-76.el7.x86_64.rpm

wgetまたはcurlを使用してフェッチできます。

次に、ディレクトリをパッケージをダウンロードしたディレクトリに変更し、次を使用してインストールします。

$ Sudo rpm -Fvh --oldpackage python-*.rpm

rpm -Fコマンド、-F for "freshen"は、すでにインストールされているパッケージを更新します。--oldpackageを使用すると、同じバージョンを再インストールしたり、古いバージョンをインストールしたりできます。ダウンロードしたバージョンよりも新しいパッケージのアップデートを入手した可能性があるため、可能です。)

多くのサブパッケージ(python-*は明白なケースの1つですが、他にもある可能性があるため、これが必要なパッケージはこれだけではない可能性があります。python-libsで始まるすべてのパッケージを確認することをお勧めします。 )も上書きされた可能性があります。それらは 同じ場所 からダウンロードできます(警告:ここに長いディレクトリリストがあるため、リスト全体を取得するには時間がかかる場合があります)。

--force--nodepsなどの追加オプションが必要になる場合がありますが、パッケージを再インストールしてPythonパッケージを上書きして2.7( CetnOSのわずかに古いバージョンの場合、すべての更新が含まれているわけではありません)。

python-*に一致するすべてのパッケージを一覧表示するには、次を使用できます。

$ rpm -qa 'python-*'

特定のパッケージのファイルが以下で上書きされているかどうかを確認することもできます。

$ rpm -V python-libs

これにより、少なくとも1つの属性が変更されたパッケージ内のファイルが一覧表示されます。 5としてリストされている属性は、ファイルのMD5チェックサムです。つまり、そのファイルの内容が変更されています。

十分なパッケージを復元したら、yumをもう一度実行してみてください。パッケージが再度アップグレードされる可能性があります。

Python 2.7気にしないのになぜ2.7再インストールするのですか?

CentOSやそのアップストリームRHEL(Red Hat Enterprise Linux)などのオペレーティングシステムは、安定性と信頼性のために構築されています。もちろん、パッケージのバージョンが古くなることもありますが、すべてが動作するようにテストされていることを意味します。

ご覧のように、PythonはCentOS/RHELのかなり中心であり、他の多くのパッケージがそれに依存しています。まあ、パッケージ管理ソフトウェアもそうです。したがって、Pythonあなたが見たように、バージョンは確かにOSを壊します。

最新のPythonが同梱されているディストリビューションが必要な場合は、CentOS/RHELは必要ありません。 Fedora(CentOS/RHELに最も近いが6か月ごとにリリースされる)、Arch Linux(ローリングリリース)、または頻繁にリリースされる(通常6か月ごと)、またはローリングリリースディストリビューション(新しいパッケージが常にローリングされる)のいずれかを試してください。 。)

CentOS 7でPython 3.7を取得する方法は?

しかし、CentOSが本当に必要/必要であり(それには多くの正当な理由がある)、Python 3.7(または他のソフトウェアの最新バージョン))が必要な場合は、インストールを検討してください。 OSによって出荷されたバージョンに干渉しない方法で、そのバージョンをそのまま残します。

Python 3.7の特定の例では、/usr/local/opt/python-3.7または同様のディレクトリにインストールします。ユーザーの$PATHを設定して、そのバージョンを選択します= Pythonシステムの前にあります。/usr/bin/pythonシンボリックリンクを微調整しないでください。代わりに、新しいバージョンではpython3を使用してください。

CentOSまたは同様のLinuxディストリビューションでシステムにデプロイされたバージョンと並行してインストールする他のほとんどのソフトウェアにも同じアドバイスを使用できます。

7
filbranden

注:誰かがまだそれを必要とする場合。

最後にMINEリンクではない

これがyum install <package-name>

(base) [root@localhost rstudio]# yum install shiny-server-1.5.9.923-x86_64.rpm 
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax

原因分析yumはデフォルトでpython2をサポートしているため、python3にアップグレードするとエラーが発生します。 python2をビルドしてpython2に入ることができる場合

(base) [root@localhost rstudio]# python2
Python 2.7.5 (default, Jul 13 2018, 13:06:57) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

次に、yumコードpython to pythonを実装するように変更できます。

それを解決しましょう...

vi /usr/bin/yum

1行目の#!/ usr/bin/pythonを#!/ usr/bin/python2に変更します。

#!/usr/bin/python2
import sys
try:
    import yum
except ImportError:
    print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

問題が解決しました!!

追記

インストールされているソフトウェアに関係なく、yumがエラーであることがわかりました。タイプは次のとおりです。

base) [root@localhost ~]# yum install yum-fastestmirror
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.huaweicloud.com
 * updates: mirror.jdcloud.com
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax
  File "/usr/libexec/urlgrabber-ext-down", line 28
    except OSError, e:
                  ^
SyntaxError: invalid syntax

解決

1, enter the edit urlgrabber-ext-down
2, change python to python2
#vi /usr/libexec/urlgrabber-ext-down

#!/usr/bin/python >--Replace with -->#!/usr/bin/python2

追伸 Solution から、ほぼWordにコピーされます

1