Обновил Python, и теперь я не могу запустить "yum upgrade"

Попробуйте это:

$ echo 'global_filter = [ "a|^/dev/sda.$|", "a|^/dev/sdb.$|", "r/.*/"]'|\
sed -E 's/(^global_filter = \[)(.*)(, "r.*$)/\1\3/'

Выход:

global_filter = [, "r/.*/"]
1
13.06.2019, 01:10
3 ответа

Чтобы устранить эту проблему, необходимо переустановить Python 2.7, поставляемый с CentOS 7.

(См. ниже, почему вам следует переустанавливать и как вы должны управлять более новыми версиями программного обеспечения в таком дистрибутиве, как CentOS.)

Переустановка старого Python из RPM

Поскольку yumне работает, вам придется делать большую часть этого вручную, загружая пакеты и переустанавливая их напрямую с помощью rpm.

Например, вы можете найти Python 2.7 RPM здесь (для CentOS 7 на x86 _64):

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для «освежения», обновит уже установленные пакеты.Использование --oldpackageпозволит вам переустановить ту же версию или даже установить более старую версию, что возможно, поскольку вы могли получить более свежие обновления пакетов, чем версия, которую вы загрузили.)

Возможно, это не единственный пакет, который вам понадобится, я предлагаю вам посмотреть все пакеты, начинающиеся с python-*, так как многие подпакеты(python-libs— это один очевидный случай, но могут быть и другие )также мог быть перезаписан. Вы можете загрузить их из того же места(Предупреждение :длинный список каталогов здесь, может потребоваться некоторое время, чтобы получить весь список.)

Вам могут понадобиться дополнительные параметры, такие как --forceи --nodeps, но идея в том, что вам удастся переустановить пакет и перезаписать пакет Python обратно в версию 2.7 (, даже если это немного более старые версии, без все обновления )от CetnOS.

Чтобы вывести список всех пакетов, соответствующих python-*, вы можете использовать:

$ rpm -qa 'python-*'

Вы также можете проверить, были ли файлы из определенного пакета перезаписаны с помощью:

$ rpm -V python-libs

Здесь будут перечислены файлы в пакете, у которых был изменен хотя бы один атрибут. Атрибут, указанный как 5, является контрольной суммой файла MD5, что означает, что содержимое этого файла было изменено.

Как только вы восстановите достаточное количество пакетов, попробуйте запустить yumеще раз, это может закончиться повторным обновлением пакетов.

Зачем переустанавливать Python 2.7, если он мне не нужен?

Операционная система, такая как CentOS и вышестоящая RHEL (Red Hat Enterprise Linux ), создана для обеспечения стабильности и надежности. Конечно, это означает, что иногда версии пакетов будут старыми, но это означает, что все тестируется на совместную работу.

Как вы видели, Python занимает центральное место в CentOS/RHEL, и многие другие пакеты зависят от него. Ну, даже программное обеспечение для управления пакетами. Таким образом, перезапись версии Python наверняка сломает ОС, как вы это видели.

Если вам нужен дистрибутив, который поставляется с последней версией Python, CentOS/RHEL — не то, что вам нужно. Попробуйте Fedora (, наиболее близкую к CentOS/RHEL, но выпускаемую каждые 6 месяцев ), Arch Linux (, скользящие выпуски )или одну из других, выпуски которой происходят часто (каждые 6 месяцев, обычно )или выпускают (дистрибутивы с новыми пакетами, которые постоянно добавляются.)

Как установить Python 3.7 на CentOS 7?

Но если вы действительно хотите/нужна CentOS (и для этого есть много веских причин )и вам нужен Python 3.7 (или более поздняя версия любого другого программного обеспечения ), посмотрите установить его таким образом, чтобы он не мешал версии, поставляемой ОС, оставив эту версию нетронутой.

В конкретном примере Python 3.7 установите его в /usr/local, /opt/python-3.7или аналогичный каталог. Настройте своего пользователя $PATH, чтобы выбрать эту версию Python перед системной. Убедитесь, что вы не настраиваете символическую ссылку /usr/bin/python, вместо этого используйте python3для более новой версии.

Тот же совет можно использовать для большинства других программ, которые вы хотели бы установить параллельно с системной развернутой версией в CentOS или аналогичном дистрибутиве Linux.

7
28.04.2021, 23:32

После обновления python я отредактировал /bin/yum и /usr/libexec/urlgrabber -ext -и изменил /usr/bin/python на /usr/bin/python2.7, и yum работает отлично. Конечно, будущие обновления Python, скорее всего, сломают это, поэтому записывайте свои действия.

0
28.04.2021, 23:32

ПРИМЕЧАНИЕ:На случай, если кому-то это еще понадобится.

Не МОЕссылка в конце

Если это то, что вы видите на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 на python для реализации.

Давайте решим это....

vi /usr/bin/yum

Замените #!/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

6
28.04.2021, 23:32

Теги

Похожие вопросы