2023년

파이썬이 2010년 후반부터 지금까지 정말 많은 사람들에게 사랑받으며 사용되고 있는 언어이다. 파이썬을 배우는 사람들은 pip, conda, forge 등 파이썬 패키지 관리자를 이용해 패키지들을 설치한다. 사람들마다 제각기 겪는 트러블이 있고 이것을 해결하는 방법은 블로그들에 넘쳐나지만, 다들 이런 식이다. ‘이런 오류가 나서, 이 명령어를 입력했더니 됐어요.’ 댓글에도 ‘감사합니다.’ 라는 말밖에 없다. 그런데… 왜요? 묻는 사람은 많이 없다.

아무리 싸구려 글이라도 써 봐야 한다는 말이 있다. 나는 그런 블로그들이 나쁘다고 생각하지 않는다. 심지어 국내의 유명한 모 테크기업의 CTO라는 사람들도 ‘단순 에러 해결이라도 블로그를 써라’ 라고 두둔하고 나선다. 기록이라는 것 자체가 개인적으로도 좋고, 아무리 싸구려 글이라도 누군가는 그것을 필요로 하기 때문이라고 한다. 블로그에 잘못 적힌 부실한 정보들 때문에 날려먹은 시간도 많지만, 그것들이 없으면 처음부터 못생긴 메뉴얼 페이지와 무섭게 생긴 파이썬 공식 홈페이지에 압도당하고 말았을 것이다. 그래서 잘 몰라도 블로그 쓰라는 사람들의 의견에 전반적으로 동의한다.

다만 2021년 작성한 글을 September 24, 2023 재발견하여 업그레이드하는 이유는 다시 이것 때문이다. 동생들이 비슷한 삽질을 하고 있는 것을 보고, 저기서 빨리 벗어나지 못하는 이유가 싸구려 글보다는 약간 더 양질이면서도 공식 문서보다는 조금 가벼운 글이 없기 때문은 아닐까 하는 생각이 들었다. 혼자서 본다는 핑계로 엉망으로 작성한 글을 보기 좋게 다듬고, 잘못되었거나 어색하게 표현된 글들 및 잘못 사용된 노션 기능들을 고쳐 읽기 편하게 하되 당시의 답답함과 문제사항은 그대로 보전해서 싸구려 블로그에 싫증이 난 그때 나 자신에게 보여주고 싶을만한 글로 변신시킨다. 앞서 삽질하던 동생들이 이 글을 읽는다면 이 글을 통해 조금이라도 ‘아, 이래서 사람들이 공식 문서를 보라는 것이구나' 라는 깨달음을 얻기 바라는 마음이다!

들어가며

이제*(2021년 기준)* 파이썬을 다룬지 어느덧 2~3년이 지나간다. 이제는 모르는 것이 하나 나올때마다 그냥 넘어갈 수가 없지 않나 하는 생각이 든다. 특히 회사에서는 자율주행 킥보드에 탑재된 수많은 소프트웨어들을 잘 돌리기 위한 환경 작업에 매진하는 경우가 정말 잦았다. 이슈가 발생할 때마다 하나하나 해보고, 잘 안되면 포맷하고 하는 과정이 반복되어 무기력해지곤 했다.

이것이 정말 ‘린(Lean)’하게 일하는 것인가? 린이라는 틀에 갇혀 오히려 환경 구축 속도가 나지 않는 상황을 보며 우리가 정말 수많은 파이썬 패키지들을 쓰는데 이 패키지들이 어떤 연결 과정을 통해 내가 사용할 수 있게 되는지도 모르는 것은 아닐까, 의구심과 답답함이 커졌다. 내가 가장 쓸 일이 많은 언어인 파이썬, 소스코드에서 불러오는 수많은 패키지와 라이브러리 설치 과정과 관련해서 공부의 필요성을 느꼈다.

pip

파이썬 패키지를 설치할 때 기본적으로 가장 많은 사람들이 시도하는 방법이다.

python3 -m pip install <package>

pip install <package> 는 이미 많이 봐서 익숙할 것이다. python의 옵션 -m은 모듈로써 다음 프로그램 (여기서는 pip) 을 실행한다는 뜻이다(from2:이 글에서 조금 더 자세히 다룬다).

리눅스에서는 내 계정 이름이 A인 경우, $USER의 값은 A, $HOME의 값은 /home/A이다. 내 리눅스 계정명이 deer-agx 라고 했을 때 (여담으로 디어라는 회사에서 자율주행 킥보드를 개발할 때 Jetson Xavier AGX를 개발 컴퓨터로 사용했다. 그래서 계정명이 deer-agx 이다) 환경 변수는 아래와 같다.

환경변수 별명
$USER deer-agx
$HOME /home/deer-agx ~
echo $USER
echo $HOME

<aside> 💡 이 글은 리눅스(Ubuntu 18.04)를 기준으로 하기 때문에 개인의 환경에 따라 다를 수 있다. 하지만 루트 유저가 있고 일반 사용자가 있는 등의 전체적인 시스템, 각 폴더(디렉토리)마다 접근 권한이 유저마다 다르게 주어진다는 점 등은 모든 운영체제의 공통적인 특징이므로 이해에는 지장이 없다.

</aside>

그런데 왜 뜬금없이 환경 변수 이야기를 하는걸까.

pip의 기본 설치 경로는 무려 deer-agx와 같은 일반 사용자 계정이 함부로 접근할 수 없는 폴더인 /usr/local/...이지만, pip install <package>를 실행하는 주체는 $USER 이라는 말을 하기 위해서이다.

[Linux] 리눅스 파일 시스템 구조 / 루트 디렉토리, 홈 디렉토리

운영체제에서 모든 폴더는 적절한 접근 권한이 있는 사용자만 접근할 수 있도록 설계되어 있다.