[Python3] PythonとDjangoをインストールする方法(pyenv)


Pythonインストール前に必要なパッケージをインストール

$ sudo yum groupinstall "Development tools"
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git

SQLite更新の必要性

ページ下の方にも記載しておきますが、SQliteのバージョンが古いとエラーになるので、事前にバージョンアップしておきます。
SQLiteのバージョンアップは下記のページが参考になります。
Django2.2で開発サーバー起動時にSQLite3のエラーが出た場合の対応
共通のライブラリにパスを渡すを忘れずに。
「vi ~/.bashrc」で「export LD_LIBRARY_PATH=”/usr/local/lib”」を追加。
これだけではすぐに実行されないので、下記コマンドで実行する
「source ~/.bashrc」
再起動時にも実行されるように
「vi ~/.bash_profile」でファイルを開き、「source ~/.bashrc」を追加する。

その他
「/etc/ld.so.conf」に「export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH」を追加。

pyenvのインストール

gitからpyenvをインストールします。gitコマンドを使います。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

Pathを通す

$ 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 --version
pyenv 1.2.17-2-ga8ca63f

Python3のインストール

$ pyenv install --list

ここに長いリストが出てくるので、インストールしたいバージョンを選びます。

バージョンを指定してインストール。

$ pyenv install 3.8.2

バージョン切替

まずは現状を確認してみます。

]# pyenv versions
* system (set by /root/.pyenv/version)
  3.8.2

* のついている行が現在のデフォルトです。システムにインストールされているものがデフォルトになっているのでCentOS7の場合、python2になります。

インストールしたpython3のバージョンを指定して切り替えます。

$ pyenv global 3.8.2

* の位置がpython3に変わりました。

#  pyenv versions
  system
* 3.8.2 (set by /root/.pyenv/version)

yumでpython3をインストールすると、yumが使えなくなるという現象がでます。CentOSのyumはpython2を使っているため。pyenvでインストールするとyumはそのまま使えました。

python3の起動

# python
Python 3.8.2 (default, Mar 20 2020, 14:19:33) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

pipのインストール

# cd /usr/local/src
# wget wget https://bootstrap.pypa.io/get-pip.py
--2020-03-15 16:12:57--  http://wget/
wget (wget) をDNSに問いあわせています... 失敗しました: 名前またはサービスが不明です.
wget: ホストアドレス `wget' を解決できませんでした。
--2020-03-15 16:12:57--  https://bootstrap.pypa.io/get-pip.py
bootstrap.pypa.io (bootstrap.pypa.io) をDNSに問いあわせています...
bootstrap.pypa.io (bootstrap.pypa.io)に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1807342 (1.7M) [text/x-python]
`get-pip.py' に保存中

100%[=======================================================================================================>] 1,807,342   9.86MB/s 時間 0.2s   

2020-03-15 16:12:57 (9.86 MB/s) - `get-pip.py' へ保存完了 [1807342/1807342]

終了しました --2020-03-15 16:12:57--
経過時間: 0.3s
ダウンロード完了: 1 ファイル、1.7M バイトを 0.2s で取得 (9.86 MB/s)
# python get-pip.py
Collecting pip
  Downloading pip-20.0.2-py2.py3-none-any.whl (1.4 MB)
     |████████████████████████████████| 1.4 MB 8.2 MB/s 
Collecting wheel
  Downloading wheel-0.34.2-py2.py3-none-any.whl (26 kB)
Installing collected packages: pip, wheel
  Attempting uninstall: pip
    Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-20.0.2 wheel-0.34.2

Djangoのインストール

# pip install django
Collecting django
  Downloading Django-3.0.4-py3-none-any.whl (7.5 MB)
     |████████████████████████████████| 7.5 MB 8.8 MB/s 
Collecting pytz
  Downloading pytz-2019.3-py2.py3-none-any.whl (509 kB)
     |████████████████████████████████| 509 kB 11.6 MB/s 
Collecting asgiref~=3.2
  Downloading asgiref-3.2.5-py2.py3-none-any.whl (19 kB)
Collecting sqlparse>=0.2.2
  Downloading sqlparse-0.3.1-py2.py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 7.3 MB/s 
Installing collected packages: pytz, asgiref, sqlparse, django
Successfully installed asgiref-3.2.5 django-3.0.4 pytz-2019.3 sqlparse-0.3.1

Djangoのバージョン確認

# python
>>> import django
>>> print(django.get_version())
3.0.4

Djangoのプロジェクト作成

アプリケーションを作成したいディレクトリで以下を実行

# django-admin startproject mysite

マイグレーションの実行

「python3.6 manage.py runserver xxx:xxx:xxx:xxx:8000」で起動してみます。python3.6の部分は自分のpythonのバージョンに合わせて変更。ポートは80にすると既に使われているとエラーが出ました。サーバーで事前にポート8000を開放しておきます。

起動してみると途中に赤い文字でエラーが出ており、ウェブに接続するとページが表示されません。

# python3.8 manage.py runserver xxx:xxx:xxx:xxx:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

March 19, 2020 - 15:52:40
Django version 3.0.4, using settings 'mysite.settings'
Starting development server at http://xxx.xxx.xxxx.xxxx:8000/
Quit the server with CONTROL-C.

「Run ‘python manage.py migrate’ to apply them.」と記載してあるので、マイグレーションを実行してみます。

# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

これでマイグレーション実行が完了しました。
ここでもう一度 runserverを実行してみます。

サーバーの起動

# python3.8 manage.py runserver xxx.xxx.xxx.xxx:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
March 19, 2020 - 15:55:14
Django version 3.0.4, using settings 'mysite.settings'
Starting development server at http://xxx.xxx.xxx.xxx:8000/
Quit the server with CONTROL-C.
[19/Mar/2020 15:55:23] "GET / HTTP/1.1" 200 16351
[19/Mar/2020 15:55:23] "GET /static/admin/css/fonts.css HTTP/1.1" 200 423
[19/Mar/2020 15:55:23] "GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184
[19/Mar/2020 15:55:23] "GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876
[19/Mar/2020 15:55:23] "GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692
Not Found: /favicon.ico
[19/Mar/2020 15:55:23] "GET /favicon.ico HTTP/1.1" 404 1978
[19/Mar/2020 15:57:34] "GET / HTTP/1.1" 200 16351

今度はエラーメッセージが無く、無事起動したようなメッセージになっています。
ブラウザで「http://xxx.xxx.xxx.xxx:8000/」にアクセスしてみます。

2020-03-20_01h10_34
このように「The install worked successfully! Congratulations!」とDjangoのロゴが表示されたら起動成功です。

Djangoサーバー停止

 netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        2      0 XXX.XXX.XXX.XXX.204:8000    0.0.0.0:*               LISTEN      697/python3.8       
tcp        0      0 0.0.0.0:2222            0.0.0.0:*               LISTEN      381/sshd            
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/init              
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      379/httpd           
tcp6       0      0 :::21                   :::*                    LISTEN      382/vsftpd          
tcp6       0      0 :::33060                :::*                    LISTEN      405/mysqld          
tcp6       0      0 :::3306                 :::*                    LISTEN      405/mysqld          
tcp6       0      0 :::111                  :::*                    LISTEN      112/rpcbind         
]# kill -9 697

kill -9 の後ろにPID番号を入れて実行します。

起動でエラーが出たときの対処方法

起動するとDisallowdHostエラーが出ました。setting.pyに以下の変更を加えると直ります。

ALLOWED_HOSTS = ['*']


Author: webmaster