mac에서 brew install python@3.6 등의 명령으로 여러버전의 python을 설치할 수 있으나, 과거 버전은 지원하지 않는다.

이때 pyenv를 통해서 여러버전의 python을 동시에 운용할 수 있다.

먼저 brew install pyenv를 통해서 pyenv를 설치한다음

pyenv install 3.6 등의 명령어를 통해 필요한 버전을 설치하면 된다.

해당 버전으로 전환하기 위해서는 먼저 .zshrc또는 .bashrc파일에 다음 내용을 추가해야한다.

(참고로 macOS의 경우 요즘엔 zsh이 기본이다)

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

그다음 source ~/.zshrc 또는 source ~/.bashrc로 적용하고

 

pyenv global 3.6 등의 명령어를 통해 버전을 전환하면 된다.

global은 시스템 전체에서 기본적으로 사용할 Python 버전을 설정하라는 명령어이다.

local을 대신 쓰면  그 프로젝트의 디렉터리 내에서만 사용할 Python 버전을 따로 설정할 수 있다.

pyenv versions 를 통해서 현재 시스템에 설치된 버전들을 볼 수도 있다.

pyenv global system을 하면 원래 시스템의 python으로 돌아갈 수도 있다.

 

virtualenv와의 관계

pyenv
역할: pyenv는 여러 버전의 Python을 설치하고 관리하는 데 사용됩니다. pyenv를 사용하면 시스템 전체에 걸쳐 여러 Python 버전을 설치하고, 각각을 필요에 따라 선택하여 사용할 수 있습니다. 이를 통해 서로 다른 프로젝트에서 다른 Python 버전을 쉽게 사용할 수 있습니다.

activate 명령어: pyenv는 환경을 활성화하기 위해 activate 명령어를 직접 사용하지 않습니다. 대신, pyenv local, pyenv global, pyenv shell 같은 명령어를 통해 Python 버전을 설정합니다. 이러한 설정을 통해 특정 디렉터리나 세션에서 사용할 Python 버전을 자동으로 활성화하게 됩니다.

많은 사용자들은 pyenv 를 사용하여 여러 Python 버전을 관리하고,
virtualenv (또는 pyenv 의 플러그인인 pyenv-virtualenv )를 사용하여 특정 버전에 대한 독립적인 개발 환경을 생성합니다. 이렇게 하면 Python 버전 관리와 프로젝트 의존성 관리를 모두 효과적으로 할 수 있습니다.

 

반응형

'Programming > Python' 카테고리의 다른 글

venv  (0) 2023.12.17
mypy / pytype  (1) 2023.10.07
python 스트링 인코딩 핸들링  (0) 2021.11.30
Python GUI Programming(Tkinter)  (0) 2021.01.02
파이선환경 그리고 requirements.txt  (0) 2020.09.20

 

venv는 virtualenv와 비슷하며 특징을 정리하면 다음과 같음

 

venv

  • venv는 python개발진에 의해 개발되었으며, python3.3부터 등장과 동시에 표준라이브러리로 공식 지원됨.
  • 공식 지원되므로 별도의 설치과정이 필요 없음

 

virtualenv

  • virtualenv는 python 2버전 시절 부터 널리 사용되었으며, 따라서 지금도 python2버전을 지원함
  • virtualenv가 표준으로 채택되지 않은 이유는 더 간단하고 일관된 환경을 만들기 위한 판단이었던것으로 보임
  • virtualenv는 venv보다 더 많은 기능을 제공. 예를 들어, 특정 버전의 Python을 지정하여 가상 환경을 생성할 수 있음
  •  Python 표준 라이브러리에 포함되어 있지 않기 때문에 별도로 설치해야 함
반응형

'Programming > Python' 카테고리의 다른 글

pyenv를 통한 python버전 변경  (0) 2023.12.17
mypy / pytype  (1) 2023.10.07
python 스트링 인코딩 핸들링  (0) 2021.11.30
Python GUI Programming(Tkinter)  (0) 2021.01.02
파이선환경 그리고 requirements.txt  (0) 2020.09.20

Mypy

Mypy는 Python 코드에 대해 정적 타입 검사를 수행하는 도구입니다.

이는 TypeScript의 컴파일러와 유사한 역할을 수행하며, 코드에서 타입 오류를 찾아내는 데 도움이 됩니다​.

 

예제:
먼저 mypy를 설치합니다:

pip install mypy


다음은 mypy를 사용한 Python 코드 예제입니다:(name에 대해 str이라는 어노테이션을 했음에 주목. python 3.5기능)

# 파일명: example.py

def greeting(name: str) -> str:
    return "Hello, " + name

age: int = "25"  # 이 줄은 타입 오류를 발생시킵니다.

print(greeting("Alice"))


터미널에서 mypy를 사용하여 코드를 검사합니다:

mypy example.py

이 명령을 실행하면, mypy는 age: int = "25"라인에서 타입 오류를 발견하고 이를 알려줍니다.

 


Pytype:

Pytype은 또 다른 Python 정적 타입 검사 도구.

어노테이션이 없어도 추론을 기반으로 동작함.

 

예를들어 아래와 같이 어노테이션이 없는 코드에 대해서 pytype을 수행하면

def multiply_numbers(a, b):
    return a * b

result = multiply_numbers(5, '3')
print(result)

아래처럼 런타임전 경고를 확인할 수 있음(런타임에서는  Python은 문자열 '3'을 5번 반복하여 '33333'을 생성하고 오류로 판단하지 않음)

$ pytype example.py
Computing dependencies
Analyzing 1 sources with 0 local dependencies
ninja: Entering directory `/Users/user/.pytype'
[1/1] check example
FAILED: /Users/user/.pytype/pyi/example.pyi 
pytype-single --imports_info /Users/user/.pytype/imports/example.imports --module-name example -V 3.8 -o /Users/user/.pytype/pyi/example.pyi --analyze-annotated --nofail --quick /Users/user/example.py
File "/Users/user/example.py", line 4, in <module>: unsupported operand type(s) for *: 'int' and 'str' [unsupported-operands]
  Function multiply_numbers was called with the wrong arguments (1:15)

For more details, see https://google.github.io/pytype/errors.html#unsupported-operands.
ninja: build stopped: subcommand failed.

 

Mypy vs Pytype

Mypy

Mypy는 Dropbox에서 개발되었으며, Python의 첫 번째 정적 타입 검사 시스템으로 간주됩니다.

이 도구는 2012년부터 개발이 시작되었으며, 아직도 활발하게 개발이 진행되고 있습니다​.
Mypy는 standalone으로 실행되거나, 커맨드 라인이나 편집기 또는 IDE의 linter 통합의 일부로 작동할 수 있습니다.
Mypy는 타입 어노테이션을 포함하지 않은 코드에 대해 대부분의 코드 검사를 수행하지 않으며, 이는 점진적으로 코드 기반을 주석 처리하고 있는 경우 Mypy가 시간을 낭비하지 않도록 하기 위함입니다.


Pytype

Pytype는 Google에서 개발되었으며, Mypy와 달리 타입 설명자 대신 추론을 사용합니다. 즉, Pytype는 코드 흐름을 분석하여 타입을 결정하려고 시도하며, 타입 어노테이션에 엄격하게 의존하지 않습니다​1.
Pytype는 가능한 한 관대하게 행동하며, 런타임에서 작동하고 어떤 어노테이션도 모순되지 않는 연산이 있으면 Pytype는 그것에 대해 불평하지 않습니다.
pytype의 reveal_type(expr)을 사용해서 런타임 전에 type()과 비슷한 기능을 활용하여 디버깅/개발 가능

 

 

반응형

'Programming > Python' 카테고리의 다른 글

pyenv를 통한 python버전 변경  (0) 2023.12.17
venv  (0) 2023.12.17
python 스트링 인코딩 핸들링  (0) 2021.11.30
Python GUI Programming(Tkinter)  (0) 2021.01.02
파이선환경 그리고 requirements.txt  (0) 2020.09.20

로그중에 u'\ucc98\ub9ac' 이런식의 시퀀스가 보이면, 그냥 긁어서 다음과 같이하면 보인다

>>print(u'\ucc98\ub9ac')

처리

 

hex와 euc-kr/utf-8 변환에는 다음 사이트가 좋다.

https://r12a.github.io/app-encodings/

반응형

'Programming > Python' 카테고리의 다른 글

venv  (0) 2023.12.17
mypy / pytype  (1) 2023.10.07
Python GUI Programming(Tkinter)  (0) 2021.01.02
파이선환경 그리고 requirements.txt  (0) 2020.09.20
Google Colab(Colaboratory Lab) 팁  (0) 2019.03.07

개인적으로 python으로 GUI프로그램을 하나 작성할일이 생겨서, 여기에 그 과정을 기록해본다.

 

여기를 참고해서 파이선에 기본적으로 딸려 나온다는 Tkinter를 사용해보기로 결정했다.

처음 tutorial은 여기를 참고했는데, 기본적으로 딸려 나오는 모듈이라그런지 사용도 무척 쉬웠다.

만약 리눅스에 ssh로 접속하고 있다면 x-server를 사용해야하는데,

나의 경우 라즈베리파이에 깔린 라즈비안에 윈도우에서 MobaXTerm으로 접속하는데, 메뉴에서 Start X-Server만 해주면 바로 동작했다.

(집과 회사등 여러군데에서 ssh로 접속하는 경우는 실행할때 충돌나면서 안되는 경우가 있었는데, 이때는 여기참조해서 터미널(?) 하나를 죽여주면 잘 동작함을 확인)

 

한글로 레이블을 만들면 텍스트가 깨져보이는데, 이게 생각보다 고치기 쉽지 않네 ㅠ 검색도 잘 안되고.. 일단 그냥 영어버전으로 만들기로 하고(...) 넘어감

String으로 된 radiobutton 컨트롤의 경우 위링크에서 추가적으로 여기를 참조해야 초기값 세팅이 가능했다.

위젯간 align을 위해서 grid()를 사용하거나 pack()을 사용하거나 place()를 사용하는거 같은데, 나는 단순하게 하기 위해서 grid()를 사용했다(위의 tutorial에서 소개한 방법이기도 하고).. 섞어 쓰기 보다는 하나만 선택해서 써야하는 것 같은 인상을 받았다.

그런데 grid()의 경우 columnspan을 사용하거나, Frame()으로 그룹핑해주지 않으면 가상의 테이블 때문에 내가 원하는대로 배치가 되지 않는 현상이 있었다. 위짓간 align을 위해서는 sticky라는 키워드를 사용해야했는데, 좀 거지 같은 설계인것 같다.

 

 

 

 

반응형

'Programming > Python' 카테고리의 다른 글

mypy / pytype  (1) 2023.10.07
python 스트링 인코딩 핸들링  (0) 2021.11.30
파이선환경 그리고 requirements.txt  (0) 2020.09.20
Google Colab(Colaboratory Lab) 팁  (0) 2019.03.07
python array (indexing and slicing)  (0) 2019.02.28

virtualenv 관련해서는여기 참조

파이선환경

The ecosystem consisting of your particular installed version of python

plus all the third-party packages (“libraries”) it can access (and their precise versions)


requirements.txt

필요한 이유: 배포하고 나서 필요한 package들을 명시하기 위함



프로젝트 만드는 입장에서 requirements.txt 생성하기

$ pip freeze 하면 가상환경에서 현재까지 pip install된 라이브러리 목록이 버전과 함께 나열된다.


$ pip freeze > requirements.txt 하면 requirements.txt가 생성된다.

가상환경을 사용한 경우 이게 첨에는 아무것도 없을 수 있다.

여기에 뭔가 설치하고 나서(예를 들면 pip install numpy) 다시 해보면 나타나게 된다.

라이브러라(타 프로젝트) 사용하는 입장에서 필요한 모듈(필요한 버전으로) 설치하기

requirements.txt가 있는 경우 pip install -r requirements.txt를 통해 필요 모듈 설치

없는 경우 pip install numpy와 같은 방법으로 하나씩 설치(numpy module을 설치하고 싶다고 했을 때)

이때 설치되는 모듈들은 해당 virtual environment 안에서만 깔린다.

반응형

'Programming > Python' 카테고리의 다른 글

python 스트링 인코딩 핸들링  (0) 2021.11.30
Python GUI Programming(Tkinter)  (0) 2021.01.02
Google Colab(Colaboratory Lab) 팁  (0) 2019.03.07
python array (indexing and slicing)  (0) 2019.02.28
pudb  (0) 2018.11.15

Google colab은 Jupyter ipython notebook과 같은 python code를 온라인에서 공유하면서 작성할 수 있게 해준다.

더구나 GPU도 쓸 수 있고 속도도 빠른편이며 sklearn, prophet등 ML관련 library들도 대부분 미리 설치되어 있다.

 

팁1: 인터넷에 있는 파일을 바로 다운받아서 데이터로 쓰기

ML을 하다보면 데이터가 생명인데, 매번 클릭해서 다운받으면 번거롭기 때문에 wget으로 바로 받으면 공유하기도 좋고 편하다.

 

 

공개적으로 올려진 파일의 경우 다음처럼 wget으로 쉽게 받을 수 있다. 

 

위 파일처럼 압축된 경우에도 다음처럼 zipfile 을 import하여 풀 수 있다.

 

 

 

팁2: github에 있는 파일 받기

github에 올려져 있는 파일의 경우 git clone을 하지 않고 wget만으로는 받기 힘든데.. 다음처럼 raw.으로 시작하는 주소로 바꾸고 약간만 조심하면 바로 받을 수 있다.

주소를 바꾸는 규칙에 대해서는 여기를 참조하라.

요즘에는 그냥 git clone 되는거 같다.

반응형

'Programming > Python' 카테고리의 다른 글

Python GUI Programming(Tkinter)  (0) 2021.01.02
파이선환경 그리고 requirements.txt  (0) 2020.09.20
python array (indexing and slicing)  (0) 2019.02.28
pudb  (0) 2018.11.15
Anaconda & Jupyter  (0) 2018.03.23

1차원 array

indexing

a = ['a','b','c','d','e','f'] 이런 배열이 있을때, 기본 인덱싱은

a[0] 이렇게 한다 (a[0]은 0번째 element를 indexing하며 따라서 'a'가 된다.)

이때 a[-1] 이렇게 음수도 쓸 수 있으며 마지막 element부터 -1, -2로 indexing된다. (따라서 a[-1]은 'f'가 된다)


slicing

부분집합을 가져오는 slicing은 colon을 한 번 쓰거나, 두 번 쓸 수 있으며,

각각 [start:stop], [start:stop:step] 이라는 의미가 된다.

또한 colon기호는 대괄호 안에서만 쓸 수 있으나 slice() 객체를 사용하면 밖에서 할 수도 있다.

예를 들어 a[1:3] 하면 ['b', 'c']가 되는데, 

a[1:3]은 a[slice(1,3)]과 같기 때문에 

아래처럼 두줄에 나눠쓰는게 가능하다.

> col = slice(1,3)

> a[col]


slicing의 다양한 옵션은 여기를 보면 쉽게 파악할 수 있다.


2차원 array

indexing

a = [[1,2,3],[4,5,6]] 이런 배열이 있을때, 기본 인덱싱은

a[0][1] 이렇게 한다 (a[0][1]은 0번째 row, 1번째 column을 의미하며 값은 2가 된다)

근데 2차원 인덱싱의 경우는 a[0][1]대신 a[0,1]로도 할 수 있다.


slicing

다른건 쉬운데 index을 위한 comma와 slicing을 위한 colon이 같이 쓰이면 헷갈릴 수 있다.

예를 들어 위의 a배열에 대해서 a[:,0:2]라고 하면 [[1,2],[4,5]]가 되는데..

a[:,0:2]는 

a[slice(None, None, None), slice(0, 2, None)]과 같고, 3줄로 풀어쓰면 다음과 같다.


> row = slice(None, None, None)  # 모든 row를 원한다.

> col = slice(0, 2, None)  # 첫번째, 두번째 컬럼만 원한다(마지막 컬럼 배제)

> a[row,col]



반응형

'Programming > Python' 카테고리의 다른 글

파이선환경 그리고 requirements.txt  (0) 2020.09.20
Google Colab(Colaboratory Lab) 팁  (0) 2019.03.07
pudb  (0) 2018.11.15
Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28

multiprocess환경에서 디버깅하기

multiprocess를 사용한 경우 pudb가 정상 동작하지 않는다.


이럴 때는 multiprocess로 분기하는  부분을 일시적으로 분기하지 않도록 하거나(근데 이 방법은 코딩을 해야하는 불편이 존재)


remote debugging을 하는 방법이 있는것 같다.


나도 아직 해보진 않았는데.. 여기참조해서 나중에 해보자

반응형

'Programming > Python' 카테고리의 다른 글

Google Colab(Colaboratory Lab) 팁  (0) 2019.03.07
python array (indexing and slicing)  (0) 2019.02.28
Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16

Anaconda install

Jupyter를 사용하기위해 anacoda install을 진행했다. (linux, ubuntu 환경)

인스톨은 여기를 참조했다.

인스톨후 conda를 입력해서 인식되면 제대로 설치된 것


맥환경에서 install 하는건 여기에서 설치프로그램 클릭해서 설치했다.

Jupyter 설정

Jupyter 설치는 conda설치시에 기본적으로 되고, 설정하는 방법은 여기 참조

Jupyter notebook에서 tensorflow를 사용하려면, linux 터미널에서 conda install tensorflow 하면 설치된다.


ipdb관련

Jupyter notebook에서 라인디버깅을 하기위해서 ipdb를 추가 인스톨해야했는데 conda install ipdb로는 안됐고

conda install -c conda-forge ipdb로 하니까 깔렸다.

디버깅 방법은 아래와 같다.



위에거 빠져나올때는 exit() 쳐줘야 한다.


gym관련

$ conda install gym으로는 설치가 안됐고

여기 참조해서 $conda install -c akode gym하니까 설치가 됐다.

반응형

'Programming > Python' 카테고리의 다른 글

python array (indexing and slicing)  (0) 2019.02.28
pudb  (0) 2018.11.15
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python에서 doxygen 사용해보기  (0) 2017.11.14

+ Recent posts