はじめに

Python 環境をCent OS で構築する際の手順をメモする.
あくまでも構築手順に関するメモなので,実際に本番環境で構築する際は,今回の情報で本番環境を構築・運用するわけではない.
環境は以下の通りで,VMware 上の仮想マシンで構築する.

    • OS: Cent OS 7.5.1804

 

    • 仮想化ソフト: VMware Workstation Pro 15.5.6 build-16341506

 

    • CPU: 1 Processors

 

    • メモリ: 1 GB

 

    • ディスク: 50.0 GB

 

    Network Adapter: NAT (192.168.249.129/24)

やりたいことは以下のとおりである.

    • Python 3 のインストール

 

    • Qiskit のインストール

 

    • Anaconda のインストール

 

    • Jupyter のインストール

 

    Jupyter のサービス化

以下の手順からは,OS インストール済みで実施することを前提としている.
約束事として,#はroot ユーザー,$ は一般ユーザー,>>> はpython実行中を表すプロンプトとする.
初めて実施するので,遠回りや設定被りは上等です.

まず初めに,アップデートしておく.

# yum update 

Python 3 のインストール

標準で使用できるPython 2 ではなく,Python 3 を使用したいので,インストールする.

# yum update python3

インストール後,インストール確認も含めバージョン情報を表示する.
Python 3.6.8 がインストールされていることが分かる.

# python3 --version
Python 3.6.8

また,python コマンドで今回導入したpython3 を使用したいため,設定を行う.

# vim ~/.bashrc

.bashrc の末尾に,以下の内容を追記する.
追記後,一度ログアウトし,再度ログインする.

alias python="python3" 
alias pip="pip3"

試しに,python コマンドでバージョン確認してみる.
python3 が指定されていることが分かる.

# python --version
Python 3.6.8

Anaconda のインストール

pyenv のインストールにgit が必要なため,まずはgit をインストールする.

# yum install git

pyenv をインストールしていく.

# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
# pyenv install -l | grep anaconda
  anaconda-1.4.0
  anaconda-1.5.0
  anaconda-1.5.1
  anaconda-1.6.0
  anaconda-1.6.1
  anaconda-1.7.0
  anaconda-1.8.0
  anaconda-1.9.0
  anaconda-1.9.1
  anaconda-1.9.2
  anaconda-2.0.0
  anaconda-2.0.1
  anaconda-2.1.0
  anaconda-2.2.0
  anaconda-2.3.0
  anaconda-2.4.0
  anaconda-4.0.0
  anaconda2-2.4.0
  anaconda2-2.4.1
  anaconda2-2.5.0
  anaconda2-4.0.0
  anaconda2-4.1.0
  anaconda2-4.1.1
  anaconda2-4.2.0
  anaconda2-4.3.0
  anaconda2-4.3.1
  anaconda2-4.4.0
  anaconda2-5.0.0
  anaconda2-5.0.1
  anaconda2-5.1.0
  anaconda2-5.2.0
  anaconda2-5.3.0
  anaconda2-5.3.1
  anaconda2-2018.12
  anaconda2-2019.03
  anaconda2-2019.07
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
  anaconda3-4.1.1
  anaconda3-4.2.0
  anaconda3-4.3.0
  anaconda3-4.3.1
  anaconda3-4.4.0
  anaconda3-5.0.0
  anaconda3-5.0.1
  anaconda3-5.1.0
  anaconda3-5.2.0
  anaconda3-5.3.0
  anaconda3-5.3.1
  anaconda3-2018.12
  anaconda3-2019.03
  anaconda3-2019.07
  anaconda3-2019.10
  anaconda3-2020.02

最新のanaconda をインストールする.

# pyenv install anaconda3-5.3.1

設定をしていく.

# pyenv rehash
# pyenv global anaconda3-5.3.1
# echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.3.1/bin/:$PATH"' >> ~/.bashrc
# source ~/.bashrc
# conda update conda

バージョンを確認してみる.

# conda --version
conda 4.8.4

Qiskit のインストール

ここまでで,anaconda のインストールが完了したので,次にQiskit をインストールする.

# pip install qiskit

インストールされているか,確認する.

# conda list | grep qiskit
qiskit                    0.21.0                   pypi_0    pypi
qiskit-aer                0.6.1                    pypi_0    pypi
qiskit-aqua               0.7.5                    pypi_0    pypi
qiskit-ibmq-provider      0.9.0                    pypi_0    pypi
qiskit-ignis              0.4.0                    pypi_0    pypi
qiskit-terra              0.15.2                   pypi_0    pypi

次に,インストールされているQiskit のバージョンを確認する.

# python
>>> import qiskit
>>> qiskit.__qiskit_version__
{'qiskit-terra': '0.15.2', 'qiskit-aer': '0.6.1', 'qiskit-ignis': '0.4.0', 'qiskit-ibmq-provider': '0.9.0', 'qiskit-aqua': '0.7.5', 'qiskit': '0.21.0'}

確認が完了したら,Ctrl-D で,python を終了する.

Jupyter のインストール

次に,jupyter をインストールしてみる.
コマンド補完をしてみると,すでに jupyter がインストールされているようなので,実行してみると以下のエラーが出力された.

# jupyter --version
Traceback (most recent call last):
  File "/root/.pyenv/versions/anaconda3-5.3.1/bin/jupyter", line 7, in <module>
    from jupyter_core.command import main
ModuleNotFoundError: No module named 'jupyter_core'

一度conda からjupyter をインストールしてみる.

# conda install jupyter

すると,以下のようなエラーが出力されてインストールが完了しない.

failed with initial frozen solve. Retrying with flexible solve.
Solving environment: - 強制終了

ググってみて,以下のコマンドを実行してみた.

# conda update --all

上記のコマンドでもエラーがでた.次に試しに以下のコマンドを実行した.

# conda install -c menpo opencv

こっちはうまくいった.再度jupyter をインストールしてみる.

# conda install jupyter
Collecting package metadata (repodata.json): done
Solving environment: done

# All requested packages already installed.

ちゃんとインストールされているようにみえる.
バージョン情報を確認してみる.

# jupyter --version
4.4.0

ちゃんとインストールされていて,動作もする.

Jupyter Notebook の設定を行う.

# jupyter --path
config:
    /root/.jupyter
    /root/.pyenv/versions/anaconda3-5.3.1/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /root/.local/share/jupyter
    /root/.pyenv/versions/anaconda3-5.3.1/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /run/user/1000/jupyter
# mkdir ~/.jupyter
# touch ~/.jupyter/jupyter_notebook_config.py
# mkdir ~/jupyter_files
# touch ~/jupyter_files/test.py
# ipython
Python 3.7.0 (default, Oct  9 2018, 10:31:47) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:da72b0981831:41b14f79bbfeda08322cfdb3a056a58fc70c65ea'

In [3]: exit

Out[2] のパスワードのハッシュ値は次のコンフィグファイルの編集で使用するため,テキストエディタ等に控えておく.

vim ~/.jupyter/jupyter_notebook_config.py

コンフィグファイルに以下を追記する.
パスワードのハッシュ値については,ログインパスワードの設定のところで出力された値をそれぞれコピー&ペーストすること.

c = get_config()

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.password = u'sha1:da72b0981831:41b14f79bbfeda08322cfdb3a056a58fc70c65ea'
c.NotebookApp.notebook_dir = '/root/jupyter_files/'

Jupyter Notebook を起動する.本環境はお試し環境であり,root ユーザーで設定しているので,以下のコマンドを実行する.

# jupyter notebook --allow-root

その後,Web ブラウザを用いてhttp://localhost:8888/ にアクセスしてみる.

JN.png

アクセスできたので,先ほど設定したログインパスワードでログインしてみる.

JNlogined.png

無事ログインできた.先ほど作成した確認用のファイルtest.py も確認できる.

次に,ホストマシンのWeb ブラウザを用いてアクセスできるようにする.
ファイアウォールでポート8888 を許可する.

# firewall-cmd --add-port=8888/tcp --zone=public --permanent
success
# firewall-cmd --reload
success

ホストマシンのWeb ブラウザからhttp://192.168.249.129:8888/ にアクセスしてみる.

JN_host.png

無事にアクセスできた.

Jupyter のサービス化

Jupyter をsystemd で制御できるように設定する.まずは,jupyter のパスを確認する.

# which jupyter
/root/.pyenv/versions/anaconda3-5.3.1/bin/jupyter
# vim /etc/systemd/system/notebook.service

※以下の内容ではうまく実行できません

[Unit]
Description = Jupyter Notebook

[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/root/.pyenv/versions/anaconda3-5.3.1/bin/jupyter notebook
WorkingDirectory=/root/
User=root
Group=root
Restart=always

[Install]
WantedBy = multi-user.target
# systemctl daemon-reload
# systemctl start notebook

サービスの状態を確認すると,失敗していた.

# systemctl status notebook
● notebook.service - Jupyter Notebook
   Loaded: loaded (/etc/systemd/system/notebook.service; disabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 金 2020-09-18 15:21:44 JST; 1min 8s ago
  Process: 18766 ExecStart=/root/.pyenv/versions/anaconda3-5.3.1/bin/jupyter notebook (code=exited, status=1/FAILURE)
 Main PID: 18766 (code=exited, status=1/FAILURE)

 9月 18 15:21:44 localhost.localdomain systemd[1]: notebook.service: main process exited, code=exited, status=1/FAILURE
 9月 18 15:21:44 localhost.localdomain systemd[1]: Unit notebook.service entered failed state.
 9月 18 15:21:44 localhost.localdomain systemd[1]: notebook.service failed.
 9月 18 15:21:44 localhost.localdomain systemd[1]: notebook.service holdoff time over, scheduling restart.
 9月 18 15:21:44 localhost.localdomain systemd[1]: Stopped Jupyter Notebook.
 9月 18 15:21:44 localhost.localdomain systemd[1]: start request repeated too quickly for notebook.service
 9月 18 15:21:44 localhost.localdomain systemd[1]: Failed to start Jupyter Notebook.
 9月 18 15:21:44 localhost.localdomain systemd[1]: Unit notebook.service entered failed state.
 9月 18 15:21:44 localhost.localdomain systemd[1]: notebook.service failed.

原因をいろいろ考えていると,最初の起動は–allow-root を付与していたのに,今回の設定ファイルでは付与し忘れていたのを思い出した.
以下のように設定ファイルを再編集する.

[Unit]
Description = Jupyter Notebook

[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/root/.pyenv/versions/anaconda3-5.3.1/bin/jupyter notebook --allow-root
WorkingDirectory=/root/
User=root
Group=root
Restart=always

[Install]
WantedBy = multi-user.target

再度,設定ファイルの読み込みをしてサービスを起動させる.

# systemctl daemon-reload
# systemctl start notebook

サービスの状態を確認する.

# systemctl status notebook
● notebook.service - Jupyter Notebook
   Loaded: loaded (/etc/systemd/system/notebook.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2020-09-18 15:29:38 JST; 3min 8s ago
 Main PID: 19068 (jupyter-noteboo)
    Tasks: 1
   CGroup: /system.slice/notebook.service
           └─19068 /root/.pyenv/versions/anaconda3-5.3.1/bin/python /root/.pyenv/versions/anaconda3-5.3.1/bin/jupyter-notebook --...

 9月 18 15:29:38 localhost.localdomain systemd[1]: Started Jupyter Notebook.
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [W 15:29:39.391 NotebookApp] WARNING: The notebook server is listeni...nded.
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.393 NotebookApp] The port 8888 is already in use, trying...port.
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.423 NotebookApp] JupyterLab extension loaded from /root/...erlab
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.423 NotebookApp] JupyterLab application directory is /ro...r/lab
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.426 NotebookApp] Serving notebooks from local directory:...files
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.426 NotebookApp] The Jupyter Notebook is running at:
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.426 NotebookApp] http://(localhost.localdomain or 127.0....8889/
 9月 18 15:29:39 localhost.localdomain jupyter[19068]: [I 15:29:39.427 NotebookApp] Use Control-C to stop this server and s...ion).
Hint: Some lines were ellipsized, use -l to show in full.

今度は無事に立ち上がった見たい.
自動実行を有効にする.

# systemctl enable notebook
# systemctl is-enabled notebook
enabled

自動起動が有効化された.確認のため,ゲストOSを再起動したあと,ホストマシンから先ほどのURL でアクセスしてみたが,無事にアクセスできた.これで常にJupyter Notebook が立ち上がっている状態になり,Web ブラウザを用いて利用可能になった.

おわりに

今回試してみて思ったのが,root ユーザーでの実行は推奨されていないうえ,コマンドもオプションが必要になってきていろいろ面倒なので,サービスユーザーを作成して当ユーザーでサービスを実行したほうが良いと感じた.
あと,別記事で書いていますが,これやるならJupyterHub の方がよいと感じた.

参考文献

    • https://qiita.com/iamdaisuke/items/3671032a18f5c4bf37d1

 

    • https://qiskit.org/documentation/locale/ja/install.html

 

    https://ideanotes.cloud/2020/01/29/ubuntu-anaconda-opencv-failed/
广告
将在 10 秒后关闭
bannerAds