
pc 환경 : Ubuntu 18.04 melodic
$ 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
$ 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에 여러버전의 파이썬을 등록하고 변경하는 것을 하자.
먼저 파이썬을 등록하기 전에 이미 등록된 것이 있는지 확인해야 한다.
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 4월 18 19:28 /usr/bin/python -> /etc/alternatives/python
$ ls -al /etc/alternatives/python
lrwxrwxrwx 1 root root 18 9월 2 13:59 /etc/alternatives/python -> /usr/bin/python3.6
/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 //심볼릭 링크 삭제
일단은 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 명령어는 기존에 설정된 경로에만(예를 들어, 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
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