내 시스템(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
노트:누군가가 여전히 그것을 필요로 하는 경우를 대비해.
내 것이 아니야마지막에 링크
이게 보인다면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
PS는 이 단어에 거의 복사되었습니다.해결책
답변2
이 문제를 해결하려면 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
설치된 패키지를 업데이트합니다. 이 명령을 사용하면 --oldpackage
동일한 버전을 다시 설치하거나 이전 버전을 설치할 수도 있습니다. 이는 다운로드한 버전보다 최신 패키지를 얻었을 수 있기 때문에 가능합니다.)
이것은 필요한 유일한 패키지가 아닐 수도 있습니다. python-*
많은 하위 패키지( python-libs
이것은 명백한 경우이지만 다른 경우도 있을 수 있음)도 포함될 수 있으므로 로 시작하는 모든 패키지를 살펴보는 것이 좋습니다. 다음에서 다운로드할 수 있습니다.같은 장소(경고: 여기에 나열된 카탈로그는 매우 길기 때문에 전체 목록을 가져오는 데 시간이 걸릴 수 있습니다.)
--force
및 와 같은 다른 옵션이 필요할 수 있지만 --nodeps
CetnOS에서 패키지를 다시 설치하고 Python 패키지를 다시 2.7로 덮어쓰는 것이 좋습니다(약간 오래된 버전이더라도 모두 최신 버전은 아닙니다).
일치하는 모든 패키지를 나열하려면 다음을 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 버전을 덮어쓰면 운영 체제가 확실히 중단됩니다.
최신 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 배포판의 시스템 배포 버전과 동시에 설치하려는 대부분의 다른 소프트웨어에도 동일한 조언이 적용됩니다.
답변3
Python을 업그레이드한 후 /bin/yum 및 /usr/libexec/urlgrabber-ext-down을 편집하고 /usr/bin/python을 /usr/bin/python2.7로 변경했는데 yum이 완벽하게 작동했습니다. 물론 향후 Python 업그레이드로 인해 이 문제가 발생할 수 있으므로 수행하는 작업을 문서화하세요.
답변4
가장 깨끗한 해결책은 아마도 A. Rick의 alternatives
작업일 것입니다. 그러나 가장 빠른 해결책은 임시로 심볼릭 링크를 또는를 가리키는 심볼릭 링크로 바꾸는 것 /usr/bin/python
입니다 . 그런 다음 모든 명령을 실행하고 이전 명령으로 다시 전환합니다. 다양한 프로세스와 사용자를 실행하는 서버에 있는 경우 먼저 관리 모드로 전환하는 것이 가장 좋습니다./usr/bin/python3
/usr/bin/python3.6
/usr/bin/python2
/usr/bin/python2.7
yum