Pythonのパッケージ管理は何が良いの?

表題の通り。単なる愚痴である。

■ 環境

  • Python 2.7.12
  • pip 9.0.1
  • Ubuntu 16.04

■ python

Ubuntu 16.04でpythonを下記のようにインストールした。

$ sudo apt-get install python

確認。

$ which python
/usr/bin/python
$
$ python -V
Python 2.7.12
$

さてパッケージの管理は何でやるのが良いのだろう?`easy_install`とか`pip`とかを聞くのだが、`easy_install`で`pip`を入れて…とか聞くと「なんでよ!」と混乱してすぐに投げ出してしまう…。ということを繰り返してきた、また再度pythonに挑戦する。正確にはしざるをえない状況である。

あまりじっくりは調べていないのだが、とりあえず`pip`でやるのが王道らしいのでこれでいく。

$ sudo apt-get install python-pip

確認。

$ which pip
/usr/bin/pip
$
$ pip -V
pip 8.1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
$

これで”boto3“とかが使えそうである。というわけでインストール。

$ pip install boto3
  :
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
$

boto3“のインストール自体は成功したようだが、メッセージが表示されていた。`pip`をupgradeしろということのようだ。せっかくなのでupgradeもしておく。”apt“のパッケージとは差異が出るが気にしない。

$ pip install --upgrade pip
Collecting pip
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 1.1MB/s
Installing collected packages: pip
Successfully installed pip-9.0.1
$ pip -V
pip 9.0.1 from /home/ubuntu/.local/lib/python2.7/site-packages (python 2.7)
$

upgradeできたようである。これよりpythonライフを始めよう。

以上。

boto3の実行時エラー

Pythonでの実装は初めてで”boto3“を使ってAWSにアクセスしている。その中で下記のようなエラーが出て、さてどうしたものかと。

■ 環境

  • boto3
  • Python 2.7.12
  • Ubuntu 16.04

■ error message

当初は自身の実装内容がまずいのかと思っていたのだが、よく読んでみると実行しているホストの時間がズレているのが原因であるようだ。

botocore.exceptions.ClientError: An error occurred (SignatureDoesNotMatch) when calling the ListMetrics operation: Signature expired: 20170410T110918Z is now earlier than 20170411T100351Z (20170411T100851Z - 5 min.)

UbuntuはVirtualBoxで稼働させている。時間は特に合わせていない、かつVMを稼働させたままMacをsleepさせたりしているので、時間がズレているのであろう。時間を確認すると下記のようだ。

ubuntu@ubuntu-xenial:~$ date
Mon Apr 10 11:10:26 UTC 2017
ubuntu@ubuntu-xenial:~$

時間を同期する。`ntpdate`を使う。

ubuntu@ubuntu-xenial:~$ sudo apt-get update
ubuntu@ubuntu-xenial:~$ sudo apt-cache search ntpdate
  :
ntpdate - client for setting system time from NTP servers
  :
ubuntu@ubuntu-xenial:~$
ubuntu@ubuntu-xenial:~$ sudo apt-get install ntpdate

時間を合わせる。

ubuntu@ubuntu-xenial:~$ sudo ntpdate -v ntp.nict.jp

時間が現在時刻と同期したのを確認して再度実装したpythonのスクリプトを実行したところ、思い通りの結果が得られた。

エラーメッセージを見る感じでは、実際の時間と5分以内の誤差でないと正常に応答を返してくれないのであろうか。

以上。