파이썬 디펜던시 에러를 해결하기

작성자 김민태 수정일 2022-11-22 15:08

#스파클링소다3.0, #스파클링소다3, #스파클링소다, #SparklingSoDA, #SparklingSoDA3

아티클 관련 제품: SparklingSoDA

들어가며

  • NEXUS Repository에 있는 Python 패키지들만으로는 원하는 패키지의 Dependency를 해결하기 힘들 수 있습니다.
  • 이런 경우 특정 파이썬 디펜던시 에러를 쉽게 해결 할 수 있는 방법을 알아봅니다.



내용

✓ Python 디펜던시 에러를 해결하기 위해 인터넷이 가능한 외부 환경에서 패키지 다운로드가 가능해야 합니다.

✖︎ 접속이 필요한 Mirror Site : https://pypi.org/

(↑ pypi.org 접속시 첫 페이지 화면)





1. 독립 된 Python 버전의 가상환경을 만들기


CentOS 및 Redhat의 경우 기본적으로 Python2가 설치 되어 있으므로 Python3버전 대를 설치합니다.
yum install -y python3


만약 생성 및 사용하고자 하는 Python의 버전이 여러개일 경우 모두 다운로드 후 설치 합니다.
아래의 명령어를 입력하여 Python3.X 파일을 c make하기 위한 패키지들을 설치합니다.
yum install gcc openssl-devel bzip2-devel libffi-devel wget



Python 공식 홈페이지에서 다운받을 버전들을 wget으로 설치을 받아옵니다.

    URL : https://www.python.org/downloads/



원하는 Python 버전의 Download 버튼을 클릭 한 뒤 링크 주소를 복사합니다.

✓ 빨간 네모의 링크를 오른쪽 클릭하여 링크 주소를 복사합니다.




적당한 디렉토리에 wget으로 해당 링크 주소를 터미널로 다운로드 받습니다.


wget https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz

※ 설치 예시는 3.7.13으로 진행합니다.



다운받은 Python버전.tgz 파일을 압축을 풀고 설치를 진행합니다.


tar zxvf Python-3.7.13.tgz
cd Python-3.7.13
./configure --enable-optimizations
sudo make altinstall




✖︎ 설치를 원하는 Python 버전을 위와 같은 방법을 반복하여 모두 설치합니다.





설치가 완료되면 /usr/local/bin/ 경로 하위에 Python 버전별로 디렉토리가 생성되어있을 것 입니다.


ls /usr/local/bin/ | grep python3
python3.10
python3.10-config
python3.5
python3.5m
python3.5m-config
python3.6
python3.6m
python3.6m-config
python3.7
python3.7m
python3.7m-config
python3.8
python3.8-config
python3.9
python3.9-config





설치가 완료되면 아래의 명령어를 사용하여 VirtualEnv 패키지를 설치합니다.
python3 -m pip install --user virtualenv



virtualenv를 사용하기 위해 venv라는 작업공간을 생성해봅니다.


virtualenv venv
ls | grep venv
venv


별도로 Python 3.7 버전의 venv 작업 공간을 생성하는 방법은 아래와 같습니다.


virtualenv venv --python=python3.7
created virtual environment CPython3.7.13.final.0-64 in 853ms
  creator CPython3Posix(dest=/root/venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    added seed packages: pip==22.3.1, setuptools==65.5.1, wheel==0.38.4
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator




생성 된 venv 작업 환경을 activate 합니다.


source venv/bin/activate



cli 앞에 (venv)가 붙으며 Python  activate 상태가 될 것 입니다. 버전을 확인해봅니다.


(venv) python -V
Python 3.7.13



작업이 끝난 뒤 virtualenv를 비활성화 하려면 deactivate를 입력합니다.


deactivate


작업 환경이 헷갈리지 않게 하려면 생성하는 작업환경 이름을 버전으로 지정하면 편리합니다.
virtualenv python3.8 --python=python3.8
created virtual environment CPython3.8.15.final.0-64 in 532ms
  creator CPython3Posix(dest=/root/python3.8, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    added seed packages: pip==22.3.1, setuptools==65.5.1, wheel==0.38.4
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
ls | grep python3.8
python3.8


위 작업에 이어 3.8 버전의 Python 버전을 활성화 하려면 activate 명령어로 venv 활성화가 가능합니다.
source python3.8/bin/activate


(python3.8) python -V
Python 3.8.15




이제 특정 Python 버전에서 디펜던시 패키지 에러를 해결 하고자 하는 Python 패키지를 다운로드 해봅니다.

다운로드 할 패키지들이 저장 될 디렉토리를 생성한 후 이동합니다.


mkdir packages_download
cd packages_download








패키지를 download 합니다. (✖︎ 예시는 pandas로 진행합니다.)


(python3.8)  pip download pandas
Collecting pandas
  Downloading pandas-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2/12.2 MB 53.4 MB/s eta 0:00:00
Collecting pytz>=2020.1
  Downloading pytz-2022.6-py2.py3-none-any.whl (498 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 498.1/498.1 kB 60.3 MB/s eta 0:00:00
Collecting python-dateutil>=2.8.1
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 35.6 MB/s eta 0:00:00
Collecting numpy>=1.20.3
  Using cached numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.1 MB)
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Saved ./pandas-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./python_dateutil-2.8.2-py2.py3-none-any.whl
Saved ./pytz-2022.6-py2.py3-none-any.whl
Saved ./six-1.16.0-py2.py3-none-any.whl
Successfully downloaded pandas numpy python-dateutil pytz six
(python3.8) [root@tyme dependency]# ls -alh
total 29M


현재 디렉토리에 관련 디펜던시들이 모두 다운로드 되어 있을 것 입니다.


ls -al
total 29344
drwxr-xr-x.  2 root root     4096 Nov 21 21:35 .
dr-xr-x---. 15 root root     4096 Nov 21 21:35 ..
-rw-r--r--.  1 root root 17091210 Nov 21 21:35 numpy-1.23.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-rw-r--r--.  1 root root 12182672 Nov 21 21:35 pandas-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
-rw-r--r--.  1 root root   247702 Nov 21 21:35 python_dateutil-2.8.2-py2.py3-none-any.whl
-rw-r--r--.  1 root root   498053 Nov 21 21:35 pytz-2022.6-py2.py3-none-any.whl
-rw-r--r--.  1 root root    11053 Nov 21 21:35 six-1.16.0-py2.py3-none-any.whl


위의 다운로드 된 파일을 모두 NEXUS Repository에 업로드하면 디펜던시 에러가 해결 됩니다.

✓ 이미 NEXUS에 존재하는 파일은 업로드 대기열이 생략되기 때문에 모든 파일을 일괄 업로드하여도 상관없습니다.



✖︎ 항상 사용이 끝난 virtualvenv는  비활성화 deactive 합니다

deactivate




마무리

  • 위와 같은 가이드로 특정 Python 버전 별로 독립 된 환경을 만들고 패키지 디펜던시들을 쉽고 편하게 해결 할 수 있습니다. 

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300