728x90

혼자 사용하는 서버는 환경 설정을 자유롭게 할 수 있습니다. 자주 사용하는 경로의 지정이나 무언가를 설치했을 때 경로까지 익숙함을 바탕으로 찾아내는데 어려움이 없을 겁니다. 하지만, 서버의 운영체제 버전이 조금 다르다던가 계정 정책의 차이 등으로 패키지가 어디에 설치되었는지 헤메는 경우가 종종 생깁니다.

서버 환경으로 CentOS 를 자주 사용하다보니 패키지 설치는 거의 yum 을 사용합니다. 간혹 커스텀한 구성이 필요하여 직접 빌드하는 경우를 제외하면 관리가 편하기 때문에 yum 을 쓰는 편이죠. 오늘 아침, 자주 안들어가던 서버에서 mtr 패키지가 필요해서 yum 으로 설치했으나 실행이 되지 않는 문제가 있어서 패키지 설치 디렉토리를 찾느라 잠시 헤프닝이 있었습니다. 

// yum 은 패키지는 잘 설치해 주지만, 설치된 위치를 알려주진 않습니다
$ sudo yum install mtr
Loaded plugins: fastestmirror, security
Setting up Install Process
Loading mirror speeds from cached hostfile
 * centos-sclo-rh: mirrors.aliyun.com
 * epel: xxxx.xxxx.xxx
Resolving Dependencies
--> Running transaction check
---> Package mtr.x86_64 2:0.75-5.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================
 Package                 Arch                       Version                            Repository                Size
======================================================================================================================
Installing:
 mtr                     x86_64                     2:0.75-5.el6                       base                      54 k

Transaction Summary
======================================================================================================================
Install       1 Package(s)

Total download size: 54 k
Installed size: 96 k
Is this ok [y/N]: y
Downloading Packages:
mtr-0.75-5.el6.x86_64.rpm                                                                      |  54 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 2:mtr-0.75-5.el6.x86_64                                                                            1/1
  Verifying  : 2:mtr-0.75-5.el6.x86_64                                                                            1/1

Installed:
  mtr.x86_64 2:0.75-5.el6

설치는 잘 되었으나 Shell 환경에 지정된 Path 에 잡혀있지 않은지 실행이 되지 않았습니다. 패키지가 설치된 경로를 찾아야 할 때는 rpm 을 사용하면 좋습니다. rpm 과 grep 으로 패키지가 설치되어 있는지 찾아보거나 rpm 에 옵션을 지정하여 패키지 설치 경로를 확인할 수 있습니다. 

// 설치된 패키지의 이름을 확인
$ rpm -qa | grep mtr
mtr-0.75-5.el6.x86_64

// 설치된 패키지의 경로를 확인
$ rpm -ql mtr
/usr/sbin/mtr

일반적인 설치 경로인데 왜 실행이 안되었을까요? 그건 리눅스의 환경 변수중 명령어를 실행할 수 있는 경로의 집합을 나타내는 $PATH 에 경로가 빠져 있기 때문입니다. 한 번 확인해 보고 누락된 경우 추가를 해보도록 하겠습니다. 매번 전체 경로를 넣고 실행하기는 좀 번거롭겠죠? 실제로는 profile 설정 등에서 추가해 주어야 다음번 로그인시에도 경로가 추가된다는 점 잊지 마시구요.

// 꼴랑 두개 들어가 있네요
$ echo $PATH
/bin:/usr/bin

// 기존 $PATH 값에 콜론으로 연결하여 경로를 지정합니다
// 잘 들어갔는지 절대 알려주지 않으니 echo 로 다시 확인을...
$ PATH=$PATH:/usr/sbin
$ echo $PATH
/bin:/usr/bin:/usr/sbin

 

728x90
728x90

pip 가 참 많은 일을...

 

Python 을 조금씩 좋은 감정으로 알아가고 있는 중입니다. 결실을 맺게 될지는 잘 모르겠지만 오늘도 새롭게 공부한 것들이 있어서 공유해 봅니다. Python 에서 Package 관리를 위해 사용하는 것이 pip 혹은 pip3 입니다. npm 과 같은 Package 관리자라고 생각하니 마음이 편해졌습니다.

 

npm 에서는 프로젝트 루트 경로의 package.json 에 패키지를 기술해두고 npm install 명령으로 패키지를 쉽게 설치할 수 있었는데요, pip 에는 그런 기능이 없나 하고 살펴보니 역시나 제공하고 있었습니다. 당연한 것을 이렇게 하나씩 알아가는 것도 새로운 개발 환경을 익히고 배우는 재미이겠지요.

 

// 패키지의 목록을 출력
$ pip freeze
boto3==1.12.24
botocore==1.15.24

// 패키지의 목록을 requirements.txt 에 저장
$ pip freeze > requirements.txt

 

먼저 pip 의 freeze 를 이용하여 사용중인 패키지를 확인할 수 있습니다. 가상 환경을 적절히 분리해 두지 않았다면 전역으로 설치된 모든 패키지의 목록이 나오는 것처럼 보입니다. 아직 Python 가상환경에 익숙치 않아서... 대충 그렇게 돌아가는 것처럼 보이는 느낌입니다 ㅎㅎ.

 

$ pip install -r requirements.txt

 

requirements.txt 파일은 `패키지명=버전` 혹은 `패키지명` 으로 패키지에 대하여 기술한 목록 파일입니다. NodeJS 에서는 package.json 에 JSON 형태로 모듈명과 버전명을 기술했던 것에 비해 단순합니다. pip install 명령을 -r #패키지목록# 형태로 실행하면 지정되어 있는 패키지의 버전을 찾아 설치하게 됩니다. 참 쉽죠? 

 

 

728x90

+ Recent posts