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

참고

pyenv 설치

Python 의 pyenv 기반 개발환경

데모 환경은 OS X와 리눅스로 한정합니다.

파이썬에는 Python 2와 Python 3이 공존하고, 파이썬 별로 다수의 서브 버전이 존재합니다. 또한, 파이썬 커뮤니티는 엄청난 수의 패키지를 만들고 공유하고 있습니다. 이러한 패키지들은 개별적으로 여러 버전을 갖고 있습니다.

Python의 dependency 관리

Node 모듈으로 만들어지는 Javascript 프로젝트는 package.json으로 Dependency를 관리하고, Ruby 프로젝트는 gemfile실행파일으로 관리한다. 그렇다면 Python은 이 문제를 어떻게 해결할까?

Python은 Virtual Environment 를 지원하는 툴으로 이 문제를 해결한다. 각 프로젝트마다 쓰일 가상 환경(virtual environment)를 생성하여 그 프로젝트에 해당되는 Python을 활성화 한 후에 실행시킨다.

또한 가상 환경 안에 설치된 package들은 python의 freeze 명령어를 통해서 requirements.txt라는 파일로 추출되고, 이것을 git같은 버전 관리 도구로 관리하면, 새로운 개발 환경에서도 쉽게 이를 동기화시킬 수 있다.

pyenv란 무엇인가?

pyenv란 여러 버전의 Python을 쉽게 바꿔서 쓸 수 있게 해주는 도구이다. 예를 들면 3.5.2버전을 쓰다가, 명령어 한 줄로 2.7.12로 버전을 바꾸어서 쓸 수 있게 해준다. 이는 python-virtualenv와 같이 쓰면 더욱 활용도가 높아진다.

단, 윈도우는 지원을 안하고 별도의 [pyenv-win[(https://github.com/pyenv-win/pyenv-win) 을 사용할 수 있다.

여기 다루는 파이썬 가상환경에 대한 툴은 다음과 같이 요약할 수 있습니다.

  1. pyenv
  • 파이썬 버전을 관리하는 툴.
  • 하나의 컴퓨터에 다양한 파이썬 버전을 설치하고 관리.
  • 프로젝트 홈페이지: https://github.com/pyenv/pyenv
  1. pyenv-virtualenv
  • virtualenv은 파이썬 환경을 격리하는 툴.
  • pyenv-virtualenv은 virtualenv의 pyenv 확장 플러그인.
  • 파이썬 버전과 라이브러리의 완전한 격리 환경을 제공.
  1. autoenv
  • autoenv는 디렉터리 이동 시 실행되는 스크립트
  • pyenv-virtualenv 사용 시 불편한 수작업을 자동화.
  • 특정 프로젝트 폴더로 들어가면 .env파일 실행하여 가상환경 활성화.
  1. pip
  • 파이썬 라이브러리를 관리.

pyenv 설치

사전 준비

Python 3.4 이상은 요구한다. pip로 virtualenv 를 설치가 필요하다.

개발환경은

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

macOS 설치

필요 조건

pyenv를 OS X(맥)에 설치하기 위해서는 xcode command line tools과 zlib가 먼저 설치되어 있어야 합니다. xcode command line tools과 zlib를 OS X에서 설치하는 명령은 다음과 같습니다. 두 명령을 터미널 상에서 실행합니다.

1
2
$ sudo xcode-select --install
$ brew install homebrew/dupes/zlib

macOS Homebrew 설치

macoS는 homebrew 를 설치해서 사용하는 것을 가정하고 homebrew로 시스템 python 을 설치한다

pyenv를 OS X(맥)에 설치하기 위해서는 xcode command line tools과 zlib가 먼저 설치되어 있어야 합니다. xcode command line tools과 zlib를 OS X에서 설치하는 명령은 다음과 같습니다. 두 명령을 터미널 상에서 실행합니다.

1
2
$ sudo xcode-select --install
$ brew install homebrew/dupes/zlib
1
2
3
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
$ brew update

pyenv 설치: macOS

맥 네이티브로 pyenv를 사용해 Anaconda를 설치하고 텐서플로를 설치해 보자

1
2
brew update
brew install pyenv

pyenv 업그레이드는 다음 명령을 사용합니다.

1
$ brew upgrade pyenv

환경변수

pyenv 경로 설정을 위해 아래를 .bash_profile 에 추가한다.

1
2
3
4
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# pyenv 초기화
$eval "$(pyenv init -)"

CentOS, Oracle Linux, RHEL 설치

https://github.com/pyenv/pyenv/wiki#suggested-build-environment

사전 준비사항

RedHat 계열 혹은 Debian 계열에서 아래 같은 패키지가 필요할 수 있다.

https://github.com/pyenv/pyenv/wiki#suggested-build-environment

Yum 설치

1
2
$ sudo yum install -y zlib-devel bzip2 bzip2-devel \
readline-devel sqlite sqlite-devel openssl-devel xz xz-devel curl git

우분투 환경에서는 다음과 같은 패키지를 설치합니다.

1
2
3
sudo apt-get update
sudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

pyenv 설치: Linux

리눅스에서 pyenv 설치는 원격 스크립트 pyenv-installer를 사용한다.

pyenv-installer 를 이용하여 pyenv를 설치하면, 다음과 같은 pyenv 플러그인도 설치됩니다.

  • pyenv-doctor
  • pyenv-pip-rehash
  • pyenv-update
  • pyenv-virtualenv
  • pyenv-which-ext

pyenv-installer는 pyenv 설치 스크립트 입니다. rbenv-installer의 스타일을 빌려서 만든 것입니다. pyenv-installer는 리눅스용 쉘 스크립트 파일입니다. pyenv-installer를 이용하여 pyenv를 설치하기 위해서는 curl과 git이 사전에 설치되어 있어야 합니다.

1
curl https://pyenv.run | bash

pyenv.run 이 실행이 안되면 다른 설치 명령은 다음과 같습니다.

1
2
$ curl -L \
https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer \

설치후 아래 같이 경로 추가 메시지가 나온다.

1
2
3
4
5
6
# Load pyenv automatically by adding
# the following to ~/.bashrc:

export PATH="/home/qkboo/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

pyenv를 최신 버전으로 업데이트해야 할 경우 다음 명령을 수행합니다.

1
$ pyenv update

환경변수 적용 및 업데이트

다음 명령을 터머널에서 수행하여 환경변수를 등록합니다.

이 명령으로 아래 코드가 bash를 사용하는 상황을 가정합니다. zsh를 사용하실 때는 “~/.bash_profile“을 “~/.zshrc“로 변경하여 실행해야 합니다.

1
2
3
4
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

pyenv 사용

pyenv는 다음과 형태로 실행됩니다.

pyenv {sub-command} [{parameters}….]
pyenv가 제공하는 서브 명령은 다음과 같습니다.

서브 명령 설명
local 현재 디렉터리에 python 버전 확인 및 python 버전 지정
global 전역으로 설정된 python 버전
shell shell에 파이썬 버전을 지정
install python-build를 이용하여 파이썬 버전을 설치
uninstall 지정한 버전의 파이썬을 삭제
version 현재 활성화된 파이썬 버전 출력
versions pyenv로 설치되어 이용 가능한 버전을 출력
which 활성화된 파이썬 명령의 위치 출력
whence 지정한 명령을 포함하는 모든 파이썬 버전 출력

버전 설치

pyenv로 설치할 수 있는 버전의 목록을 보려면 다음과 같은 명령어를 입력한다.

1
$ pyenv install --list

[list들]
엄청나게 많은 버전들이 있을텐데, 여기서는 현재 최신 버전인 3.5.2버전을 설치하도록 하겠다. (목록에서 위로 올리다 보면 있다)

1
$ pyenv install 3.5.2

이렇게 하면 설치가 완료된다. 설치하는데에 시간이 조금 오래 걸린다. 설치된 목록을 확인하려면 다음과 같은 명령어를 입력한다.

1
2
3
4
$ pyenv versions

* system (set by PYENV_VERSION environment variable)
3.5.2

shell 명령

설치된 버전은 pyenv versions 명령으로 나타나고, 버전 이름 맨 앞의 *표시는 현재 사용하고 있는 Python버전이다. 현재 쉘에서 다른 버전으로 옮기려면 shell 명령어를 입력한다.

1
$ pyenv shell 3.5.2

Uninstall

This is handy because removing these versions is trivial:

1
$ rm -rf ~/.pyenv/versions/2.7.15

Of course pyenv also provides a command to uninstall a particular Python version:

1
$ pyenv uninstall 2.7.15

Global & Local

시스템 수준의 버전 지정은 global 명령과 local 명령으로 지정할 수 있다.

global 글로벌 설정

pyenv를 시스템 수준의 python 버전을 설정해서 시스템의 기본 파이썬 버전으로 지정할 때 유용하다.

다음은 컴퓨터의 글로벌 파이썬 버전을 파이썬 2.7.12에서 새로 설치한 파이썬 3.5.3으로 변경하는 예입니다. 아래 명령을 수행한 후, python을 실행하면 Python 3.5.3 버전이 실행됩니다

1
2
3
$ pyenv versions
* system
3.5.3 (set by /Users/qkboo/.pyenv/version)
1
2
3
4
5
6
7
8
9
$ python --version    ## 현재 파이썬 버전
Python 2.7.12
$ pyenv global 3.5.3 ## 글로벌 파이썬 설정 변경
$ python --version ## 현재 파이썬 버전
Python 3.5.3
$ pyenv versions ## pyenv 활성 버전 확인
system
* 3.5.3 (set by /Users/qkboo/.pyenv/version)
$

global 명령을 내리면 ~/.pyenv/version 파일을 해당 버전으로 지정한다

local 로컬 설정

특정 디렉터리에 활성화되는 파이썬 버전을 지정할 수 있습니다. 그리고 로컬 디렉토리 이외에서는 global 설정이 적용됩니다.

다음은 pyenv global과 pyenv local을 사용하는 방법의 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ pyenv versions           ## global 설정 3.5.3
system
2.7.13
* 3.5.3 (set by /home/opc/.pyenv/version)

$ python -V ## Global 파이썬 버전
Python 3.5.3
$ mkdir py2.7
$ cd py2.7/
$ pyenv local 2.7.13 ## local 설정 2.7.13
[py2.7]$ python -V
Python 2.7.13
[py2.7]$ ls -al
total 12
drwxrwxr-x 2 opc opc 4096 Sep 8 01:47 .
drwx------. 10 opc 500 4096 Sep 8 01:47 ..
-rw-rw-r-- 1 opc opc 7 Sep 8 01:47 .python-version
[py2.7]$ cat .python-version ## local 설정 파일
2.7.13
[py2.7]$ cd .. ## global 설정 3.5.3
$ python -V
Python 3.5.3
[opc@b4b8b6 ~]$

“pyenv local“를 실행하면 해당 디렉터리에 .python-version 파일이 생기고 이 파일에 활성화될 파이썬 버전이 기록됩니다.

Test suite

Pro Tip: A great way to get peace of mind that the version of Python you just installed is working properly is to run the built-in test suite:

1
2
$ pyenv global 3.8-dev
$ python -m test

This will kick off lots of internal Python tests that will verify your installation. You can just kick back and watch the tests pass.

Using your environment in IDEs

If you are not as sehell person, you can also use pyenv with your favourite IDE. Many editors and IDEs are aware of pyenv environments and will detect them for you. Then you will be able to select the environment for your current workspace from a dropdown menu.

참고

Jupyterlab 에서 password 생성해 systemd 서비스 이용

Jupyter Lab - systemd 운영

jupyterlab 을 Itel 기반의 Ubuntu 시스템에 설치하고 시스템 서비스로 등록하는 과정.

  1. Ubuntu 18.04
  2. node.js
  3. Anaconda 2020

Restart your shell so the path changes take effect. You can now begin using pyenv.

1
exec "$SHELL"

Anaconda 배포본 설치 (Ubuntu)

우분투용 다운로드

https://www.anaconda.com/products/individual#linux

다움로드안 쉘 스크립트를 시작한다.

1
bash ~/Downloads/Anaconda3-2020.02-Linux-x86_64.sh

To control whether or not each shell session has the base environment activated or not, run conda config –set auto_activate_base False or True. To run conda from anywhere without having the base environment activated by default, use conda config –set auto_activate_base False. This only works if you have run conda init first.

Anaconda 를 설치하면 대부분의 패키지가 내장되어 있다.

설치후 최신 conda 환경 base를 갱신해 준다.

1
conda update -n base -c defaults conda

nvm으로 Node.js 설치

nvm 설치

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash

스크립트로 설치를 완료하면 쉘 시작시 nvm 환경을 구성하기 위해서아래 스크립이 자동으로 현재 쉘 스크립트 파일 끝에 추가된다.

만약 아래 스크립이 추가 안되면 아래 스크립트를 (~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrc).)에 추가한다.

1
2
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

node.js 설치

1
2
3
4
5
6
~$ nvm ls-remote
v14.0.0
v14.1.0
v14.14.0
v14.15.0 (LTS: Fermium)
v14.15.1 (Latest LTS: Fermium)

lts 최신 버전 14.0을 설치한다.

1
2
3
4
5
6
7
8
~$ nvm install --lts 14.15.1
Downloading and installing node v14.15.1...
Downloading https://nodejs.org/dist/v14.15.1/node-v14.15.1-linux-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v14.15.1 (npm v6.14.8)
Creating default alias: default -> lts/* (-> v14.15.1)

node 버전을 확인

1
2
~$ node --version
v14.15.1

Conda 에서 jupyterlab 설치

Anaconda 나 Miniconda 를 설치하고 가상환경을 하나 생성한다.

1
2
3
4
$ conda create -n tf2 jupyterlab numpy scipy matplotlib tensorflow

$ conda activate tf2
(tf2) ~$

JupyterLab 실행

가상환경에서 jupyterlab 을 외부에서 접속 가능하도록 실행하자.

1
(base) $ jupyter-lab --no-browser --ip=* --port=8888 ~/Jupyter-Notebook/

LabConfig 디렉토리

1
2
3
4
5
6
7
8
9
10
11
12
13
$ jupyter --paths
config:
/home/qkboo/.jupyter
/home/qkboo/anaconda3/envs/py3/etc/jupyter
/usr/local/etc/jupyter
/etc/jupyter
data:
/home/qkboo/.local/share/jupyter
/home/qkboo/anaconda3/envs/py3/share/jupyter
/usr/local/share/jupyter
/usr/share/jupyter
runtime:
/home/qkboo/.local/share/jupyter/runtime

JupyterLab 환경 설정

jupyter 의 config 파일을 통해서 인증과 구성을 하자.

  • jupyterlab 3.x 버전: jupyter_server_config.py
  • jupyterlab 2.x 버전: jupyter_notebook_config.py

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

1
2
(tf2)$ jupyter lab --generate-config
Writing default config to: /home/qkboo/.jupyter/jupyter_server_config.py

패스워드 사용

jupyter_notebook_config.py 설정 파일에 비밀번호를 추가하려면 비밀번호를 생성해야 한다. 아래 명령으로 생성한다.

1
2
3
4
(tf2)$ jupyter lab password
Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to $HOME\.jupyter\jupyter_server_config.json

jupyter_server_config.json 파일로 암호가 생성된다. 생성한 암호를 jupyter_server_config.py 파일의 c.ServerApp.password 항목에 입력해 준다

1
2
3
4
5
[jupyter_server_config.py]

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

Jupyter Lab 3.x 버전

1
2
3
4
5
6
7
8
9
c.ServerApp.base_url = '/notebook'
c.ServerApp.enable_mathjax = True
c.ServerApp.password = ''
c.ServerApp.ip = '*'
c.ServerApp.port = 8888
c.ServerApp.port_retries = 10
c.ServerApp.open_browser = False

c.ServerApp.tornado_settings = {"websocket_max_message_size": 400 * 1024 * 1024}

Jupyter Notebook, Jupyterlab 2.x 버전:

1
2
3
4
5
6
7
8
9
c.NotebookApp.base_url = '/notebook'
c.NotebookApp.enable_mathjax = True
c.NotebookApp.password = ''
c.NotebookApp.ip = '*'
c.NotebookApp.port = 8888
c.NotebookApp.port_retries = 10
c.NotebookApp.open_browser = False

c.NotebookApp.tornado_settings = {"websocket_max_message_size": 400 * 1024 * 1024}

systemd 구성

nodejs, jupyter lab 을 시스템 시작 서비스로 등록한다. node.js 경로, jupyterlab 을 위한 시작 환경이 필요하다.

systemd의 unit 위치는 OS 마다 조금 다른 것 같다.

여기서는 /etc/systemd/system 밑에 jupyter.service 라는 유닛 파일에 아래 같이 파이썬 환경을 포함해 작성한다.

가상환경을 사용하고 있으므로 systemd unit의 ExecStart 의 python도 가상환경 위치로 지정해 주어야 한다.

유닛 파일: /etc/systemd/system/jupyter.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=My Jupyter-Notebook

[Service]
Type=simple
PIDFile=/run/jupyter-notebook.pid
# nodejs path
Environment="PATH=/home/qkboo/.nvm/versions/node/v12.18.0/bin/:/usr/local/bin:/ usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin"

# anaconda: tf2
ExecStart=/home/qkboo/anaconda3/envs/tf2/bin/jupyter-lab --config /home/qkboo/Home/mybook_config.py
User=qkboo
Group=qkboo
WorkingDirectory=/home/qkboo/Home/Jupyter-Notebook/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

유닛 파일 등록과 시작

jupyter.service 파일을 등록한다.

1
$ sudo systemctl enable jupyter

등록한 유닛 파일을 확인해 보자.

1
2
3
$ sudo systemctl list-unit-files | grep jupyter
jupyter_book.service disabled enabled
jupyter.service enabled enabled

그리고 데몬을 리로드 한다.

1
2
$ sudo systemctl daemon-reload
$ sudo systemctl start jupyter

실행한 서비스를 종료하려면

1
$ sudo systemctl stop jupyter

실행 상태를 확인한다.

1
$ sudo systemctl status jupyter

유닛 파일 등록 해지

1
2
$ sudo systemctl disable jupyter
Removed /etc/systemd/system/multi-user.target.wants/jupyter.service.

서비스 상태

해당 서비스 상태 확인

1
$ sudo systemctl status jupyter

구동에 실패한 서비스 보기

1
$ sudo systemctl list-units --state=failed

enabled 상태인 서비스 목록

1
$ sudo systemctl list-units --state=enabled

Tensorflow 2 : Build on macOS

2021년, macOS에서 최신 tensorflow 를 사용해 보려고 빌드과정을 거쳐 보았다.

macOS: build tesorflow

준비

  1. python
  • brew 등으로 최신 파이썬 설치

  • 여기서는 가상환경에서 설치한다 가정

    • pyenv, venv, conda …
  • 가상환경이 아닌 시스템 환경이면 --user 이용.

  1. 유틸 설치

numpy, wheel, keras_preprocessing 설치

  • 가상환경이 아닌 시스템 환경이면 --user 이용.

tensorflow 2.4.1 requires numpy~=1.19.2, but you have numpy 1.18.0 which is incompatible.

1
2
pip install -U pip numpy wheel
pip install -U keras_preprocessing --no-deps

설치된 패키지를 확인

1
2
3
$ pip freeze
Keras-Preprocessing==1.1.2
numpy==1.20.0

Xcode

xcode-select –install

Xcode installed on your macOS,Then execute the command:

1
sudo xcodebuild -license accept

What flags are supported by my CPU?

To check the instruction sets supported by your CPU, check the output of the following commands:

macOS

1
$ sysctl -a | grep "machdep.cpu.*features:"

Linux

1
$ cat /proc/cpuinfo | grep flags

Bazel 설치

tensorflow/configure.py 파일에서 BAZEL 버전을 찾는다. 이중 MAX 로 지시한 Bazel 버전을 사용한다.

1
2
3
_TF_CURRENT_BAZEL_VERSION = None
_TF_MIN_BAZEL_VERSION = '3.1.0'
_TF_MAX_BAZEL_VERSION = '3.99.0'

https://docs.bazel.build/versions/4.0.0/install-os-x.html 를 참고해서

https://github.com/bazelbuild/bazel/releases 에서 MIN, MaX 사이의 적합한 installer 버전을 설치한다.

다운로드

다운로드한다. 예를 들어 3.7.2 버전의 sh 설치 파일은 bazel-3.7.2-installer-darwin-x86_64.sh 이다.

1
2
$ export BAZEL_VERSION=3.7.2
$ curl -fLO "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-installer-darwin-x86_64.sh"

Run the installer

Run the Bazel installer as follows:

1
2
chmod +x "bazel-${BAZEL_VERSION}-installer-darwin-x86_64.sh"
./bazel-${BAZEL_VERSION}-installer-darwin-x86_64.sh --user

--user 플래그로 설치시 환경변수에 지정

1
export PATH="$PATH:$HOME/bin"
1
2
~$ bazel --version
bazel 3.7.2

bazel 설치: brew

~$ brew install bazel

빌드

텐서플로우 소스를 준비해서 bazel 을 사용해 빌드한다.

소스 준비

1
2
3
4
5
6
7
$ git clone https://github.com/tensorflow/tensorflow.git
'tensorflow_src'에 복제합니다...
remote: Enumerating objects: 1081830, done.
remote: Total 1081830 (delta 0), reused 0 (delta 0), pack-reused 1081830
오브젝트를 받는 중: 100% (1081830/1081830), 648.00 MiB | 5.20 MiB/s, 완료.
델타를 알아내는 중: 100% (881614/881614), 완료.
Updating files: 100% (24312/24312), 완료.

v2.3.2 빌드

git 체크아웃

1
2
3
4
5
6
7
8
9
$ git tag
0.12.0-rc0
...
v2.3.0
v2.3.1
v2.3.2


$ git checkout v2.3.2

필요한 유틸리티 패키지 설치

1
2
3
4
5
6
7
8
$ python -V
Python 3.8.7


$ pip install -U pip wheel
$ conda install "numpy>=1.8,<1.19"

$ pip install -U keras_preprocessing --no-deps

configure

configure 쉘 스크립이 LFCR 로 되어 ㅇㅣㅆ어서 CR로 변경해야 한다.

1
2
$ mv configure configure.orig
$ sed $'s/\r$//' configure.orig > configure

configure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$ ./configure
You have bazel 3.7.2 installed.
Please specify the location of python. [Default is /Users/qkboo/.pyenv/versions/tf2_build/bin/python3]:


Found possible Python library paths:
/Users/qkboo/.pyenv/versions/tf2_build/lib/python3.8/site-packages
Please input the desired Python library path to use. Default is [/Users/qkboo/.pyenv/versions/tf2_build/lib/python3.8/site-packages]

Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
No OpenCL SYCL support will be enabled for TensorFlow.

Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: n
No CUDA support will be enabled for TensorFlow.

Do you wish to download a fresh release of clang? (Experimental) [y/N]: n
Clang will not be downloaded.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native -Wno-sign-compare]:


Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.

Do you wish to build TensorFlow with iOS support? [y/N]: y
iOS support will be enabled for TensorFlow.

Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
--config=mkl # Build with MKL support.
--config=monolithic # Config for mostly static monolithic build.
--config=ngraph # Build with Intel nGraph support.
--config=numa # Build with NUMA support.
--config=dynamic_kernels # (Experimental) Build kernels into separate shared objects.
--config=v2 # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
--config=noaws # Disable AWS S3 filesystem support.
--config=nogcp # Disable GCP support.
--config=nohdfs # Disable HDFS support.
--config=nonccl # Disable NVIDIA NCCL support.
Configuration finished

빌드 시작

Intel 기반의 macOS에서 기본 배포되는 tensorflow@2.0 을 설치하고 tensorflow 를 실행하면,

1
2
3
4
5
6
7
8
9
10
11
(tf2_p37)~$ python
Python 3.7.9 (default, Aug 31 2020, 07:22:35)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>
>>> tf.add(1,2).numpy()
2021-02-01 14:11:37.000601: I tensorflow/core/platform/cpu_feature_guard.cc:145] This TensorFlow binary is optimized with Intel(R) MKL-DNN to use the following CPU instructions in performance critical operations: SSE4.1 SSE4.2 AVX AVX2 FMA
To enable them in non-MKL-DNN operations, rebuild TensorFlow with the appropriate compiler flags.
2021-02-01 14:11:37.001166: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 8. Tune using inter_op_parallelism_threads for best performance.
3

특화 명령 을 –copt 부분에 명시해서 빌드한다.

bazel build: Intel CPU 특화 명령 세트

빌드할 때 아래와 같이 cpu option을 추가로주면 해당 cpu에 대해 최적화된 빌드로 진행됩니다. 아래의 copt 들은 머신마다 다르며, tensorflow warning을 보고 적절히 추가해주면 됩니다.

1
$ bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.2 //tensorflow/tools/pip_package:build_pip_package

pip에 배포된 패키지와 동일하게 진행할 것이라면…

1
bazel build –config=opt //tensorflow/tools/pip_package:build_pip_package

GPU로 Tensorflow를 사용하고 싶다면… (위에 반드시 CUDA 옵션 선택 메시지에서 Y를 눌러야합니다. 그리고 아래와 같은 명령어를 입력하세요.)

1
$ bazel build –config=opt –config=cuda //tensorflow/tools/pip_package:build_pip_package

GPU cuda 를 포함한 빌드와 CpU 특화 를 함께

1
$ bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda //tensorflow/tools/pip_package:build_pip_package

패키지 빌드

pip 패키지를 생성하기 .whl 설치 패키지를 생성한다.
패키지 추출

1
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ../tensorflow_pkg

v2.4.1 빌드

1
2
3
4
5
6
7
8
9
10
$ git tag
0.12.0-rc0
...
v2.4.0
v2.4.0-rc0
v2.4.0-rc1
v2.4.0-rc2
v2.4.0-rc3
v2.4.0-rc4
v2.4.1
1
git checkout v2.4.1

configure 로 CPU 기반 지원을 구성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
$ ./configure
You have bazel 3.7.2 installed.
Please specify the location of python. [Default is /Users/qkboo/.pyenv/versions/miniconda3-latest/bin/python3]: /Users/qkboo/.pyenv/versions/tf2_p38/bin/python


Found possible Python library paths:
/Users/qkboo/.pyenv/versions/tf2_p38/lib/python3.8/site-packages
Please input the desired Python library path to use. Default is [/Users/qkboo/.pyenv/versions/tf2_p38/lib/python3.8/site-packages]

Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: n
No CUDA support will be enabled for TensorFlow.

Do you wish to download a fresh release of clang? (Experimental) [y/N]: n
Clang will not be downloaded.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -Wno-sign-compare]:


Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.

Do you wish to build TensorFlow with iOS support? [y/N]: y
iOS support will be enabled for TensorFlow.

Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
--config=mkl # Build with MKL support.
--config=mkl_aarch64 # Build with oneDNN support for Aarch64.
--config=monolithic # Config for mostly static monolithic build.
--config=ngraph # Build with Intel nGraph support.
--config=numa # Build with NUMA support.
--config=dynamic_kernels # (Experimental) Build kernels into separate shared objects.
--config=v2 # Build TensorFlow 2.x instead of 1.x.
Preconfigured Bazel build configs to DISABLE default on features:
--config=noaws # Disable AWS S3 filesystem support.
--config=nogcp # Disable GCP support.
--config=nohdfs # Disable HDFS support.
--config=nonccl # Disable NVIDIA NCCL support.
Configuration finished

파이썬 실행 가능을 확인하고 configure 후 빌드한다.

1
2
3
4
5
6
7
8
9
10
11
12
$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
...
...

INFO: Build options --action_env and --python_path have changed, discarding analysis cache.
INFO: Analyzed target //tensorflow/tools/pip_package:build_pip_package (406 packages loaded, 31116 targets configured).
INFO: Found 1 target...
Target //tensorflow/tools/pip_package:build_pip_package up-to-date:
bazel-bin/tensorflow/tools/pip_package/build_pip_package
INFO: Elapsed time: 16525.185s, Critical Path: 542.13s
INFO: 18390 processes: 150 internal, 18240 local.
INFO: Build completed successfully, 18390 total actions
  • macbook pro 15(2015), 8GB 에서 약 5시간 소요.

패키지 빌드

pip 패키지를 생성하기 .whl 설치 패키지를 생성한다.

1
2
3
4
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ../tensorflow_pkg

$ $ ls -l ../tensorflow_pkg/
-rw-r--r-- 1 qkboo admin 167M 2 1 13:54 tensorflow-2.4.1-cp38-cp38-macosx_11_0_x86_64.whl

패키지 설치

그리고 현재 파이썬 환경에 텐서 플로우를 설치한다

1
2
3
4
5
$ pip install ../tensorflow_pkg/tensorflow-2.4.1-cp38-cp38-macosx_11_0_x86_64.whl

...

Successfully installed absl-py-0.11.0 astunparse-1.6.3 cachetools-4.2.1 certifi-2020.12.5 chardet-4.0.0 flatbuffers-1.12 gast-0.3.3 google-auth-1.24.0 google-auth-oauthlib-0.4.2 google-pasta-0.2.0 grpcio-1.32.0 h5py-2.10.0 idna-2.10 markdown-3.3.3 numpy-1.19.5 oauthlib-3.1.0 opt-einsum-3.3.0 protobuf-3.14.0 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-2.25.1 requests-oauthlib-1.3.0 rsa-4.7 six-1.15.0 tensorboard-2.4.1 tensorboard-plugin-wit-1.8.0 tensorflow-2.4.1 tensorflow-estimator-2.4.0 termcolor-1.1.0 typing-extensions-3.7.4.3 urllib3-1.26.3 werkzeug-1.0.1 wrapt-1.12.1

빌드 후에 소스 트리 디렉토리에서 벗어나 설치된 텐서 플로우를 확인해 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ cd ~
$ python

>>> import tensorflow as tf



>>> import tensorflow as tf
>>> tf.add(1, 2).numpy()
3
>>> hello = tf.constant('Hello, TensorFlow!')
>>> hello.numpy()
b'Hello, TensorFlow!'



>>> t = tf.constant('logcg')
2020-01-18 20:04:43.088104: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7fefdc983db0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-01-18 20:04:43.088134: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version

[OpenCV] virtualenv 이용 설치

OpenCV 설치

OpenCV 를 파이썬 기본 패키지 관리자 pip 와 venv 가상환경을 이용해서 윈도우즈, 맥 및 리눅스에서 OpenCV 를 설치하는 과정을 살펴보겠다.

    1. 윈도우즈에서
    1. macOS에서
    1. Linux에서

1) 윈도우즈 pip 기반 OpenCV 설치

윈도우 기반에서 OpenCV 를 사용하기 위해서 pip 기반으로 설치를 해보자.

whl 파일로 설치

윈도우에서 opencv를 빌드된 버전을 설치하기 위해서 https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 에 있는 .whl 파일을 다운로드 받느다.

1
> pip install c:\downloads\opencv_python‑3.3.1‑cp36‑cp36m‑win_amd64.whl

pip

OpenCV의 main module만 사용한다면 아래처럼 설치하면 됩니다.

1
> pip install opencv-python

만약 main module과 extra module을 같이 사용하고 싶다면 아래처럼 설치합니다.

1
> pip install opencv-contrib-python

2) virtualenv 가상환경에서 openCV 설치

Python 가상환경과 Opencv

파이썬 개발시 virtualenv 를 사용한다면 OpenCV 라이브러리를 연결해 줄 필요가 있다. virtualenv 가상환경 생성시 파이썬 라이브러리는 복사가 안된다 그래서 가상환경 생성후에 cv2.so 라이브러리를 링크해줄 필요가 있다.

가상환경에 cv2.so 연결하기

python2 가상환경 cv3python2 가 있고, 여기에 OpenCV 를 사용하려면 다음 같이 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python2/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so

역시 python3 가상환경 cv3python3 가 있다면 python3 라이브러리에 있는 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python3/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/dist-packages/cv2.cpython-34m.so cv2.so

또한 cv2.so를 사용하기 위해서 각 가상환경에 numpy를 설치해 준다. Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.

1
2
3
4
5
$ workon cv3python2
(cv3python2) :~/ $ pip install numpy

$ workon cv3python3
(cv3python3) :~/ $ pip install numpy

마직막으로 파이썬을 실행하고 cv2를 테스트한다.

1
2
3
4
5
6
7
8
(cv3python3) ~/$ python
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

OpenCV 테스트

https://cinema4dr12.tistory.com/1283

파이썬을 실행해 cv2 라이브러리를 사용해 보자.

1
2
3
4
5
6
7
8
$ python
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

시스템에서 파이썬이 두 개 이상 설치되어 있으면 일반적을 Python2.7 버전이 기본 파아썬 이다.

1
2
3
4
5
6
7
8
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0-dev'
>>>

참조

[OpenCV] anaconda 이용 설치

OpenCV 설치

OpenCV 를 설치하기 위해서 소스 빌드, 패키지 설치 방법이 있다. 여기서 pip 기반 가상환경 그리고 Anaconda 를 사용한다는 가정에서 윈도우즈, 맥에서 OpenCV 를 설치하는 과정을 살펴보겠다.

    1. 윈도우즈에서
    1. macOS에서
    1. Linux에서

1) 윈도우즈에서 OpenCV 설치

윈도우 기반에서 OpenCV 를 사용하기 위해서 Anaconda 배포본을 사용하는 것이 가장 쉽다.

whl 파일로 설치

윈도우에서 opencv를 빌드된 버전을 설치하기 위해서 https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 에 있는 .whl 파일을 다운로드 받느다.

1
> pip install c:\downloads\opencv_python‑3.3.1‑cp36‑cp36m‑win_amd64.whl

pip

OpenCV의 main module만 사용한다면 아래처럼 설치하면 됩니다.

1
> pip install opencv-python

만약 main module과 extra module을 같이 사용하고 싶다면 아래처럼 설치합니다.

1
> pip install opencv-contrib-python

conda 명령으로 설치하기

Anaconda 3가 설치되어 있다면 명령어 한 줄 입력만으로도 거의 최신 버전(글 작성시 버전 3.6.0)의 Python-OpenCV 라이브러리를 설치할 수 있다:

1
> conda install -c conda-forge opencv

conda-forge에 등록되어 있는 OpenCV 라이브러리에 대한 상세한 설명은 링크를 통해 확인할 수 있습니다. 필요한 경우, python virtualenv를 생성하여 개발환경 패키지를 관리할 수 있다.

OpenCV 3.3의 가장 큰 변화는 Deep Learning in OpenCV 라고 할 수 있겠습니다. 해당 링크에서 Deep Learning 관련 추가된 사항을 확인할 수 있습니다. 이외에 자세한 변경 로그는 OpenCV Change Logs Version:3.3을 참고하시면 되겠습니다.

여담으로 최신 버전 OpenCV 3.3.1 버전 이후에는 JavaScript Interface가 추가되어 인터랙티브 웹-기반 OpenCV 어플리케이션 구현이 공식적으로 가능해졌다고 한다.


OpenCV 테스트

https://cinema4dr12.tistory.com/1283

파이썬을 실행해 cv2 라이브러리를 사용해 보자.

1
2
3
4
5
6
7
8
$ python
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

시스템에서 파이썬이 두 개 이상 설치되어 있으면 일반적을 Python2.7 버전이 기본 파아썬 이다.

1
2
3
4
5
6
7
8
$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0-dev'
>>>

Python 가상환경과 Opencv

파이썬 개발시 virtualenv 를 사용한다면 OpenCV 라이브러리를 연결해 줄 필요가 있다. virtualenv 가상환경 생성시 파이썬 라이브러리는 복사가 안된다 그래서 가상환경 생성후에 cv2.so 라이브러리를 링크해줄 필요가 있다.

가상환경에 cv2.so 연결하기

python2 가상환경 cv3python2 가 있고, 여기에 OpenCV 를 사용하려면 다음 같이 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python2/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/dist-packages/cv2.so cv2.so

역시 python3 가상환경 cv3python3 가 있다면 python3 라이브러리에 있는 cv2.so 라이브러리를 링크해 준다.

1
2
$ cd ~/.virtualenvs/cv3python3/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/dist-packages/cv2.cpython-34m.so cv2.so

또한 cv2.so를 사용하기 위해서 각 가상환경에 numpy를 설치해 준다. Raspberry Pi 2에서 numpy를 pip로 설치할 때 약 10분 이상 소요된다.

1
2
3
4
5
$ workon cv3python2
(cv3python2) :~/ $ pip install numpy

$ workon cv3python3
(cv3python3) :~/ $ pip install numpy

마직막으로 파이썬을 실행하고 cv2를 테스트한다.

1
2
3
4
5
6
7
8
(cv3python3) ~/$ python
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>

Gstreamer

1
$ sudo apt install python3-gst-1.0

참조

openSUSE - 과학계산을 위한 Python, Jupyter Notebook

이 글은 OpenSuse LEAP 15 에서 과학계산을 위한 파이썬 환경을 위한 Jupyter Notebook을 설치하는 과정을 요약하고 있다.

이 글에서는 시스템 패키지로 Python3, jupyter-notebook 을 설치하고, 파이썬 가상환경에서 과학계산 파이썬 모듈을 설치한 후에 Jupyter notebook 을 운영하도록 한다.

과학계산을 위한 Python Jupyter 환경

아래 같은 플랫폼에서 시스템 패키지 소프트웨어와 파이썬 모듈을 설치하는 과정이다.

  • Raspberry Pi 3
  • openSUSE LEAP 42.3, 15.0, 15.1
  • Jupyter Notebook
  • Python 그래프 matplotlib 및 pillow 이미지 라이브러리
  • 과학계산 모듈: numpy, scipy 등
  • 파이썬 가상환경
    • pandas
자세히 보기

Python 과학계산을 위한 Jupyter Notebook - macOS

과학계산을 위한 Jupyter 설치 및 구성까지 요약하고 있다.

과학계산을 위한 Python Jupyter

Raspberry Pi 3 위에 설치한 openSUSE LEAP 42.3 과 15.0 에서 과학계산을 위한 Python 개발환경과 Jupyter Notebook 환경을 정리한다.

  • 개발 프론트 엔드: Jupyter
  • 과학계산 모듈: numpy, scipy 등

Python과 Virtualenv 환경을 더 알고 싶으면 다음 두 링크에 자세한 설명이 있다.

자세히 보기

Python - 과학계산을 위한 Jupyter(pip)

과학계산을 위한 Python3 및 pip를 사용한 scipy, jupyter 설치 및 구성을 요약하고 있다.

https://packaging.python.org/guides/installing-scientific-packages/

과학계산을 위한 Python Jupyter

과학계산을 위한 Python 과 Jupyter Notebook 환경을 정리한다.

  • 개발 프론트 엔드: Jupyter
  • 과학계산 모듈: numpy, scipy 등
자세히 보기