pip/conda Proxy 사용하기

회사 등에서 방화벽을 사용하는 경우 pip / conda 저장소에서 패키지 설치가 안되는 경우가 있다. 또한 방화벽 안에서 설치할 경우 SSL verification error 에러 발생으로 설치가 안되기도 한다. 이런 경우 직접 pip 혹은 conda 설치가 안되는 경우에 프락시 지정을 해서 사용이 가능하다.

conda proxy

.condarc 파일과 conda 명령 옵션으로 사용할 수 있다.

.condarc 파일

사용자 홈디렉토리 .condarc 파일에 proxy 구성을 한다.

파일에 proxy_servers 구성해 사용한다.

1
2
3
proxy_servers:
http: http://IP_ADDRESS:8080
https: https://IP_ADDRESS:8080

ssl_verify: SSL verification error

방화벽 때문에 파이썬 패키지를 설치할 때 SSL 인증 오류(SSL verification error)가 생겨 곤란할 때가 있다. 만약 프락시 인증서가 필요하면 pip 인증서를 추가하면 ssl verification 에러를 피할 수 있다.

1
2
3
4
proxy_servers:
http: http://IP_ADDRESS:8080
https: https://IP_ADDRESS:8080
ssl_verify: %programdata%\pip\dscert.crt

conda --set 옵션 사용

설정 파일 대신 conda 명령에서 --set 옵션을 사용하면 설정 파일을 편집해서 저장이 된다.

1
conda config --set [설정내용]

다음은 ssl_verify 에 pip 인증서를 추가하거나 False 로 제외하고 사용하고 있다.

1
conda config --set ssl_verify False

명령에서 즉시 사용할 때는 --add 옵션을 사용한다.


pip proxy

pip 명령은 명려에서 옵션 pip proxy 옵션을 사용하거나 설정 파일 pip.ini 로 구성할 수 있다.

pip.ini

pip는 사용자 구성에서 아래 같이

  • 윈도우: %HOMEPATH%\pip\pip.ini
  • 리눅스/맥: $HOME/.pip/pip.conf

trusted-host 를 구성해 준다.

1
2
3
4
5
6
[global]
proxy=http://IP_ADDRESS:8080
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org

ssl cert

SSL 의 경우 cert 옵션을 사용할 수 있다.

1
2
3
4
5
6
[global]
cert=C:\Users\user\pip\cert.crt
proxy=http://IP_ADDRESS:8080
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org

pip 명령 사용

명령으로 직접 proxy 를 지정할 수 있다.

1
pip install --proxy https://{proxy}:{port} {BINARY}

다음 같인 trusted-host 등도 지정 할 수 있다.

1
pip install --upgrade --proxy https://IP_ADDRESS:8080 --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org matplotlib numpy openpyxl xlrd xlwt pandas

Duplicate class ... in module kotlin-stdlib-1.8.0

모듈 build.gradle 에서 모듈의 dependencies 의존성을 잘못 선택하면 여러 에러가 발생하는데. 이번에 최신버전 등으로 건드리면 만나는 에러중 하나가 Depllicated 같은 에러인거 같다.

원래 의존성은 아래 같다.

1
2
3
4
5
6
dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'

// CameraX core library
def camerax_version = '1.2.0-alpha04'
implementation "androidx.camera:camera-core:$camerax_version"

Android Studio의 Assistance 가 build.gradle 에서 의존성 모듈에 대한 최신버전이 제시되었다.

아래 같이 변경했다.

1
2
3
4
dependencies {
// CameraX core library
def camerax_version = '1.3.0-alpha03' // '1.2.0-alpha04'
implementation "androidx.camera:camera-core:$camerax_version"

그래해 해당 모듈의 최신버전으로 선택했더니 아래같은 에러가 발생했다.

그랬더니 그림 같은 에러가 발생하게 되었다.

원래 버전 혹은 해당 Minor 최신버전으로 변경하니 문제가 사라졌다.

1
2
3
dependencies {
def camerax_version = '1.2.1'
implementation "androidx.camera:camera-core:$camerax_version"

모듈 들의 의존성 버전은 조심해서 건드리자…ㅎㅎ

R 시작하기, 2022

R과 R Studio 를 설치하고 R 의 기본환경을 이해하기 위해 정리한다.

old version:

R 소개

R은 벨 연구소 Becker 등에 의해 개발됐던 S language를 기반으로 통계 계산, 시각화를 위한 프로그래밍 언어를 포함한 개발환경이다. S language를 이용한 Insightful사의 S+는 S 언어를 이용한 상업용 소프트웨어이고, R은 공개소프트웨어 기반의 소프트웨어 이다.

  • 예) Excel, SPSS, SAS, HLM, MPlus 등 통계 프로그램

R 학습 자료

  1. K-MOOC: 데이터과학을 위한 R프로그래밍, 이혜선 (포항공과대학교)
  2. R프로그래밍및실습, Jinseog Kim (동국대학교)

설치

R 프로그래밍 엔진은 R 을 다운로드하고 GUI 도구로 R Studio를 사용할 수 있다.

  1. CRAN mirror http://r-project.org 에서 R Download 한다.
  2. R Studio IDE
  3. Old Version RStudio 설치

R 시작하기

R 은 console을 통해 프로그래밍을 하거나 외부 에디터에서 작성한 소스를 컴파일해서 실행 할 수 있다. R 엔진을 IDE 를 통해서 개발한 코드를 실행하고 테스트 할 수 있다.

macOS에서 R 시작시 다음 같은 경고를 보이면 macOS FAQ를 참고해 설정을 해주어야 한다.
> [그림. ]

R과 R Studio 화면

R prompt

R을 실행하면 명령 입력 프롬프트 > 을 볼 수 있다. 프롬프트에서 한 줄에 하나 혹은 한문장의 명령이 입력되고 실행된다.

1
2
3
4
5
6
7
> print("Hello World")
> Factorial(10) # 계산 기능
> Rep(x="hello", times=5)
> Rep(times=5) : Error…
> Plot(10,10)
> Plot(c(5,7), c(20, 30))
> Plot(runif(100), runif(100)) # runif()는 랜덤 넘버 생성 함수

프롬프트 > 에 명령을 입력하고 엔터키를 실행이 되지만 코드 블럭 괄호((),{},[])가 닫히지 않으면 프롬프트에 + 에 연결해서 계속 입력할 수 있다.

1
2
3
4
5
6
7
[Workspace loaded from ~/work-R/R기본사용/.RData]

> print('hello r studio'
+ 'greeting me'
Error: unexpected string constant in:
"print('hello r studio'
'greeting me'"

R Studio IDE

R Studio IDE에서 작성 가능한 R 프로그래맹 편집기 종류를 살펴보면,

R Notebook 코드 작성중 package 요구

R 이용

R 사용 환경에 도움이 되는 구성을 살펴보자

한글 폰트 지정

나눔고딕코딩 폰트를 다운받아 설치한다.

R 환경설정에서 Nanum font 사용한다.

help() 사용

R에서 도움말을 통해 함수, 형식, 등의 정보를 얻을 수 있다.

1
> help(“함수명”)

패키지를 로드하지 않은 함수의 도움말 보기

1
> help.search(“함수명”)

내가 얻은 패키지는 어떤 것인가?

1
> help(package=”알고싶은 패키지명”)

주요 도움말 명령 사용

1
2
3
4
5
6
7
8
9
10
> help()                      # 도움말 창
> help(ls) # 함수 ls()에 대한 도움말
> ?ls # 도움말 단축키 ?로 help(ls) 호출
> help(">") # R의 예약어, 연산자 등은 ""로
> help("for") # 묶는다.
> #특정 패키지에 대한 도움말 요청
> help(package="datasets")
> # 일반 검색어를 이용해 도움말 검색
> help.search("Latex")
> ??"Latex"

샘플로 제공하는 예제를 사용할 수 있도록 검색을 지원한다.

1
2
3
4
5
6
7
> example("formula")

formul> class(fo <- y ~ x1*x2) # "formula"
[1] "formula"

formul> fo
y ~ x1 * x2

object

R은 동적 객체 방식을 사용한다. 아래는 hello 변수를 선언하고 값을 대입한다. 이렇게 대입되면 R에서 객체로 다뤄진다.

1
2
3
> hello <- “안녕하세요"            #유니코드 문자열
> hello
[1] “안녕하세요"

동적 객체이기 때문에 새로운 변수 값을 대입할 수 있다.

1
2
3
> hello <- 100 + 200
> hello
[1] 300

숫자형식의 데이터를 가지고 문자형으로 다시 대입할 수 있다.

1
2
3
> hello <- 'this is a text'
> hello
[1] "this is a text"

객체와 객체를 이용해서 연산도 할 수 있다.

1
2
3
4
> test1 <- 1
> test2 <- 2
> test1 + test2
[] 3

논리형식의 데이터를 이용해 참/거짓을 이용할 수 있다.

1
2
> Object1 <- TRUE               # 논리형
> Object2 <- FALSE

ls() : 객체 목록

ls()는 사용한 객체들의 목록을 반환해 준다.

1
2
3
> x <- 1
> y <- 1:10
> ls()

rm(): R 객체를 삭제

1
2
3
4
> x <- 1
> y <- 1:10
> rm(x,y)
> ls()

Workspace

R에서 작업공간(workspace)에 사용자가 R을 이용하여 수행하는 자료와 분석 프로시져 등을 포함하게 된다.

  • getwd(): 현재 워크스페이스 경로
  • setwd(PATH): 지정한 PATH로 현재 워크스페이스를 지정한다.
  • list.files(PATH): 경로의 파일 목록을 반환

객체 저장

작업공간은 저장할 수 있다. 저장을 실행하면 작업 디렉토리에 .RData 라는 파일이 생성된다.

1
2
> help("save.image")        # 도움말을 살펴보며 진행
> save.image()

R의 종료를 위해서는 명령문 프롬프트에서 **q()**를 실행하던가 메뉴로부터 “종료”를 선택한다.
종료시 워크스페이스에 작업된 자료를 저장할 수 있다.

R패키지: R의 확장기능 이용

search()는 설치된 R패키지들을 확인하는 명령

1
2
3
4
search()
## [1] ".GlobalEnv" "package:stats" "package:graphics"
## [4] "package:grDevices" "package:utils" "package:datasets"
## [7] "package:methods" "Autoloads" "package:base"

library(): R에 설치된 모든 패키지 및 설명

library() 명령은 라이브러리를 현재 환경에 로딩해 준다.

1
2
library()
library(package_name): 패키지를 현재 R세션으로 로딩

예를 들어 MASS 패키지를 로딩하는 명령을 보자

1
library(MASS) # MASS 패키지를 로드

새로운 패키지를 설치할 수 있다.

1
install.packages(): R에 새로운 패키지 설치

stringr 패키지를 설치한다.

1
install.packages("stringr")


R 객체 이용하기

R 객체에는 아래와 같은 종류들이 있음

  • atomic(상수)
  • vector(벡터)
  • matrix(행렬)
  • list(리스트)
  • data.frame(데이터프레임)
  • function(함수)
  • operator(연산자) …
  • 데이터 객체 (data object): R 객체 중 데이터 객체 : atomic, vector, matrix, data.frame

객체의 이름

객체명 표시방법: 알파벳문자, ’_‘,’.’, 숫자의 조합

주석

한 줄을 인터프리터가 해석하지 않고 패스하는 라인 코멘트(주석문) # 를 사용한다

1
2
a <- 1
b_1 <- 10 # <-는 left assignment

벡터

R의 최소 단위는 벡터

정수(1), 실수(5.8271), 문자(‘A’) 문자열(“hello”)는 스칼라이다.
벡터는 {1,2,3,4,5,6}과 같이 스칼라가 여러 개 모인 것이이다.

한 개의 스칼라 값을 가진 벡터를 선언한다.

1
> a <- 5

객체에 다른 객체 넣기

1
2
3
4
5
6
7
> object1 <- 1
> object2 <- 2
> object1
[1] 1
> object1 <- object2
> object1
[1] 2

객체에 다른 객체 넣기

1
2
3
4
5
6
> object1 <- 1
> object1 <- 2
> object1 <- object2
> object2 <- 100
> object1
[1] 2

함수 계산 결과를 객체에 넣기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
> Excel1 <- read.csv(“example_student.csv”)

> Object1 <- sum(1,8,4,5,9)
Object1 : 27

> A <- c(1,3,5,6,9) # 벡터에 대해
A : 1,3,5,6,9

> A <- 1
Is.vector(a): True

A <- c(1,2,5)
Is.vector(a): True

> A <- c(“첫번째”, “두번째”, “세번째”)
A : ???

Package 관리

외부에서 제공하는 모듈을 Install, Update, Library 명령으로 관리할 수 있다. 패키지 설치는 Install 그리고 사용할 때는 Library 명령을 사용하고 패키지 갱신에 Update 명령을 사용한다.

패키지 관리

패키지 설치과 업데이트

1
2
3
4
> install.packages("패키지명")      # 패키지 설치
> library("패키지명") # 패키지 불러들이기 (사용)
> require("패키지명") #
> update.packges('패키지명') # 패키지 갱신

설치된 패키지 목록 보기

1
2
3
> Library()
> installed.packages()
> Install.packages()[, c(“Packages”, “version”, “License”)]

필수 패키지

1
2
3
4
5
6
7
8
9
10
11
Install.packages(“rgl”) # 3D 그래프 보여주는 패키지
Install.packages(“ggplot2”)
Install.packages(“ggthemes”)
Install.packages(“data.table”)
Install.packages(“devtools”)
Install.packages(“KoNLP”)
Install.packages(“dplyr”)
Install.packages(“plyr”)
Install.packages(“reshape2”)
Install.packages(“scales”)
Install.packages(“stringr”)

Github로 패키지 설치하기

개발자가 베타 버전을 github에 공개하는 경우
Knitr 패키지는 R에서 html, pdf, MS-Word 문서를 만들 수 있음고 https://github.com/yihui/knitr 에서 배포한다.

1
2
3
4
> Install.packages(“devtools”)
Library(“devtools”)

> install_github(“yihui/knitr”)

RStudio UTF8 지원


참조

Python : pyenv-windows 와 Jupyterlab 환경

pyenv-windows 와 Jupyterlab 환경

pyenv-windows 설치

파워셀에서 설치 스크립트를 실행해서 설치하는 과정으로 정리되어 있다.

준비

  1. 테스트
    • Windows 10 Home 21H1 / 19043.928
    • Microsoft Visual C++ 2015-2019 Redistribution
    • pip version 22.1 혹은 22.0 상태
  2. 주의
    Windows 최신 (Windows 11 등)

    pip 22.3 이상인 경우 Microsoft Visual C++ Build Tools 를 설치해야 한다.

    이어지는 Microsoft C++ Build Tools 설치 참조해 설치한다.

PowerShell 스크립트 실행 모드 확인

외부 스크립을 실행할 수 있기 위해서는 ExecutionPolicy가 unrestricted 상태여야 한다.

PowerShell을 관리자 모드로 실행해

다음과 같이 입력

1
2
> ExecutionPolicy      <-- 현재 상태 확인
Restricted <-- 모든 스크립트 막은 상태

모드 변경을 위해 다음 명령 실행

1
> Set-ExecutionPolicy Unrestricted

모드 변경 확인

1
2
> ExecutionPolicy      <-- 현재 상태 확인
Unrestricted <-- 모든 스크립트 허용 상태.

모드가 Unrestricted 상태에서 pyenv-win 을 설치한다.


pyenv-win 설치

pyenv-win 설치 항목에서 파워쉘을 통해 스크립트 실행을 통해 설치한다. 모든 방법들은 윈도우 홈 디렉토리의 .pyenv/ 폴더 아래에 실행 스크립을 위치한다.

인스톨러

다음 파워쉘 스크립트를 파워쉘에서 실행한다.

1
2
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

만약 Unauthorized Script 에러가 나면 PowerShell 스크립트 실행 모드 확인 같이 Unrestricted 모드로 설정해야 한다.

실행하면 %USERPROFILE%/.pyenv 아래에 관련 파일을 다운로드 한다.

설치 완료후 파워쉘에서 pyenv 명령을 실행하면 아래 같이 도움말 화면이 나오면 성공이다.

Microsoft C++ Build Tools 설치

pip versions 22.3 이상 업그레이드 혹은 설치를 하면 Redistribution 패키지 설치로는 해결이 안된다.

  • pip v22.1 까지는 Microsoft Visual C++ 2015-2019 Redistribution 로도 충분하다.

다음 사이트에서 build tools 을 다운로드 받아 설치한다.

설치시 아래 옵션을 선택해 설치한다.

Python 배포본 설치

이제 pyenv 를 사용해서 Python 3.10, Python 3.9 버전을 설치해 보자.

설치 가능한 버전은 pyenv install -l 명령으로 확인 가능하다. 아래 같이 파워셀에서 필요한 버전을 필터링해 확인해 보자.

1
2
3
4
5
6
7
8
PS > pyenv install -l | findstr 3.9
.
.
3.9.11
3.9.12-win32
3.9.12
3.9.13-win32
3.9.13

원하는 버전의 버전 번호를 입력해 설치한다.

윈도우 버전의 배포본이 pyenv 의 가상환경 폴더 밑에 설치 된다.

이어서 바로 Python 3.9 버전도 설치해 보자.

윈도우 버전 배포본 설치가 진행된다.

pyenv 에서 설치한 Python 3.10, Python 3.9 를 설치 확인을 해보자

Jupyter-Lab 설치

3.9 버전을 글로벌로 지정했다.

1
PS C:\Users\andro> pyenv global 3.9.12

pyenv 가능한 버전 확인

1
2
3
PS C:\Users\andro> pyenv versions
3.10.4
*3.9.12

현재 파워쉘의 파이썬 버전을 3.10 으로 지정했다.

1
2
3
PS C:\Users\andro> pyenv shell 3.10.4
PS C:\Users\andro> python -V
Python 3.10.4

venv 모듈로 가상환경을 생성하고 활성화 한다.

1
2
3
PS C:\Users\andro> python -m venv .venv/jupyter_p310
PS C:\Users\andro>.\.venv\jupyter_p310\Scripts\activate
(jupyter_p310) PS C:\Users\andro>

jupyter-lab 설치

1
2
(jupyter_p310) PS C:\Users\andro> pip install jupyterlab
Collecting jupyterlab

Jupyter-lab에서 사용할 notebook 공간 생성

1
(jupyter_p310) PS C:\Users\andro> mkdir jupyter-work

jupyter-lab 실행

1
2
3
4
5
6
7
8
9
10
11
(jupyter_p310) PS C:\Users\andro> jupyter-lab --no-browser .\jupyter-work\
...
[I 2022-05-24 03:27:03.847 ServerApp] Serving notebooks from local directory: C:\Users\andro\jupyter-work
[I 2022-05-24 03:27:03.847 ServerApp] Jupyter Server 1.17.0 is running at:
...
To access the server, open this file in a browser:
file:///C:/Users/andro/AppData/Roaming/jupyter/runtime/jpserver-4664-open.html
Or copy and paste one of these URLs:
http://localhost:8888/lab?token=866bdd9bed841f4dafc5c431a7ffcd4b01f516e4583f38d7
or http://127.0.0.1:8888/lab?token=866bdd9bed841f4dafc5c431a7ffcd4b01f516e4583f38d7
[W 2022-05-24 03:28:04.189 LabApp] Could not determine jupyterlab build status without nodejs

[HTS API] 대신증권 CybosPlus Python API 준비

국내 증권사들 중에서 주식거래 HTS 를 통해서 API 를 지원하고 있다. 여기서는 대신증권 CybosPlus 를 사용해보려고 한다.

  1. 대신증권 CybosPlus 설치
  2. 32bit Miniconda환경
  3. JupyterLab 시작
  4. Powershell Openssh 설치
    • 원격으로 접속시

증권 HTS API 와 Jupyter Lab 환경

HTS에서 제공하는 OpenAPI 를 사용해서 주식 정보 및 주문을 처리할 수 있다. 여기서는 Jupyter lab 으로 윈도우 머신에 설치된 Open API 를 지원하는 HTS 사용하는 과정을 정리했다.

증권사별 API 비교

“” 키움 증권 대신 증권 이베스트 증권
제공방식 OCX COM COM, DLL
파이썬 보통 좋음 보통
API사용성 보통 좋음 좋음
API거래 수수료 0.015% (HTS수준) 0.015% (HTS수준)
월정액 15000+0.0088%
0.015% (HTS수준)

사전 준비

  • 대부분 윈도우용 COM API 를 지원하는 HTS 는 32bit 기반의 Python 환경.
  • 32bit Miniconda2 를 설치해서 사용하겠다.

대신증권 CybosPlus 설치

대신증권의 API 서비스인 CybosPlus 를 사용한다.

  1. Cybos 5 설치
  2. Python2.7 32bit 환경인 Miniconda 32bit 버전 설치

Cybos 5 설치

설치를 하고 CybosPlus 로 인증서를 통해서 로그인한다.

HTS 가동과 연결

HTP 프로그램은 보통 자동으로 관리자 모드로 실행된다. 이 API를 사용하는 파이썬 프로그램도 역시 관리자 모드로 실행되야 한다.

32bit Miniconda2 환경

윈도우 머신에 Python2.7 기반 32bit 용 Miniconda 를 설치한다. 그리고 필요에 따라 64bit miniconda 를 설치한다. 설치하게 되면 32비트 버전은 Miniconda2, 64비트 버전은 miniconda3 으로 구분할수 있다.

대신증권 가상환경

관리자 권한으로 HTS 를 실행하기 때문에 Python을 통한 API 호출도 관리자 권한이 필요하다. 관리자 권한으로 miniconda 를 실행하고 대신증권 가상환경을 생성한다.

메뉴에서 miniconda 쉘을 실행하면 아래같이 나타난다.

1
2
3
(base) C:\Windows\system32>
(base) C:\Windows\system32>d:
(base) D:\> conda create -n daeshin_hts jupyter

대신증권 API를 사용하기 위해서 가상환경을 설정한다. 테스트/응용을 위해서 jupyter 환경을 구성한다.

1
2
3
4
5
6
7
8
9
10
11
(base) D:\>conda env list
# conda environments:
#
base * C:\Users\daddy\miniconda2
daeshin_hts C:\Users\daddy\miniconda2\envs\daeshin_hts
C:\Users\daddy\miniconda3
C:\Users\daddy\miniconda3\envs\deeplearning
C:\Users\daddy\miniconda3\envs\ml
C:\Users\daddy\miniconda3\envs\tf2
C:\Users\daddy\miniconda3\envs\tf25
C:\Users\daddy\miniconda3\envs\tf26

JupyterLab 시작

필요한 패키지를 설치하고 jupyterlab 을 실행한다. 먼저 가상환경을 활성화 한다.

1
(base) > conda activate daeshin_hts

패키지 설치

가상환경을 활성화 하고 jupyterlab numpy scipy matplotlib 패키지를 설치한다.

1
(daeshin_hts) > conda install jupyterlab numpy scipy matplotlib

콘다 가상환경이 생성된 후에 가상환경을 활성화 한다.

  • Jupyter Lab을 시작한다.
1
(daeshin_hts) > jupyter lab WORK_FOLDER

JupyterLab Config

원격 접속등을 위해서 비밀번호를 사용한다. 그러기 위해서 구성 파일을 통해서 비밀번호, 포트 번호등을 설정해야 한다.

generate-config

Jupyter Lab 에서 설정 파일을 생성한다. 다음 명령으로 각각 $HOME/.jupyter/ 위치에 jupyter_notebook_config.py 파일이 생성된다.

1
(daeshin_hts)> jupyter lab --generate-config

jupyter_notebook_config.py 설정 파일에 비밀번호를 추가하려면 비밀번호를 생성하는데 jupyter 명령과 python 명령에서 생성하는 2가지 방법이 있다.

1) jupyter 명령으로 패스워드 생성

첫번째로 아래는 쥬피터 폴더에 있는 파일 ‘jupyter_notebook_config.json’에 패스워드를 생성해 준다.

1
2
3
(daeshin_hts)$ jupyter notebook password                                        Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to $HOME\.jupyter\jupyter_notebook_config.json

위 명령으로 jupyter_notebook_config.json에 암호가 생성되면 “”sha1:723c…” 로 시작하는 패스워드 해시코드를 복사한 후 jupyter_notebook_config.py 파일의 c.NotebookApp.password 항목에 입력을 한다.

2) python 명령으로 비밀번호 생성

비밀번호 설정 다른 방법으로 파이썬에서 passwd 모듈을 실행해서 비밀번호를 얻을 수 있습니다.

1
2
3
4
5
6
7
(daeshin_hts)$ python
>> from notebook.auth import passwd
>> passwd()
>> Enter password:
>> Verify password:

'sha1:********'

출력되는 sha1 암호문자열을 복사해서 사용하시면 됩니다.

1
2
3
4
5
[jupyter_notebook_config.py]

c.NotebookApp.password = 'sha1:*********' # 외부 접속시 사용할 비밀번호
c.NotebookApp.ip = '*' # 어디서든 접속 가능
c.NotebookApp.port = 8888 # 접속에 사용할 포트

Powershell Openssh 설치

윈도우에 원격 접속해서 HTS를 위한 파이썬 가상환경에서 jupyterlab을 실행할 필요가 있다. 이때 윈도우 파워쉘에서 openssh 설치하고 연결한 후에 administrator 계정으로 관리자 모드로 jupyhter 를 실행한다.

윈도우즈 administrator 활성화

대신 hts 에 접속하기 위해서는 관리자 권한이 필요하다. ssh로 윈도우즈 계정 로그인은 되지만 hts 활설화를 위해서

  1. administrator 게정을 활성화 한다.

  2. 파웨쉘을 관리자로 실행해 다음 같이 실행한다.

1
(daeshin_hts)> net user administrator /active:yes
  1. jupyter-lab을 runas 명령으로 실행한다.
1
2
3
(daeshin_hts)> runas /env /user:administrator "jupyter-lab.exe .\Jupyter-HTS\"
administrator의 암호 입력:
jupyter-lab.exe .\Jupyter-HTS"을(를) 사용자 "DESKTOP-GOYANGI\administrator"(으)로 시작하려고 합니다.

참고

  1. openssh 서버 구성: https://docs.microsoft.com/ko-kr/windows-server/administration/openssh/openssh_server_configuration
  2. https://docs.microsoft.com/ko-kr/powershell/scripting/learn/remoting/ssh-remoting-in-powershell-core?view=powershell-7.1
  3. 윈도우즈 서비스 만들기: https://docs.microsoft.com/ko-kr/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer

IntelliJ Communication 사용한 Springboot 시작


2022/8/10: 첫번째 버전.

첫번째 스프링 부트

https://start.spring.io/ 사이트에 접속해 아래 같이 프로젝트 구성을 선택한다.

그리고 오른쪽 의존성 버튼을 눌러 Initializr 에서 의존성 플러그인을 추가한다.

Dependencies 추가

Web 관련해

보통은 Web, Dev tools 와 Lombok 플러그인을 지정한다.

Generate 로 샘플 프로젝트 다운로드

Initializr 에서 구성을 완료하고 의존성 모듈을 추가한 후에 Generate 버튼을 누르면 압축된 프로젝트가 다운로드 된다. 이 압축 파일을 풀어서 Intellij 에서 연다.

run

src/main 에서 java 파일을 열면 실행 버튼이 활성화 된다.

index.html 파일 추가하기

src/main/resources/static 폴더에 index.html 파일을 추가한다.

파일에 HTML 로 아래 같이 입력한다.

프로젝트에 컨트롤러 추가하기

Spring Web 의존성을 추가해서 라이브러리를 설치하면 웹 관련 컨트롤러를 사용하기 좋다. 다음 같인 프로젝트에 컨트롤러 패키지를 추가하고 SampleController 클래스를 추가한다.

어노테이션으로 RestController 를 지정한다.

hello 메서드를 작성한다.

Uri 연계를 위해서 Mapper 어노테이션을 지정한다.

이제 http://localhost:4000/hello 주소를 요청한다.

실행 가능한 배포본 만들기

스프링 프로젝트는 Tomcat 같은 WAS 가 필요하고 이를 배포하는 방법이 필요했다. 스프링 부트는 단독으로 실행 가능한 웹 애플리케이션을 jar 형태로 제작하고 사용하는 것이 가능하다.

Gradle 을 사용해서 몇 번의 클릭만으로 실행 가능한 웹 애플리케이션을 제작할 수 있다 물론 실행을 위해서는 Java 환경이 필요한다.

Gradle Task 사용

Gradle view 의 task 에서 bootjar 항목을 실행한다.

프로젝트의 build 폴더의 lib 폴더에 프로젝트 이름+0.01-SNAPSHOT.jar 실행 파일이 생성되어 있는 것을 확인할 수 있다.

이 jar 를 다운로드해서 java 로 실행해 보자

1
java -jar PROJECT-0.0.1-SNAPSHOT.jar

Python : pip 명령 proxy 지정

방화벽 등으로 직접 pip 혹은 conda 설치가 안되는 경우에 프락시 지정을 해서 사용이 가능하다.

Anaconda proxy

사용자 홈디렉토리 .condarc 파일에 proxy 구성을 한다. 만약 프락시 인증서가 필요하면 인증서를 추가한다.

1
2
3
4
proxy_servers:
http: http://IP_ADDRESS:8080
https: https://IP_ADDRESS:8080
ssl_verify: %programdata%\pip\dscert.crt

pip

pip 명령은 명려에서 옵션 pip proxy 옵션을 사용하거나 pip.ini 로 구성할 수 있다.

1
pip install --upgrade --proxy https://IP_ADDRESS:8080 --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org matplotlib numpy openpyxl xlrd xlwt pandas

사용자 정의 폴더

pip는 사용자 구성에서 아래 같이

  • 폴더: ~/pip

pip.ini

1
2
3
4
5
6
7
[global]
cert=C:\Users\user\pip\cert.crt
proxy=http://IP_ADDRESS:8080
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org

pyenv 기반 Anaconda 사용하기

PyEnv + Anaconda

pyenv 와 Anaconda 를 사용하려고 한다. pyenv로 배포본을 관리를 하고, 특정 Local 에서 Anaconda 를 사용하려고 한다.

개발환경은

  • Ubuntu 16.04 or later
  • Windows 7 or later
  • macOS 10.12.6 (Sierra) or later (no GPU support)
  • Raspbian 9.0 or later

Pyenv 로 기본 python 환경을 사용하고 더해서 Anaconda 를 설치해서 사용하려고 한다.

1. pyenv - Anaconda 설치

Pyenv로 설치 할 anaconda 버전을 확이한다.

1
$ pyenv install -l | grep anaconda

anaconda 를 설치한다

1
2
$ pyenv install anaconda3-2021.05
...

Anaconda 활성화

1
2
3
4
$ pyenv versions
system
* 3.9.5 (set by /home/qkboo/.pyenv/version)
anaconda3-2021.05

Local 명령을 사용해서 특정 디렉토리에서만 anaconda 환경을 쓰려고 한다.

1
2
3
4
~$ cd Jupyter-ML
~$ pyenv local anaconda3-2021.05
$ cat .python-version
anaconda3-2021.05

Anaconda init

쉘 환경에서 conda 를 사용하기 위해서 환경변수를 초기화 해야 하는데 다음 명령으로 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ conda init bash
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/condabin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda-env
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/activate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/deactivate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/fish/conf.d/conda.fish
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/Conda.psm1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/conda-hook.ps1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/xontrib/conda.xsh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.csh
modified /Users/qkboo/.bash_profile

==> For changes to take effect, close and re-open your current shell. <==

위 명령은 아래 환경 변수가 작용된다.

1
2
3
4
5
NACONDA_HOME=/Users/who/anaconda3
PATH=$PATH:$ANACONDA_HOME/bin

export ANACONDA_HOME
export PATH

쉘을 다시 열면 쉘 프롬프트가 변경된다.

1
(base) ~$

파이썬 버전 확인

다른 디렉토리에서는 글로벌 파이썬이 실행된다.

1
2
(base) qkboo@desktop-goyangi:~$ pyenv which python
/home/qkboo/.pyenv/versions/3.9.5/bin/python

Anaconda 로 지정한 로컬 디렉토리로 이동하면 해당 파이썬 환경이 사용된다.

1
2
(base) qkboo@desktop-goyangi:~/Jupyter-ML$ pyenv which python
/home/qkboo/.pyenv/versions/anaconda3-2021.05/bin/python

pyenv 와 Anaconda 병행 사용

PyEnv + Anaconda

개발환경은

  • Ubuntu 16.04 or later
  • Windows 7 or later
  • macOS 10.12.6 (Sierra) or later (no GPU support)
  • Raspbian 9.0 or later

pyenv 와 pyenv-virtualenv 기반으로 Anaconda 를 사용하려고 한다. pyenv로 배포본을 관리를 하고, pyenv-virtualenv와 conda 환경의 가상환경을 이용한다.

  1. pyenv-Anaconda 환경
  • ananconda 와 miniconda
  1. anaconda & miniconda 복합환경

1. pyenv - Anaconda 설치

설치할 anaconda 버전을 확이한다.

1
$ pyenv install -l |grep anaconda

anaconda 를 설치한다 - 시간이 많이 걸린다.

1
2
3
4
$ pyenv install anaconda3-5.3.1
Downloading Anaconda3-5.3.1-MacOSX-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh
...

anaconda3-5.3.1 버전을 전역에서 사용하도록 한다.

1
$ pyenv global anaconda3-5.3.1

global로 지정하고 버전을 확인해 보면

1
2
3
4
$ pyenv versions
system
3.8.1
* anaconda3-5.3.1 (set by /Users/qkboo/.pyenv/version)

일반적으로 Anaconda 만을 사용한다면 설치후 사용자 쉘 환경에서 conda 를 사용하기 위해서 환경변수를 초기화 해야 하는데 다음 명령으로 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ conda init bash
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/condabin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda-env
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/activate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/deactivate
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/fish/conf.d/conda.fish
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/Conda.psm1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/shell/condabin/conda-hook.ps1
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/xontrib/conda.xsh
no change /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.csh
modified /Users/qkboo/.bash_profile

==> For changes to take effect, close and re-open your current shell. <==

위 명령은 아래 환경 변수가 작용해서 conda 의 가상환경을 다루는 쉘 스크립을 실행해 준다.

1
2
3
4
5
NACONDA_HOME=/Users/who/anaconda3
PATH=$PATH:$ANACONDA_HOME/bin

export ANACONDA_HOME
export PATH

쉘을 다시 열면 쉘 프롬프트가 변경된다.

1
(base) qkboo@ ~$

pyenv 기반 Anaconda 사용

그런데 pyenv 에서 다른 배포본과 Ananconda 를 같이 사용한다면 conda 초기 환경이 아주 불편할 수 있어서 아래 같이 conda 가상환경 시작을 불가능하게 해야 한다.

init conda, the following command write scripts into your shell init file automatically

1
2
3
4
conda init

# disable init of env "base"
conda config --set auto_activate_base false

보통 conda init 를 해주면 쉘 스크립의 마지막 위치에 삽입된다. 그러므로 .bash_profile 에 있는 pyenv 초기화가 항상 마지막에 실행되도록 하자.

1

pyenv 와 anaconda 환경의 전환 정리

Examples of managing virtual environments.

1
2
3
4
5
6
# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`
1
2
3
4
5
# virtual environments from conda
conda create -n new-env python=3.6
conda env list
conda activate new-env
conda deactivate
1

1

anaconda 패키지와 환경관리를 할 수 있는 conda 명령어 몇가지를 소개

1
2
3
4
5
6
7
8
9
10
11
// 아나콘다의 버전 확인
conda --version

// 아나콘다 버전 업데이트
conda update conda

// 설치된 패키지 리스트
conda list

// conda 통해 설치 가능한 패키지 검색
conda search "tensorflow"

conda에서 개발 준비하기

Anaconda 설치가 완료되면 conda 명령으로 TensorFlow를 사용할 환경을 구성하고 사용해 보자.

가상환경 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ conda create -n tensorflow_env

...

The following packages will be downloaded:

package | build
---------------------------|-----------------
pip-20.0.2 | py37_1 1.9 MB
tensorboard-2.0.0 | pyhb38c66f_1 3.3 MB
...

The following NEW packages will be INSTALLED:

_tflow_select: 2.3.0-mkl
...

Proceed ([y]/n)?

또한 python= 인자로 파이썬 버전을 지정할 수 있다.

1
$ conda create -n tensorflow python=3.8

현재 생성한 가상환경을 확인해 보자,

1
2
3
4
5
(base)$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/anaconda3-5.3.1
deep-learning /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep-learning

새로만든 conda 가상환경을 활성화 한다.

1
2
$ conda activate tensorflow_env
(tensorflow_env) qkboo@ ~$

가상환경에서 Jupyter Notebook 을 설치한다.

jupyter notebook 설치

활성화한 가상환경에서 Jupyter Notebook 을 설치한다.

1
(tensorflow_env)$ conda install jupyter notebook

필요시 nb-extension 설치

1
2
3
4
5
6
7
8
9
10
(tensorflow_env)$ conda install -c anaconda-nb-extensions nb_conda
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

environment location: /Users/qkboo/.pyenv/versions/anaconda3-5.3.1/envs/deep_learning

added / updated specs:
- nb_conda

2. anaconda & miniconda 복합환경

현재 시스템에 pyenv로 파이썬 환경이 anaconda, miniconda 그리고 python 3.9 등이 중복되어 설치되어 있다. pyenv 가 중심이 되어 conda 를 다루기 위해서 miniconda 를 우선으로 구성되어 있다. shell 스크립트 부분이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/qkboo/.pyenv/versions/miniconda3-latest/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh" ]; then
. "/Users/qkboo/.pyenv/versions/miniconda3-latest/etc/profile.d/conda.sh"
else
export PATH="/Users/qkboo/.pyenv/versions/miniconda3-latest/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<

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

현재 pyenv 로 설치한 파이썬 환경을 살펴보면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
qkboo@ ~$ pyenv versions
system
3.8.1
* 3.8.7 (set by /Users/qkboo/.pyenv/version)
3.8.7/envs/opencv4
3.8.7/envs/tf2_build
3.9.1
anaconda3-5.3.1
anaconda3-5.3.1/envs/opencv3
anaconda3-5.3.1/envs/opencv4
anaconda3-5.3.1/envs/py27
miniconda3-latest
miniconda3-latest/envs/deep_learning
miniconda3-latest/envs/django3
miniconda3-latest/envs/tf24_cpu
miniconda3-latest/envs/tf2_p37
miniconda3-latest/envs/tkinter
opencv4
tf2_build

conda 툴을 사용하는 anaconda, miniconda 가 혼재된 환경에서 pyenv로 가상환경을 즉시 활성화 시키면 conda 명령 실행에 혼선을 일으킨다. 예를 들어 위의 가상환경 anaconda3-5.3.1/envs/opencv4 을 pyenv로 활성화 하고 python, conda 명령을 실행해 보면

1
2
3
4
5
~$ pyenv shell opencv4
~$ pyenv version
opencv4 (set by PYENV_VERSION environment variable)
~$ which python
/Users/qkboo/.pyenv/shims/python

가상환경의 python 위치를 확인해 보고, conda 명령을 찾아 보자,

1
2
3
4
5
6
7
8
9
~$ pyenv which python
/Users/qkboo/.pyenv/versions/opencv4/bin/python

$ pyenv which conda
pyenv: conda: command not found

The `conda' command exists in these Python versions:
anaconda3-5.3.1
miniconda3-latest

pyenv 환경 아래 2개의 conda 때문에 혼선이 나타난다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 하고, conda 를 확인해 보면 명확하게 해당 파이썬 환경의 anaconda 의 가상환경을 가르키지만! conda env 명령의 결과는 다르게 나타낸다.
anaconda 뒤에 minicond를 설치해서 miniconda 가상환경이 우선으로 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
~$ pyenv shell anaconda3-5.3.1
~$ pyenv which conda
/Users/qkboo/.pyenv/versions/anaconda3-5.3.1/bin/conda
~$ conda env list
# conda environments:
#
base * /Users/qkboo/.pyenv/versions/miniconda3-latest
deep_learning /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/deep_learning
django3 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/django3
tf24_cpu /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf24_cpu
tf2_p37 /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tf2_p37
tkinter /Users/qkboo/.pyenv/versions/miniconda3-latest/envs/tkinter

그래서 가상환경 활성화시 가상환경 디렉토리를 지정해서 사용하자!

그래서 anaconda 와 miniconda 환경을 활성화 시키려면 shell, local, system 명령을 통해 설치된 파이썬 환경을 활성화 하고, 해당 파이썬 환경에서 가상환경을 다루는 것이 좋다.

예를 들어 현재 쉘 환경에서 파이썬 환경 ananconda3-5.3.1 을 사용하도록 실제 가상환경 위치를 지정해서 활성화 한다.

1
2
~$ conda activate .pyenv/versions/anaconda3-5.3.1/envs/opencv4/
(opencv4) ~$

pyenv-virtualenv 사용

pyenv-virtualenv

virtualenv를 사용하면 파이썬 런타임의 독립성을 한층 더 높일 수 있습니다. pyenv가 파이썬 버전을 관리하는 기능을 제공한다면, virtualenv는 파이썬 구동 환경을 관리합니다. pyenv를 이용하면 컴퓨터에 파이썬 버전 별로 1개의 파이썬 런타임을 설치하고 관리할 수 있습니다. virtualenv를 사용하면 파이썬 버전을 세분화하여 여러 개별 환경으로 구분하여 관리하는 기능을 제공합니다. 예를 들어서 python 3.5.2 런타임을 여러개 구성할 수 있고, 애플리케이션 별로 할당할 수 있습니다. 따라서, pyenv와 virtaulenv를 사용하면 매우 효과적입니다. 이러한 이유로 pyenv의 virtualenv 플러그인을 사용하는 것이 일반적입니다. pyenv-virtualenv 프로젝트는 https://github.com/yyuu/pyenv-virtualenv 에서 개발되고 있습니다.

pyenv-virtualenv 설치

pyenv-virtualenv는 OS별로 다음과 같이 설치할 수 있습니다.

macOS

pyenv-virtualenv 설치: homebrew

OS X는 homebrew를 이용하여 설치할 수 있습니다.

1
$ brew install pyenv-virtualenv

리눅스 pyenv-virtualenv 설치

pyenv를 pyenv-installer로 설치할 때 pyenv-virtualenv 설치가 포함됩니다. pyenv-installer로 pyenv가 설치되었다면 별도의 조치가 필요 없습니다.

pyenv로 virtualenv 생성

다음과 같은 명령으로 파이썬 환경을 구성합니다.

1
$ pyenv virtualenv <vertualenv-name>

은 생략 가능합니다. 버전을 생략할 경우 현재 시스템 버전으로 가상환경이 설정됩니다. virtualenv 플러그인으로 만든 가상환경인 경우 activate, deactivate 명령을 이용하여 활성화/비활성화합니다. 가상환경을 활성화/비활성화를 위해서는 다음 명령을 사용합니다.

1
$ pyenv activate <vertualenv-name>

가상환경 종료는 다음 명령을 사용합니다.

1
$ pyenv deactivate

가상환경을 삭제할 경우 다음과 같은 명령을 사용합니다.

1
$ pyenv uninstall <version>/<vertualenv-name>

버전을 설치해 봤으니 그 버전 위에 올라갈 virtualenv를 설치해보도록 하자. test라는 이름을 가진 virtualenv를 3.5.2버전 위에 설치해보자.

pyenv virtualenv [VERSION_NAME] [VIRTUALENV_NAME] 형식으로 입력해주면 된다.

1
$ pyenv virtualenv 3.5.2 test_virtualenv
1
2
3
4
5
$ pyenv versions

* system (set by PYENV_VERSION environment variable)
3.5.2
3.5.2/env/test_virtualenv

versions명령어로 3.5.2 위에 test_virtualenv라는 환경이 설치된 것을 확인할 수 있다.

쓰고있는 버전을 옮기려면 똑같이 shell 명령어를 사용하면 된다. activate명령어를 이용해도 된다.

1
$ pyenv shell[or activate] test

shell 명령어는 Python의 버전과 virtualenv에 모두 적용할 수 있는 명령어이고, activate 명령어는 virtualenv에만 사용이 가능하다. shell을 이용해서 다른 버전이나 virtualenv를 사용중이라면 pyenv shell system을 이용하여 기본 버전으로 되돌아올 수 있고, activate를 이용하여 virtualenv를 사용중이라면 pyenv deactivate를 이용하여 사용중인 virtualenv에서 나올 수 있다.

requirements.txt 생성

test를 하나의 Python 프로젝트라고 생각하자. 이곳에 프로젝트에 필요한 package들을 설치해야 한다. pip로 Django를 설치하고, freeze로 package들 목록을 추출해보자.

1
2
$ pip install django
$ pip freeze > requirements.txt

requirements.txt에 Django==1.10.1라고 현재 설치된 package가 적혀있다. 이는 pyenv파일에 독립적으로 설치된 package이고, 다른 virtualenv나 버전으로 옮기면 사용할 수 없게 된다. 이로써 의존성 관리 문제를 해결 하게 된 것이다.

다른 개발 환경에서 프로젝트에 설치된 패키지를 동기화하려면 virtualenv를 만들고, shell명령어로 사용 설정을 한 뒤에, requirements.txt파일을 받아서 다음과 같은 명령어를 입력한다.

1
$ pip install -r requirements.txt

requirements.txt라는 이름은 반드시 정해진 것이 아니라 package목록을 담는 파일이름으로 관습적으로 사용하는 것이다.

귀차니즘: autoenv

pyenv-virtualenv의 단점은 가상환경을 활성화하기 위해서 pyenv activate를 실행해야 한다는 것입니다. autoenv는 Python 프로젝트 진입시점시에 자동으로 virtualenv 환경 로딩하는 기능을 제공합니다. 가상 환경 활성화에 대한 귀차니즘을 없앨수 있습니다.

프로젝트 홈페이지는 다음과 같습니다.

https://github.com/kennethreitz/autoenv
설치

autoenv 설치

위에까지가 Python에만 종속되는 내용이었고, 이번에 설치할 autoenv는 Python뿐만 아니라 모든 명령어에 적용할 수 있다. 다음과 같은 명령어로 설치한다.

$ brew install autoenv
이번에도 .bash_profile에 설정을 해줘야한다. 다음과 같은 내용을 맨 밑에 넣어준다.

source $(brew –prefix autoenv)/activate.sh
autoenv를 이용한 자동화

autoenv는 터미널에서 디렉토리에 접근할 시에, .env파일을 찾아서 그 내용을 자동으로 실행시켜주는 간단한 기능이다. 그렇다면 test디렉토리를 만들어서, 디렉토리에 들어올 때 바로 test_virtualenv virtualenv로 설정되게 해보자! 명령어 한 줄을 입력하는 귀찮음을 덜 수 있는 것이다.

$ mkdir test_virtualenv
$ cd test_virtualenv
$ vim .env
.env파일안에 다음과 같은 내용을 입력하자.

pyenv shell test_virtualenv
제일 먼저 디렉토리에 들어가게 되면, .env의 내용을 실행할 것인지 물어보게 된다. 이 때 ‘y’를 입력해서 계속 실행되게 해야한다.

이제 터미널에서 test폴더에 들어갈 때마다 자동으로 test_virtualenv virtualenv를 쓰게 될 것이다! autoenv는 이것 뿐만 아니라 다른 분야에도 무궁무진하게 적용할 수 있다.

bash prompt

아래같이 bash 프롬프트에 가상환경을 표시해 주는 스크립이다.

image.png

참고