가장 먼저 한 일은 venv 가상환경 만들기.
하지만 기존에 있는 파이썬 버전과 다른 파이썬 버전의 가상환경을 만들어야 했다.
(기존 파이썬 버전 3.8.10 / 필요한 파이썬 버전 3.6.11)
하지만 venv 든 virtualenv 든 다른 파이썬 버전의 가상환경을 만들려면 그 버전의 파이썬이 설치되어 있어야 한다.
** 그렇다면 conda 는 왜 자동으로 여러 파이썬 버전에 대해 가상환경을 잘 만들 수 있었나? → 왜냐하면 conda 는 자기가 알아서 그 파이썬을 (만약에 내가 가지고 있지 않다면) 자동으로 깔아주고 그 후에 가상환경을 만들어줘서 그렇다!
파이썬 설치하기
# 소스를 다운 받고 컴파일할 임시디렉토리를 생성
$ mkdir -p /tmp/intall_python3.6
# Python3.6 소스코드 다운로드
$ cd /tmp/intall_python3.6
$ wget <https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz>
$ tar -xvf Python-3.6.3.tgz
# 컴파일
$ cd Python-3.6.3
$ sudo ./configure --enable-optimizations
$ sudo make -j8
$ sudo make install
# test
$ python3 --version
# 작업 완료 후 임시디렉토리 삭제
$ cd /tmp
$ rm -rf install_python3.6/
Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2 _curses _curses_panel
_dbm _gdbm _lzma
_sqlite3 _ssl _tkinter
readline
위의 명령어로 파이썬을 다운받으면 파이썬은 잘 다운받아지지만 위와 같이 몇몇 모듈이 없는 채로 다운받아지게 된다. 없어도 되는 이들도 있지만 _ssl 모듈 (이랑,, lzma?) 은 많이 사용한다고 한다.
특히 ssl 은 뭐였는지 기억은 안나지만 pickle 인가..엄청 당연하게 써야 하는 모듈이었다,,
⇒ 결론은 다시 다운받아야 했다는 것!
configure 와 make
configure
./configure 를 이용하여 make 파일을 생성해주는 과정이다. configure 를 이용하여 소스파일(다운받은 파이썬 파일이라고 추측) 에 대한 환경설정을 해주는 명령어이다.
make
make 는 소스를 컴파일하는 것이다.
💡 컴파일과 빌드는 또 다른 뜻이라고 한다. 컴파일이란 소스코드를 바이너리 코드로 변환하는 과정.
(목적 파일이 생성된다)
빌드는 소스코드 파일을 실행 가능한 소프트웨어 산출물로 만드는 일련의 과정.
** 컴파일은 빌드의 부분 집합.
컴파일이란 소스파일을 사용자가 실행 가능한 파일로 만들어주는 과정을 말한다.
make 과정이 끝나면 설치파일(setup 파일과 같은) 이 생성된 상태이다.
make 에게 어떤 프로그램을 컴파일하고 링크해야 하는지 설명한 것이 make file 이다.
make install
make install 은 make 가 만든 설치파일(setup) 을 가지고 설치하는 과정이다.
build 된 프로그램을 실행할 수 있게 파일을 알맞은 위치에 복사한다.
두 번째 시도
./configure -C --enable-optimizations --with-openssl=/bin --prefix=/bin/python-3.6.11
그래서 위와 같이 openssl 모듈이 어디 있는지 찾은 후에 --with-openssl 옵션에 openssl 폴더의 위치를 박아주면 openssl 을 인식할 수 있다고 한다.
또한 --prefix 라는 옵션은 파이썬을 어디에 깔지 명시해주는 옵션으로,
원래 기존 파이썬 3.8 은 bin 폴더에 있던데 이 옵션 없이 새로 까는 파이썬들은 다른 위치 (어디 있었는지는 안 기록해놧네,,헤헤.. 아마 usr/..) 에 깔려서 저렇게 같은 위치에 깔아주도록 설정했다.
$ python
$ import sys
$ sys.executable # 이걸로 찾았던거 같다.
update-alternatives
파이썬을 위처럼 커스텀 경로를 이용해 깔게 되면 자동으로 python version 이 잡히지 않는다.
기존에 깔려있던 python3 와 중복이 되면 중복 버전 중에서 하나가 실행이 되는데 이때 기존 버전으로 실행되는 것이다.
다른 버전이 실행되도록 바꾸고싶다면 update-alternatives 를 설정해주거나
/usr/bin/ 에 있는 python3 를 python3.6.11(원래 내가 원하던 버전) 을 새로 링크를 걸어주거나
alias 로 python3 가 아니라 python3.6.11 이 실행되도록 해야하는데
그중 가장 정상적인 방법이 update-alternatives 를 신청하는 것이라고 한다.
방법에 대해 알아보자.
symbolic link 란?
링크를 연결하여 원본 파일을 직접 사용하는 효과를 내는 링크이다.
윈도우의 “바로가기” 개념과 비슷하다.
참조 : [Linux] 심볼릭 링크(Symbolic link)
그러니까 alternatives 는 그 링크를 다른 버전으로 바꿔주는 역할을 하는 것이다!
update-alternatives : 우분투 패키지 버전관리
참조 : Ubuntu에서 Python 버전을 변경하는 방법
python3 -V # Python 3.8.10
위는 현재 사용하는 파이썬 버전을 나타내고
which python3 # /usr/bin/python3
그 버전이 어디에 설치되어있는지 알 수 있다.
ls -al /usr/bin/python3 # lrwxrwxrwx 1 root root 9 Mar 13 2020 /usr/bin/python3 -> python3.8
위의 명령어로 /usr/bin/python3 가 어떤 파일을 가리키는지 확인할 수 있다.
/usr/bin/python3 가 가르키는 파일이 주로 사용하는 파이썬 버전이다.
/usr/bin/python3 가 가리키는 파일을 3.6.11 로 변경해야 주로 사용하는 파이썬으로 바꿀 수 있다.
일단 먼저 --config 을 통해 먼저 등록되어있는 것이 있는지 확인해야한다고 한다.
sudo update-alternatives --config python3
update-alternatives: error: no alternatives for python3
위와 같은 에러가 뜨면 미리 설정되어있는 alternatives 가 없다는 뜻! 이제 등록하면 된다.
sudo update-alternatives --install <link> <name> <path> <priority>
위와 같이 특정 패키지의 여러 버전에 대해 alternatives 를 등록할 수 있다.
즉, PC 에 여러 버전의 파이썬이 설치되어있을 때 alternatives 는 주로 사용할 파이썬을 선택하는 방식으로 관리할 수 있다.
💡 <link> : 실행 파일 이름 (ex. /usr/bin/python)
<name> : 패키지 이름 (python)
<path> : alternatives 로 실제 연결할 실행파일 이름으로, 시스템에 설치한 패키지의 실행파일 이름
<priority> : automatic 모드에서 자동으로 선택되는 우선순위. 높은 수가 더 높은 우선순위
나같은 경우에는 아래와 같이 설정하고 메세지가 떴다.
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python-3.6.11 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 2
update-alternatives: using /usr/bin/python-3.6.11 to provide /usr/bin/python3 (python3) in auto mode
update-alternatives: using /usr/bin/python3.8 to provide /usr/bin/python3 (python3) in auto mode
그러고 나서 다시 --config 를 진행하면
$ sudo update-alternatives --config python3
There are 2 choices for the alternative python3 (providing /usr/bin/python3).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.8 2 auto mode
1 /usr/bin/python-3.6.11 1 manual mode
2 /usr/bin/python3.8 2 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python-3.6.11 to provide /usr/bin/python3 (python3) in manual mode
아래와 같이 뜨고 내가 원하는 2 번 을 쓴 뒤 enter 를 누르면 변경이 되는 것이다!
sudo update-alternatives --remove <name> <path>
alternatives 설정을 삭제하고 싶을 때는 위와 같이 사용할 수 있다
'Python 및 Torch 코딩 이모저모' 카테고리의 다른 글
HuggingFace OSError: You are trying to access a gated repo.Make sure to request access at 에러 (0) | 2024.01.24 |
---|---|
Parallelism (0) | 2023.11.07 |
HuggingFace 실습(PEFT) : 2. Train (0) | 2023.10.17 |
HuggingFace 실습(PEFT) : 1. Data (0) | 2023.10.15 |
GGML 개념 정리 (1) | 2023.10.09 |