python3.7 설치 및 2.x 버젼 변경, 오류 대처 & pip 설치 경로 변경

이용욱·2022년 3월 23일
post-thumbnail

pc 환경 : Ubuntu 18.04 melodic

python

1. Python3.7 설치

$ sudo apt-get install -y build-essential
$ sudo apt-get install -y checkinstall
$ sudo apt-get install -y libreadline-gplv2-dev
$ sudo apt-get install -y libncursesw5-dev
$ sudo apt-get install -y libssl-dev
$ sudo apt-get install -y libsqlite3-dev
$ sudo apt-get install -y tk-dev
$ sudo apt-get install -y libgdbm-dev
$ sudo apt-get install -y libc6-dev
$ sudo apt-get install -y libbz2-dev
$ sudo apt-get install -y zlib1g-dev
$ sudo apt-get install -y openssl
$ sudo apt-get install -y libffi-dev
$ sudo apt-get install -y python3-dev
$ sudo apt-get install -y python3-setuptools
$ sudo apt-get install -y wget

그리고 weget으로 python3.7 소스를 받고 설치한다.

$ wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
$ tar xvf Python-3.7.0.tar.xz
$ cd Python-3.7.0
$ ./configure
$ sudo make altinstall

python3.7이 설치되었는지 확인한다.

$ python3.7 --version

Python 3.7.0

2. 파이썬의 실행 위치 및 Alternative 설명

$ python -V
Python 2.7.14
$ which python
/usr/bin/python

ls -al /usr/bin/python로 어떤 파일을 가리키는지 확인할 수 있다. 이 파일이 가리키는 파일은 /usr/bin/python2.7 이다.

$ ls -al /usr/bin/python

lrwxrwxrwx 1 root root 24 4월 18 19:28 /usr/bin/python -> /usr/bin/python2.7
그리고 ls /usr/bin/를 보면 다양한 버전의 파이썬 실행파일들이 있다.

$ ls /usr/bin/ | grep python

python
python2
python2.7
python3
python3.6
.....
PC에는 여러버전의 파이썬이 설치되어있고 Alternative로 주로 사용할 파이썬을 선택하는 방식으로 관리를 하고 있다.

update-alternatives는 다음과 같은 기능을 하여 버전 관리를 쉽게할 수 있다.

현재 /usr/bin/python => /usr/bin/python2.7 를 가리키고 있다.
파이썬3.6로 변경하려면 /usr/bin/python => /usr/bin/python3.6 를 가리키도록 변경해야 한다.
파이썬3.7로 변경하려면 /usr/bin/python => /usr/bin/python3.7 를 가리키도록 변경해야 한다.
update-alternatives에 여러버전의 파이썬을 등록하고 변경하는 것을 하자.

3. Update-alternatives로 파이썬 버전 등록 및 변경

먼저 파이썬을 등록하기 전에 이미 등록된 것이 있는지 확인해야 한다.

update-alternatives --config python 옵션은 python 버전을 변경하는 옵션. 만약 아래 error 로그처럼 설정된 것이 없다고 한다면 아무것도 등록된 것이 없다는 의미.

$ sudo update-alternatives --config python
update-alternatives: error: no alternatives for python

update-alternatives --install [symbolic link path] python [real path] number 명령어는 실행파일을 등록하는 명령어.

아래와 같이 입력하면 2.7과 3.6버전이 update-alternatives에 등록된다. 물론 파이썬 2.7과 3.6이 설치되어 있어야 한다. 만약 설치위치가 다르다면 자신의 PC에 설치된 path로 변경해야 한다.

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

그리고 update-alternatives --config python을 다시 입력하면 등록한 파이썬 버전을 선택하는 메뉴가 나온다.

$ sudo update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.6   2         auto mode
  1            /usr/bin/python2.7   1         manual mode
  2            /usr/bin/python3.6   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 2

원하는 메뉴의 번호를 입력하고 파이썬 버전을 확인해 보자. 파이썬의 link를 따라가보면 alternatives 명령어로 설정한 /usr/bin/python3.6를 가리킨다.

$ python --version
Python 3.6.3

$ ls -al /usr/bin/python
lrwxrwxrwx 1 root root 24  418 19:28 /usr/bin/python -> /etc/alternatives/python

$ ls -al /etc/alternatives/python
lrwxrwxrwx 1 root root 18  92 13:59 /etc/alternatives/python -> /usr/bin/python3.6

❌ 오류

1) /usr/bin/python: bad interpreter: No such file or directory 오류 발생 시

/usr/bin/python: bad interpreter: No such file or directory

아래와 같이 심볼릭 링크를 생성하면 문제를 해결할 수 있다.

$ ln -s /usr/bin/python2.7 /usr/bin/python

python의 기존 경로를 python2.7로 변경한다는 뜻. 마찬가지로 python3의 경로도 이와 똑같은 방식으로 변경 가능하다.

참고 명령어

$ ls -l /usr/bin/py*  //심볼릭 링크 조회
$ rm -f /usr/bin/python2.6 //심볼릭 링크 삭제

pip

pip3 설치

일단은 pip3를 설치한다.

$ sudo apt-get install python3-pip

그리고 업그레이드.

$ sudo pip3 install --upgrade pip

그리고 numpy, scipy, matplotlib 등 원하는 package들을 깔아주면 된다.

$ sudo pip3 install numpy
$ sudo apt-get install python3-scipy
$ sudo apt-get install python3-matplotlib

pip 설치 경로 바꾸기

본인의 컴퓨터에 다양한 파이썬 버전이 존재하면, 각각의 파이썬에 맞는 라이브러리가 설치해야 한다.
하지만 pip 명령어는 기존에 설정된 경로에만(예를 들어, python3.6 혹은 python 2.7) 계속 설치가 되기 때문에 만약 아무리해도 라이브러리가 pip로 3.x 혹은 2.x에 깔린다면, 설치 경로를 바꿔주는 명령어로 설치해야 한다.

$ pip install --target=<python 경로> <패키지명>

예) 필자의 usr은 lyu, 설치 라이브러리는 keras

$ pip install --target=/home/lyu/.local/lib/python2.7/site-packages keras

이 명령어로 기존 python 3.6에서

python 2.7에 keras가 설치 된다.

❌ pip 오류(pip 버전 다운)

$ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==21.0.1', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
  File "/usr/lib/python2.7/site-packages/pip/_internal/cli/main.py", line 60
    sys.stderr.write(f"ERROR: {exc}")
                                   ^
SyntaxError: invalid syntax

혹은

  Traceback (most recent call last):
  File "/home/lyu/example_ws/src/MORAI-RoboticsExample/AD/ros/scripts/main.py", line 11, in <module>
    from network.ros_manager import RosManager
  File "/home/lyu/example_ws/src/MORAI-RoboticsExample/AD/ros/scripts/network/ros_manager.py", line 11, in <module>
    from autonomous_driving.config.config import Config
  File "/home/lyu/example_ws/src/MORAI-RoboticsExample/AD/autonomous_driving/config/config.py", line 6, in <module>
    import pandas as pd
  File "/home/lyu/.local/lib/python2.7/site-packages/pandas/__init__.py", line 13
    missing_dependencies.append(f"{dependency}: {e}")
                                                   ^
SyntaxError: invalid syntax

이렇게 pip가 업그레이드 한 후 SyntaxError가 발생되는데, pip가 python 2.7에서 지원되지 않는 버전으로 업데이트가 되어서 발생된 원인이다. python2.7이 지원되는 마지막 버전으로만 업데이트를 수행한다.

$ curl -O https://bootstrap.pypa.io/2.7/get-pip.py
$ python get-pip.py
$ python -m pip install --upgrade "pip < 21.0"

python2.7이 최종 지원하는 버전은 20.3.4 이다.

결론은

pip 23.3.1 from /home/lyu/.local/lib/python3.7/site-packages/pip (python 3.7)

에서 아래와 같이 버전이 다운된다.

pip 20.3.4 from /home/lyu/.local/lib/python2.7/site-packages/pip (python 2.7)

출처 : https://codechacha.com/ko/change-python-version/
참고 : https://projooni.tistory.com/entry/ubuntu%EC%97%90%EC%84%9C-apt-get%EC%9C%BC%EB%A1%9C-python37-pip-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%AC%EB%B3%BC%EB%A6%AD-%EB%A7%81%ED%81%AC-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

profile
자율주행에 관심이 있으며, Lidar SLAM을 공부하고 있습니다.

0개의 댓글