파이썬 터미널 경로 - paisseon teomineol gyeonglo

기본적인 파이썬 경로는 파이썬 파일의 위치가 아닌 파이썬을 실행하는 터미널의 위치가 현재 위치로 설정된다.
아래의 코드를 사용하여 파이썬이 위치한 경로를 얻고 해당 폴더 내에서 작업하여 다른파일들의 관리를 쉽게한다.

실행 파이썬 파일의 위치

current_path = os.path.dirname(os.path.realpath(__file__))

현재 폴더내의 파일 리스트로 저장

current_path = os.path.dirname(os.path.realpath(__file__))

file_list = os.listdir(current_path)

현재 폴더내의 파일 프린트

current_path = os.path.dirname(os.path.realpath(__file__))

file_list = os.listdir(current_path)

for n in file_list:
    print(n)

달나라 노트

Python/Python Basic

Python Basic : which python (설치된 Python 경로 확인, Python 위치 확인. Python 경로 확인. Python 설치 경로 확인. pycharm interpreter)

CosmosProject 2022. 2. 16. 21:56

Mac terminal에서 아래 명령어를 사용하면 설치된 python의 경로를 알 수 있습니다.

which python


-- Result
/usr/bin/python

-a 옵션을 추가하면 설치된 python들의 경로를 알 수 있습니다.

which -a python


-- Result
/opt/anaconda3/bin/python
/usr/bin/python

근데 한 가지 주의할 것은 위 명령어에서 입력한 python은 python2를 의미합니다.

python3가 설치된 경로를 알고싶으면 아래처럼 하면 됩니다.

which -a python3


-- Result
/opt/anaconda3/bin/python3
/usr/local/bin/python3
/usr/bin/python3
/usr/bin/python --version


-- Result
Python 2.7.18

which로 찾은 python 경로에 --version 옵션을 붙여주면 위 경로에 있는 python 버전을 알려줍니다.

참고로

/usr/bin/python은 Mac에서 기본으로 설치되어있는 Python입니다.

이건 upgrade를 해도 version은 2.7에서 벗어나지 않을겁니다.

그래서 별도로 python을 설치해주는 것이죠.

python test.py
python temporary_python.py

흔히 terminal에서 python을 실행시키려면 위처럼 python 파일이름의 형태로 적는데, 사실 여기서 python이라는 문자의 의미는 python interpreter를 의미합니다.

별도의 경로 없이 위처럼 python 파일이름만 적으면 시스템상의 기본 python interpreter를 사용하여 test.py와 temporary_python.py를 실행하겠다는 것이죠.

/opt/anaconda3/bin/python3 test.py
/usr/bin/python3 temporary_python.py

따라서 위 예시처럼 확인한 python의 경로를 이용해서 어떤 interpreter를 이용해 python 파일을 실행시킬지 정할 수 있습니다.

즉, 위처럼 내가 원하는 버전 또는 내가 원하는 interpeter 경로를 명시해서 특정 interpreter로 python파일을 실행시킬 수 있습니다.

이렇게 terminal에서 python interpreter를 명시해주는 내용은 which python 구문과는 좀 상관없는 이야기일 수 있지만 의외로 굉장히 중요한 내용입니다.

interpreter마다 설치된 경로가 다를 것이고, 각각의 interpreter에 설치된 library의 버전이나 종류도 다를겁니다.

따라서 위 내용을 간과하고있다면 간혹 알수없는 에러가 발생할 수 있습니다.

pandas를 설치해놨는데 pandas library를 찾을 수 없다던지, Pycharm에서는 잘 실행되는데 terminal에서는 syntax error가 발생한다던지 등의 에러이죠.

특히 Pycharm에서는 잘 실행되는데 terminal에서 잘 실행이 안된다면 Pycharm에서 사용하는 python interpreter와 terminal에서 설정된 기본 interpreter가 다르기 때문일 가능성이 큽니다.

이런 경우 Pycharm interpreter경로를 찾아서 그 경로에 있는 python interpreter를 사용해보면 문제가 해결될 수도 있습니다.

아래 내용은 Pycharm에서 interpreter 설치 경로를 알아보고 어떻게 설정하는지를 알아보는 과정입니다.

which 명령어는 기본 python interpreter만을 보여줍니다.

Pycharm같은 프로그램을 사용하다보면 또 다른 경로에 Python interpreter가 설치될 수 있죠.

Pycharm에서 사용되는 Python interpreter의 경로를 알아봅시다.

파이썬 터미널 경로 - paisseon teomineol gyeonglo

먼저 Pycharm -> Preferences를 클릭합니다.

파이썬 터미널 경로 - paisseon teomineol gyeonglo

Python Interpreter 메뉴를 클릭하면 Python interpreter 관련 내용이 나옵니다.

보면 현재 Pycharm project에서 사용되는 Python interpreter가 무엇인지 나오며 위 이미지에서 빨간색으로 표시된 것 처럼 interpreter가 설치된 경로를 알려줍니다.

이처럼 Pycharm이 별도로 설치한 interpreter는 which 명령어가 감지하지 못할 수 있습니다.

따라서 아래처럼 Pycharm에서 사용하는 interpreter의 경로를 이용해서 python 파일을 실행시킬 수 있습니다.

~/Documents/py_int/bin/python test_file.py

이렇게 설치된 Python interpreter의 위치를 잘 골라서 써야 코드에서 error가 발생하지 않습니다.

예를들어 아래와 같이 3개의 python이 설치되어있는데 저는 ~/Documents/py_int/bin/python3를 주로 사용하고 있다고 가정해봅시다.

그러면 모든 코드들이 ~/Documents/py_int/bin/python3 의 interpreter 버전에 맞춰서 작성되어있을겁니다.

여러 모듈들의 디렉토리도 ~/Documents/py_int/bin/python3에서 실행한 것 기준으로 맞춰져있을 것이구요.

/opt/anaconda3/bin/python3
/usr/bin/python3
~/Documents/py_int/bin/python3

그러나 ~/Documents/py_int/bin/python3는 terminal에서 지정된 기본 python interpreter가 아닙니다.

따라서 terminal에서 그냥 아래처럼 입력해서 파일을 실행시키면 에러가 발생할 수 있습니다.

python3 test_file.py

그럴 땐 아래처럼 내가 원하는 python interpreter를 사용하면 에러가 없어질 수 있습니다.

~/Documents/py_int/bin/python test_file.py

파이썬에서 현재경로를 확인하거나 경로를 변경하기 위해서는 os모듈을 import 하여 사용합니다.

■현재 경로 확인 : os.getcwd()함수를 사용하여 현재 경로( 현재 폴더 위치)를 확인합니다.

>>> import os
>>>
>>> path = os.getcwd()
>>> print(path)

#실행결과
C:\Users\ilike\AppData\Local\Programs\Python\Python39

■디렉토리(경로) 변경 방법 : chdir() 함수를 사용합니다. 

현재 경로 위치에서 한단계 내려가는 방법

>>> import os
>>> os.chdir("../")

>>> path = os.getcwd()
>>> print(path)

#실행결과
C:\Users\ilike\AppData\Local\Programs\Python
>>>

■경로(폴더) 위치를 완전히 변경하려면 폴더 개수 만큼 ../를 추가하여 루트 폴더(C:\)까지 내려간 후 변경하고자 하는 폴더를 입력합니다. 혹은 다이렉트로 이동합니다.

>>> import os
>>> os.chdir("../../../../../../../python")
>>> path = os.getcwd()
>>> print(path)
>>>
#실행결과
C:\python
>>>
>>>
>>>os.chdir("C:\python")
>>> path = os.getcwd()
>>> print(path)
>>>
#실행결과
C:\python
>>>

■현재 폴더를의 디렉토리 및 파일 리스트 확인하는 방법 (도스 명령어 dir/w와 유사) : os.listdir() 함수를 사용합니다.

>>> import os
>>> os.listdir()
['script', 'Workspace', '새파일.txt']
 
#변수에 담은후 print문을 사용하여 출력해도 동일한 결과를 얻습니다.
#myfile = os.listdir()
#print(myfile)


#실행결과
['script', 'Workspace', '새파일.txt']
>>>

# script와 Workspace는 디렉토리(폴더) 입니다.

■파일명 제외하고 경로만 가져오는 방법 os.path.dirname()함수를 사용합니다.

>>> os.path.dirname("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")

#실행결과
'C:/Users/ilike/AppData/Local/Programs/Python/Python39'

#\로 접근하면 오류가 발생하였다.
>>>
>>> os.path.dirname("C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe")
  File "<stdin>", line 1
    os.path.dirname("C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe")
                                                                                      ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

■경로(path)제외하고 파일명만 가져오는 방법 : os.path.basename()함수를 사용한다.

>>> os.path.basename("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")
'python.exe'
>>>

■파일인지 확인하는 방법 : isfile() 함수를 사용합니다.

>>> os.path.isfile("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")
True

>>> os.path.isfile("C:/Users/ilike/AppData/Local/Programs/Python/Python39/")
False
>>>

■디렉토리(폴더)인지 체크 하는 방법 : isdir() 함수를 사용합니다. 존재하지 않는 경로를 체크하는 용도로도 활용하면 좋습니다. 디렉토리가 존재하고 맞다면 True를 리턴합니다.

>>> os.path.isdir("C:/Users/ilike/AppData/Local/Programs/Python/Python39/")
True
>>>


>>> os.path.isdir("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")
False
>>>

■파일 경로에서 폴더와 파일명을 분리하는 방법 : os.path.split()함수를 사용합니다.

>>> dir, file = os.path.split("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")
>>> print(dir)
C:/Users/ilike/AppData/Local/Programs/Python/Python39
>>>
>>> print(file)
python.exe
>>>

■파일 또는 디렉토리 경로 존재 유무 확인하는 방법 : os.path.exists()함수를 사용합니다.

>>> #폴더 존재여부 체크
>>> os.path.exists("C:\Python39")
False
>>>
>>>
>>>#파일존재유무 확인
>>> os.path.exists("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")
True
>>>

■파일의 크기를 체크하는 방법 : os.path.getsize()함수를 사용합니다.

>>> os.path.getsize("C:/Users/ilike/AppData/Local/Programs/Python/Python39/python.exe")
100368
>>>

■ 파일 또는 경로를 합치는 방법 : os.path.join()함수를 사용합니다.

>>>
>>> os.path.join("C:/Users/ilike/AppData/Local/Programs","Python")
'C:/Users/ilike/AppData/Local/Programs\\Python'
>>>

■파일명과 확장자를 분리하는 방법 : os.path.splitext()함수를 사용합니다.

>>> name, ext = os.path.splitext("python.exe")
>>> print("파일명:", name)
파일명: python
>>>
>>> print("확장자:", ext)
확장자: .exe
>>>

■파일이름을 변경하는 방법 : os.reanme()함수를 사용합니다. 주의할 점은 반드시 파일경로와 파일명 그리고 확장자 까지 모두 포함해야합니다. 그리고 변경할 대상의 파일명의 경우 경로를 포함하지않고 파일명만 포함하게되면 임의의 폴더에 파일이 저장됩니다.

import os

print('-'*30)
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
print('-'*30)

os.renames("C:/python/test/folder1/newfile.txt", "C:/python/test/folder1/newfile_22222.txt")
#os.renames("C:/python/test/folder1/newfile.txt", "test.txt")

print('-'*30)
file_list = os.listdir("C:/python/test/folder1")
print(file_list)
print('-'*30)



#실행결과
C:\Users\ilike\AppData\Local\Programs\Python\Python39\python.exe C:/python/Workspace/main.py
------------------------------
['newfile.txt', 'sample - 복사본.txt', 'sample.txt']
------------------------------
------------------------------
['newfile_22222.txt', 'sample - 복사본.txt', 'sample.txt']
------------------------------

[REFERENCE]

docs.python.org/3/library/os.html?highlight=os%20rename#os.rename

docs.python.org/3/search.html?q=os.path

pythonstudy.xyz/python/article/507-%ED%8C%8C%EC%9D%BC%EA%B3%BC-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC

[파이썬 더 알아보기]

[프로그래밍/Python] - [Python] 파이썬 기본(기초) 문법 : 예제 및 총정리

[프로그래밍/Python] - [Python] 파이썬 문자열 함수 사용 예제 및 총정리 : split,join,replace,rstrip,lstrip,lower,upper,index,count,len

[프로그래밍/Python] - [Python] 파이썬 list, tuple, dictionary,set 예제 및 총정리

[프로그래밍/Python] - [Python] 파이썬 클래스(class) 와 생성자(__init__) 사용방법 및 예제 총정리

[프로그래밍/Python] - [Python] 파이썬 랜덤 숫자 뽑기 난수 발생(random) 예제 총정리 : randint(), randrange(), uniform(), shuffle(), choice(), choices(), simple()

[프로그래밍/Python] - [Python] 파이썬 파일 생성(txt) 및 읽기 쓰기(I/O) 예제 : open(), close(), write(), with(), readline(), read(), readlines()

[프로그래밍/Python] - [Python] 파이썬 소수점 반올림, 돈 표기 방법 : 천단위 콤마(쉼표) 찍기( 천단위 구분 기호 추가), 숫자 콤마 제거