[CleanCode] 클린코드 이제는 파이썬이다. - 2장

2023. 2. 24. 18:49독서

클린 코드, 이제는 파이썬이다. 알 스웨이가트 지음 | 박재호, 김동현 옮김

 1부 | 준비 


2장 - 환경 설정과 명령행 사용 방법

환경설정이란 코딩 작업이 가능하도록 컴퓨터를 구성하는 과정이다.

환경설정에 대해 잘 알아둬야 추후에 불필요한 시간을 낭비하는 것을 방지할 수 있고, 환경설정으로 인한 오류 사항들을 해결할 수 있기 때문에 시간을 들여서라도 잘 이해해둬야 향후 문제가 재발하는 상황을 막을 수 있다하니.. 잘 짚고 넘어가도록 하자 ~!

 

2.1 파일 시스템

운영체제가 저장하고 검색할 데이터를 구성하는 기반

파일의 주요 속성 : 파일명 + 경로

C:\Users\Document\project.docx

- 경로 : C:\Users\Document
- 파일 : project.docx (project는 파일명, docx는 확장자)

- 폴더 (or 디렉토리) : Users, Document

- 루트 폴더 : C:\ (C 드라이브) > MacOS나 리눅스의 루트 폴더는 /

- USB 와 같은 추가 볼륨 : 윈도우 - D:\E:\ 와 같이 새로운 루트 드라이브, Mac - /Volumes 폴더 아래 새폴더, 리눅스 - /mnt 폴더라애 새폴더

(윈도우& MacOS는 폴더명, 파일명의 대소문자를 구분하지 않고, 리눅스는 구분한다.)

 

2.1.1 파이썬의 경로

윈도우는 폴더와 파일명을 백슬래시(\)로 구분, MasOS와 리눅스는 슬래시(/)로 구분한다.

-> 파이썬에서 여러 플랫폼 사이에서 호환성을 갖추려면 pathlib 모듈과 / 연산자를 사용한다.

1.  import

from pathlib import Path

2. Path() : 해당 폴더 또는 파일명의 Path 객체를 만들 수 있다.

모두 같은 경로를 반환한다.

👉 파일명을 파라미터로 받는 파이썬 표준 라이브러리의 모든 함수에 Path 객체를 전달할 수 있다.

 

2.1.2 홈디렉터리

Path.home()

내 컴퓨터의 홈 디렉터리는 /Users 에 위치한 umin 폴더이다.

- 컴퓨터의 파일을 저장할 수 있는 홈 디렉터리 폴더의 Path 객체를 얻을 수 있다.

- 홈 디렉터리의 위치 : 윈도우 C:\Users, 맥 : /Users, 리눅스 /home

 

2.1.3 현재 작업 디렉터리 Current Working Directory, CWD

Path.cwd() : 현재 작업 디렉터리 가져오기

os.chdir() : 현재 작업 디렉터리 변경 * import os 필요

> 존재하지 않는 디렉터리로 변경하는 경우 에러 발생

 

2.1.4 절대 경로 vs 상대 경로

- 절대 경로 : 루트 폴더에서 시작되는 경로

- 상대 경로 : 현재 작업 디렉터리 기준에서 시작하는 경로

마침표 하나 (.) : 현재 위치한 디렉터리

마침표 두개 (..) : 상위 폴더

 

상대 경로 예시

 

2.2 프로그램과 프로세스

프로그램 : 웹 브라우저, 스프레드 시트 등 응용프로그램

프로세스 : 프로그램의 실행 인스턴스

> 하나의 프로그램은 여러개의 프로세스로 실행된다. 동일한 프로그램을 실행하더라도 프로세스는 서로 독립되어 실행된다.

 

2.2.1. 명령행

CLI(Command Line Interface) 는 텍스트 기반으로 명령어를 입력하여 운영체제와 상호작용할 수 있다.

익숙해져야 한다! - 환경 설정하려면 CLI 를 이용해야하는 경우가 더 많으며, GUI 를 이용하는 것보다 명령어를 입력하는게 훨씬 빠를 수 있다. 스크립트로 만들어 자동화에도 적합한다. 

- 윈도우에서 셸 프로그램은 C:\Windows\System32\cmd.exe 에 있다. (= 명령 프롬포트)

- Mac /bin/bash (카탈리나 이후 버전에서 zsh 을 사용한다.)

- 우분투 리눅스 /bin/bash (bash 사용)

 

2.2.2 기본 명령어

- 명령행 인수 : 명령어 뒤에 입력하는 텍스트 조각들, 명령어에 전달하는 인수

- 명령행 옵션 : 단일 문자 또는 짧은 단어로 이루어진 명령행 인수, 윈도우에서는 슬래시, Mac과 리눅스에서는 대시 또는 이중대시로 시작한다. (맥과 리눅스는 옵션의 대소문자를 구분한다. 옵션이 여러개인 경우는 공백으로 구분한다.)

 

탭 완성 기능 : 폴더 또는 파일명의 처음 몇 개 문자를 입력한 후 탭 키만 누르면 셸이 알아서 나머지 이름을 채워준다. 

탭 완성 기능 : D를 누르고 탭을 누르면 D와 일치하는 폴더명을 보여주고 완성시켜준다.

글로브 패턴

와일드카드 문자인 *?를 사용하여 조건에 맞는 폴더와 파일명 여러개 지정하기.

* 는 개수와 무관하게 문자들을 받아들이며, ? 는 문자 하나만을 받아들인다.

*.py : .py로 끝나는 모든 파일들

hello??.py : hello로 시작하고 아무 문자 2글자가 붙은 .py 파일들

 

기타 명령어 모음 

명령은 비슷하나 윈도우와 Mac,리눅스 명령어가 다른 경우 , 로 구분해서 작성했다.

  • python -c "print('hello world')" : -c 옵션으로 간단한 파이썬 코드 실행
  • history : 명령어 이력 보기
  • cd : 현재 작업 디렉토리 변경
  • dir, ls : 현재 작업 디렉토리에 있는 폴더와 파일 표시
  • dir /s, find : 하위 폴더의 내용 열거
    • dir /s *.py 
    • Mac이나 리눅스에서 find . name "*.py" 명령어를 수행하는 경우
      현재 작업 디렉터리와 하위 디렉터리 내에 있는 파일들 중 *.py 조건에 부합하는 파일을 보여준다.
  • copy, cp : 파일과 폴더 복사
  • move, mv : 파일과 폴더 이동
    • move [원본 파일 또는 폴더] [대상 폴더] 
    • mv [원본 파일 또는 폴더] [대상 폴더] 
  • ren, mv : 파일과 폴더 이름 변경
    • ren [파일 또는 폴더] [새 이름] 
    • mv [파일 또는 폴더] [새 이름]<
  • del, rm : 파일과 폴더 삭제
    • 윈도우 del : 하위 폴더는 그대로 둔 채 해당 폴더의 모든 파일을 삭제한다. 하위 폴더 내 파일을 삭제하려면 del /s /q [폴더]를 실행해야한다.
  • md, mkdir : 폴더 생성
  • rd, rmdir : 폴더 삭제
    • 폴더를 제거하려면 먼저 폴더가 비어있어야 한다. 
    • 비어있지 않은 폴더와 내용을 삭제하려면 윈도우는 rd /s/q [폴더], 맥OS 와 리눅스는 rm -rf [폴더] 를 수행해야한다.
  • where [프로그램], which [프로그램] : 프로그램 위치 검색
  • cls, clear : 터미널 내용 삭제

2.3 환경변수와 PATH

👉 확실하게 이해하고 넘어가야 한다. 개발 시 문제가 발생했을 때,  문제해결의 단서가 될 수 있다.

프로그램의 모든 실행 프로세스에는 문자열을 저장할 수 있는 환경 변수라는 변수 집합이 있다. 

운영체제가 프로그램을 실행할 때, 새로 생성된 프로세스는 운영체제의 환경 변수와 그 값에 대한 독자적인 사본을 받는다.

독립적으로 프로세스마다 환경변수를 변경할 수 있다. → 해당 프로세스에만 적용되며, 다른 프로세스와는 무관하다.

* PATH 도 일종의 환경변수이다.

 

2.3.1 환경 변수 보기

set (윈도우), env(Mac, 리눅스) : 터미널 창에 떠 있는 셸의 환경 변수 목록을 볼 수 있다.

  • echo : 특정 환경변수의 값 보기
    • 현재 사용자의 홈 폴더(HOME 또는 HOMEPATH)의 환경변수 값을 보려면
      윈도우 : echo %HOMEPATH%
      Mac/리눅스 : echo $HOME
    • 어떤 프로세스가 다른 프로세스를 생성하는 경우 자식 프로세스는 부모 프로세스로부터 환경 변수에 대한 독자적인 사본을 받는다. -> 따라서 부모 - 자식 프로세스는 서로 환경변수에 영향을 미치지 않고 환경변수 값을 변경할 수 있다.
    • 사실 대부분의 사용자는 자신의 환경변수 설정을 전혀 건드릴 일이 없다.

2.3.2 PATH 환경변수를 이용한 작업

명령행에서 명령어를 입력하면 1. 현재 있는 폴더에서 해당 이름의 프로그램을 확인하고, 2. PATH 환경변수에 나열된 폴더에서 확인한다.

예를 들어, python.exe라는 프로그램을 실행하기 위해선 해당 exe 파일이 위치한 폴더로 이동한 다음에 명령어를 입력해야 해당 프로그램을 실행시킬 수 있다.

하지만 PATH 환경변수에 폴더값을 추가하면 파일 경로로 이동해야하는 번거로운 작업을 생략할 수 있다.

1. PATH 값 보기

  • 윈도우 명령어 : path (→ 세미콜론(;)으로 폴더 이름을 구분한다.)
  • Mac, 리눅스 : echo $PATH (→ 콜론(:)으로 폴더 이름을 구분한다.)

- 폴더명의 순서가 중요하다. 이름이 같은 파일이 여러 폴더에 존재하는 경우, PATH 환경 변수에서 먼저 등장한 폴더 안의 프로그램이 실행된다.

2. PATH 환경 변수 바꾸기

  • 윈도우 명령어 : path [추가할 경로];%PATH%
    → PATH 환경변수의 앞 부분에 새 폴더와 세미콜론을 추가한다.
  • Mac, 리눅스 : PATH=[추가할 경로]:$PATH
    → PATH 환경변수의 앞 부분에 새 폴더와 콜론을 추가한다.
  • ✅ 이런 방법은 현재 터미널 창에만 적용되며, 이후 이 터미널 창에서 실행되는 모든 프로그램은 새롭게 정의된 PATH의 경로를 따른다. 그러나 새 터미널 창을 열면 이 변경 내용은 반영되지 않는다.
    👉 폴더를 영구적으로 추가하려면 운영체제의 환경 변수 집합을 변경해야 한다.

3. 폴더를 영구적으로 PATH에 추가 : 윈도우 환경

  • 윈도우에는 시스템 변수(모든 사용자에 적용)와 사용자 변수(현재 사용자에만 적용)라는 두가지 환경 변수 집합이 있다. 
    - 시작 메뉴 > 시스템 환경 변수 편집 > 시스템 속성 > 환경 변수 > 사용자 변수 목록 > Path를 선택해 편집을 클릭하여 수정한다.
  • Mac, 리눅스 : .bashrc 파일을 수정해 다음 행을 추가한다. (맥 카탈리나 이후 버전은 .zshrc 을 수정)
    export PATH=/newFolder:$PATH
    👉 모든 터미널 창에 대한 PATH 를 수정할 수 있다.

2.3.3 명령행 쓰지 않고 Mac에서 파이썬 스크립트 실행

책에서는 OS별로 다루지만 난 Mac을 사용하고 있으니까 Mac의 방법만 소개하도록 하겠다.

.py 파일을 두번 클릭하면 파이썬 프로그램이 실행되지 않고 편집기나 IDE 가 열린다. 런처에서 쉽게 실행할 수 있도록 설정하는 방법은 다음과 같다.

  1. .command 파일 확장자를 가진 파일로 파이썬 스크립트를 실행할 셸 스크립트를 만든다.
    #!/usr/bin/env bash
    python3 [파일경로]/파일명.py

    - 이 파일을 홈폴더에 저장한다.
  2. 터미널 창에서 chmod u+x yourScript.command 명령어로 셸 스크립트를 실행가능하도록 권한을 설정한다.
    (chmod : 파일의 권한 변경 명령어, u+x : 사용자(u)에게 실행권한(x)을 추가)
  3. 스포트라이트에서 yourScript.command 를 입력하면 해당 셸 스크립트가 파이썬 스크립트를 실행해준다. 

이번엔 환경변수 설정에 대해 알아봤다.

아예 처음 들어보는 내용이 아니라 자바 설치하거나 할 때 한번쯤 해본 내용들이다. 다시 이렇게 한번 복습해보고 그 행위들이 어떤 의미를 갖는지를 알게 되어서 뜻 깊었다. 또한 기본적인 CLI 명령어들을 쓸 일이 자주 있지는 않지만 한번쯤 정리하고 싶었는데 정리하게 되어서 뿌듯하다.

 

2장이 양이 많아서 정리하는데 한참 걸렸다. 후하후하

그래도 포기하지 말고 공부하자.

-

 

문제가 있는 경우 댓글로 알려주시면 감사하겠습니다.

'독서' 카테고리의 다른 글

[CleanCode] 클린코드 이제는 파이썬이다. - 1장  (1) 2023.02.16