CentOS Version7に python3 のインストール
デフォルトのpython2を今回インストールしたpython3に変更する。
(パスを変えるだけで実際は削除していません。)
確認用のサンプルプログラムの作成で feedparserモジュール をインストールして
XMLをパースする実験です。
システムの確認
1 2 3 4 5 6 7 8 |
// python3.6のインストール // CentOSのバージョン確認 [root@xxxx python]# cat /etc/centos-release CentOS Linux release 7.7.1908 (Core) // デフォルトのでインストールされているpythonのバージョンを確認 [root@xxxx ~]# python -V Python 2.7.5 |
レポジトリの追加、python3.6を yumでインストール
1 2 3 4 5 6 7 8 9 10 11 12 |
// レポジトリーCentOS SCLo Software collections を追加 [root@xxxx ~]# yum -y install centos-release-scl-rh centos-release-scl // python3.6をSCLoからインストールからインストール [root@xxxx ~]# yum --enablerepo=centos-sclo-rh -y install rh-python36 //pathの設定 [root@xxxx ~]# scl enable rh-python36 bash // インストール後のpythonの確認 [root@xxxx ~]# python -V Python 3.6.3 |
python3.6のインストール状況確認
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 |
// python3.6 のインストール先の確認 [root@xxxx ~]# which python /opt/rh/rh-python36/root/usr/bin/python // pip のインストール先の確認 [root@xxxx ~]# which pip /opt/rh/rh-python36/root/usr/bin/pip // 今回確認用のプログラムで XMLのパースをするので // feedparser というモジュールをインストールしておきます。 [root@xxxx~]# pip install feedparser Collecting feedparser Downloading https://files.pythonhosted.org/packages/91/d8/7d37fec71ff7c9dbcdd80d2b48bcdd86d6af502156fc93846fb0102cb2c4/feedparser-5.2.1.tar.bz2 (192kB) 100% |████████████████████████████████| 194kB 7.3MB/s Installing collected packages: feedparser Running setup.py install for feedparser ... done Successfully installed feedparser-5.2.1 You are using pip version 9.0.1, however version 19.2.3 is available. You should consider upgrading via the 'pip install --upgrade pip' command. // pipのアップデートするようにとのメッセージがあったのでアップデートする。 [root@xxxx ~]# pip install --upgrade pip Collecting pip Downloading https://files.pythonhosted.org/packages/30/db/9e38760b32e3e7f40cce46dd5fb107b8c73840df38f0046d8e6514e675a1/pip-19.2.3-py2.py3-none-any.whl (1.4MB) 100% |████████████████████████████████| 1.4MB 1.3MB/s Installing collected packages: pip Found existing installation: pip 9.0.1 Uninstalling pip-9.0.1: Successfully uninstalled pip-9.0.1 Successfully installed pip-19.2.3 //「重要」 インストールしたpython3.6.3 の実行ファイルを /usr/bin/にコピーする。 //その際私の場合ファイル名を別名 python3.63 としました。 //Web上の実行ファイル xxxx.py で実行ファイルを指定する。 //オリジナルの設置場所から直接指定してもエラーになるようです。 // #!/usr/bin/env python3.63 と指定するとエラーはなくなりました。 [root@xxxx ~]# cp /opt/rh/rh-python36/root/usr/bin/python /usr/bin/python3.63 |
拡張子 py を CGI として扱うためにconfigファイルを新規作成
1 2 3 4 5 6 7 8 9 |
// # 拡張子 py を CGI として扱うためにconfigファイルを新規作成 [root@xxxx ~]# vi /etc/httpd/conf.d/cgi-enabled.conf <Directory "/var/www/html/cgi-enabled"> Options +ExecCGI AddHandler cgi-script .py </Directory> // httpdを再起動 [root@xxxx ~]# systemctl restart httpd |
pythonによるCGIのテストプログラムを作ってみました。
以下にそのソースです。
外部ファイル「CSS」のリンク、各地方の天気情報の行は FlexBoxを使用
pythonのモジュール feedparserを利用により簡単にXMLをパースすることができました。
ポイントとしてはCGIとして表示するファイルの行頭の python3.63をしていること。
この指定は /usr/bin/env python3.63 として読み込みはapacheに渡しているのでしょう。
また、CGIの属性 ([root@xxxx ~]# chmod 705 ファイル名)を忘れないようにすることですね。
このCGIの実行にははまりました。
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 |
#!/usr/bin/env python3.63 import sys import io # Web上で表示する文字コードを指定する。 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') import feedparser # 先ほどpipでインストールしたモジュールをインポート print ("Content-type: text/html\n") print ("<!DOCTYPE html>") print ("<html lang=\"ja\">\n") print ("<link rel = \"stylesheet\" href = \"style.css\">") print ("<head>\n") print ("<meta charset=\"UTF-8\">\n") print ("<title>Document</title>\n") print ("</head><body>\n") print ("<h1><img src=\"https://www.codingstock.jp/wp-content/uploads/tcd-w/logo.jpg?1569061779\"></h1>") d = feedparser.parse('http://xxxxxxxxxxxxxxxxx/index.xml') print( "<div class=\"wrapper\">") for entry in d.entries: if entry.title.find('[ PR ]'): print( "<div class=\"container\">", "<div class=\"title\">", entry.title, "</div>\n<div>", "<img src=\"", entry.url,"\"></div>", "</div>") print("</div>") print( "</body>\n</html>" ) |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
h1 { width:700px; margin: 0 auto; } .wrapper{ width:700px; margin: 0 auto; padding: 20px; background: #f0f0f0; } .container { display: flex; justify-content: space-between; border:dashed 1px #555; padding: 10px; margin-bottom: 10px; } |