【Python】基本的な動作確認

 

Pythonをインストールしたら、基本的なところから学習しましょう。

プログラミングを始める時の最初の数歩はかなり困難です。

しかし、最初のハードルを乗り越えたら後は楽しめるようになります。

私もシステムのバックアップスクリプトをPythonでプログラミングしていますが、最初は大変でした。

しかしある程度Pythonの書き方を覚えてくると「全然分からなくてどうしたらいいのか分からないという悩みから解放される」ので、プログラミングが楽しめるようになります。

私もまだまだPython初心者ですが、これからも時間を掛けてじっくりと学びたいと思います。

 

 

Python 3.6 から学ぶ

Python のメジャーバーションは「Python 2.7」と「Python 3.6」です。

CentOSの場合は大体「Python 2.7」がデフォルトでインストールされていると思います。

CentOSのデフォルトPythonのバージョンは、しばらくは「2.7」のままでいくと思います。

 

yumコマンドがPython2.Xでプログラミングされているため簡単にはバージョンアップができないと思います。

※yumコマンドはかなり完成度が高いプログラムです。

 

「Pythonのバージョン」とは、いったい何を表わしているのかというと「Pythonインタープリタ」のことを表わしています。

「コンパイル」は、ソースコードをコンパイルして「プログラム」を作ります。

「インタープリタ」とは、ソースコード(スクリプト)を1行1行実行します。

 

インタープリタにバージョンがあるというのは、「Python 2.7」の仕様で作ったプログラムは Python 2.7 のインタープリタ上で実行できますという意味です。

  • 2.7 のインタープリタ → Python 2.7 の仕様で作ったプログラムが実行できる
  • 3.6 のインタープリタ → Python 3.6 の仕様で作ったプログラムが実行できる

 

ちなみに、Pythonは「後方互換性(下位互換性ではありません)」がありません。

つまり Python 3.6 のインタープリタでは、前のバージョン(Python 2.7 や Python 2.5)で書かれたプログラムは動きません。

短くて単純なプログラムなら動くこともありますが、動作保証はされていません。

 

そのため、最新の「Python 3.6」の環境をインストールすることをお勧めします。

 

【Python】【CentOS7】Python 3.6.2 を「yum からインストールする手順」と「ソースからインストールする手順」

 

 

Pythonの動作確認

今回は以下の環境で動かします。

OS:Linux CentOS7

Python:3.6.2

 

[test@test07 ~]$ python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> ← Python プロンプト「>>>」が表示されます。

 

「>>>」は Python プロンプトです。

Python プロンプトは、システムプロンプト(Windowsならコマンドプロンプトの「>」など)とは異なります。

Python プロンプトが表示されない場合は、PATH が間違っている、正しく Python 環境が構築できてないなどの理由があります。

 

 

Python が Python ライブラリファイルを探すときのパスを表示します。

[test@test07 ~]$ python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib64/python2.7/site-packages/gtk-2.0',
'/usr/lib/python2.7/site-packages']
>>> exit() ← Python プロンプトを抜けるときは「exit()」を入力します。

 

 

次に Python 3.6 環境を見てみます。

[test@test07 ~]$ python3.6
Python 3.6.2 (default, Jul 18 2017, 22:59:34)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
'/usr/lib64/python36.zip',
'/usr/lib64/python3.6',
'/usr/lib64/python3.6/lib-dynload',
'/usr/lib64/python3.6/site-packages',
'/usr/lib/python3.6/site-packages']
>>> exit() ← Python プロンプトを抜けるときは「exit()」を入力します。

 

ちなみに、「sys.path」を表示して何が分かるのかというと、プログラミングをして「インポートエラー」になった際に、ライブラリが本当に存在しているかどうかチェックするのに役立ちます。

pipのインストール

pip は公開されている Python のコードやライブラリを管理するツールです。

pip コマンドを利用することで標準ライブラリだけではなく、サードパーティが公開している Python ライブラリが簡単に自分のコンピュータにインストールすることができます。

 

pip をインストールするには、まずは「get-pip.py」ファイルを入手します。

wget コマンドで直接ファイルを指定して「get-pip.py」をダウンロードします。

[test@test07 pip_download]$ wget https://bootstrap.pypa.io/get-pip.py
--2017-08-19 08:15:00-- https://bootstrap.pypa.io/get-pip.py
bootstrap.pypa.io (bootstrap.pypa.io) をDNSに問いあわせています... 151.101.0.175, 151.101.64.175, 151.101.128.175, ...
bootstrap.pypa.io (bootstrap.pypa.io)|151.101.0.175|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1595408 (1.5M) [text/x-python]
`get-pip.py' に保存中

 

100%[==============================================================>] 1,595,408 --.-K/s 時間 0.06s

 

2017-08-19 08:15:01 (27.1 MB/s) - `get-pip.py' へ保存完了 [1595408/1595408]

 

[test@test07 pip_download]$ ls -l
合計 1560
-rw-rw-r-- 1 test test 1595408 11月 7 2016 get-pip.py

 

 

「get-pip.py」ファイルをダウンロードしたらインストールします。

[test@test07 pip_download]$ ls -l
合計 1560
-rw-rw-r-- 1 test test 1595408 11月 7 2016 get-pip.py
[test@test07 pip_download]$ python3.6 get-pip.py
Collecting pip
Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
100% |????????????????????????????????| 1.3MB 897kB/s
Collecting setuptools
Downloading setuptools-36.2.7-py2.py3-none-any.whl (477kB)
100% |????????????????????????????????| 481kB 2.3MB/s
Collecting wheel
Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
100% |????????????????????????????????| 71kB 8.7MB/s
Installing collected packages: pip, setuptools, wheel

 

Exception:
Traceback (most recent call last):
  File "/tmp/tmp49oyk1n5/pip.zip/pip/basecommand.py", line 215, in main status = self.run(options, args)
  File "/tmp/tmp49oyk1n5/pip.zip/pip/commands/install.py", line 342, in run prefix=options.prefix_path,
  File "/tmp/tmp49oyk1n5/pip.zip/pip/req/req_set.py", line 784, in install **kwargs
  File "/tmp/tmp49oyk1n5/pip.zip/pip/req/req_install.py", line 851, in install self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "/tmp/tmp49oyk1n5/pip.zip/pip/req/req_install.py", line 1064, in move_wheel_files isolated=self.isolated,
  File "/tmp/tmp49oyk1n5/pip.zip/pip/wheel.py", line 345, in move_wheel_files clobber(source, lib_dir, True)
  File "/tmp/tmp49oyk1n5/pip.zip/pip/wheel.py", line 316, in clobber ensure_dir(destdir)
  File "/tmp/tmp49oyk1n5/pip.zip/pip/utils/__init__.py", line 83, in ensure_dir os.makedirs(path)
  File "/usr/lib64/python3.6/os.py", line 220, in makedirs mkdir(name, mode)

 

PermissionError: [Errno 13] 許可がありません: '/usr/lib/python3.6/site-packages/pip'
[test@test07 pip_download]$

 

 

「PermissionError: [Errno 13] 許可がありません:」のエラーが出力されました。

その理由ですが、インストールは「/usr/lib/~」配下にされます。

そのため、一般アカウントではなく「root」権限を持っていないとインストールできません。

 

 

sudo コマンドを使って再度インストールします。

[test@test07 pip_download]$ sudo python3.6 get-pip.py
Collecting pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |????????????????????????????????| 1.3MB 902kB/s
Collecting setuptools
  Downloading setuptools-36.2.7-py2.py3-none-any.whl (477kB)
    100% |????????????????????????????????| 481kB 2.3MB/s
Collecting wheel
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
    100% |????????????????????????????????| 71kB 8.4MB/s
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-9.0.1 setuptools-36.2.7 wheel-0.29.0
[test@test07 pip_download]$

 

 

pip の動作確認をします。

[test@test07 pip_download]$ pip -V
pip 9.0.1 from /usr/lib/python3.6/site-packages (python 3.6)

 

今回は「sudo python3.6 get-pip.py」と、Python 3.6 で pip をインストールしました。

その結果、pip で入手するライブラリは「/usr/lib/python3.6/~」ディレクトリ配下に配置されるので、今後 Python3.6 でプログラムをする際にインポートエラーになることはないでしょう。

 

「sudo python get-pip.py」で pip をインストールした場合、pip で入手したライブラリは Python 2.7 の方にインストールされるので、気を付ける必要があります。

「このライブラリは Python 2.7 だとインポートされるのに、なんで Python 3.6 で動かすと意味不明なインポートエラーになるんだろう??」と悩む際は、Python のバージョン違いを疑ってください。

 

 

シェルスクリプトのように Python を利用したい場合は先頭行にパスを記載する

シェルスクリプトの場合は、スクリプトの先頭行に「!#」の後にシェルの絶対パスを入れます。

パスがなければエラーになりますが、パスが正しければ指定したシェルで動きます。

当たり前と言えば当たり前ですが、例えば私の環境ではこれだけの Python がインストールされています。

/usr/bin/python2
/usr/bin/python
/usr/bin/python2.7
/usr/bin/python3.5
/usr/bin/python3
/usr/bin/python3.6

 

確実に Python 3.6 で実行したい、Python 2.7 だとライブラリの関係でエラーになる等、指定する必要がある場合は先頭行に記載することで確実にパスの Python で実行されます。

 

また、スクリプトとして実行する場合(cronなど)、環境変数がどうなるかハッキリしない場合も、ここに記載することで確実性が高まります。

 

 

 

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。