dots girls Advent Calendar 2015の18日目の記事です。
はじめまして、373_mina_miです。
Qiita初投稿がいきなりアドベントカレンダーでかなり緊張しています。
が、rllllho氏になんか書いて!!と言われたので頑張って書きます。
ぐだぐだ過ぎますが全ては私に紹介したrllllho氏のせいです!
今回の記事について
- どうしよう、Advent Calenderに書くネタがない!
- 最近Pythonを使い始めたので折角だしなにかやってみるか!
- 前からやってみたかったしTwitterのAPIで何かできんかなー
と、いうことでPythonド素人が開発環境作るところから、サンプルコードを動かすところまで3日(実作業時間10h)でやった時に引っかかったポイントをひたすらあげまくる誰得な記事です。
同じエラーで引っかかった人が助かればいいな……
実行環境
- ホストOS:Windows 8.1(64bit)
- VirtualBox 5.0.10
- OS:Ubuntu 14.04 LTS 日本語 Remix
- Python 2.7.9
基本的には
Python で Twitter から情報収集 (環境構築編)
Python で Twitter から情報収集 (Twitter API 編)
のページを参考にさせていただきました。
多分、そちらの参考ページだけで普通はさくさく実行できると思われます……
最終的に上手く行った手順
エラー箇所とエラー内容は見にくくなったのであとでまとめました。
Python2.7.9をソースコードからビルド
エラー発生時にOpenSSLはPython2.7.6だと動かない?
的な文章を発見したのでわざわざ入れなおしたのですが。
後で試したら2.7.6でも実行できたので多分ここは不要だと思われます
事前に
# OpenSSLをインストール
$sudo apt-get install libssl-dev
# zlibをインストール
$ sudo apt-get install zlib1g-dev
で必要なものを入れた状態でソースファイルからビルド
$sudo wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
$tar xvzf Python-2.7.9.tgz
$cd Python-2.7.9
$./configure --prefix=/opt/python2.7.9 --enable-unicode=ucs4 --with-zlib --with-ensurepip=install
$make
$sudo make install
これでインストール完了。
$ /opt/python2.7.9/bin/python -V
Python 2.7.9
で、きちんとPython2.7.9がインストールできたことも確認!
virtualenvでPythonのバージョンを使い分けて環境を作る
virtualenvをインストール
sudo apt-get install python-dev python-virtualenv
今回はホームディレクトリ直下にtwi-pyディレクトリを作ってPython2.7.9環境を構築しました。
そのまま素直に実行するとエラーが出るので
$sudo easy_install virtualenv==1.10.1
を実行してから
$virtualenv --python=/opt/python2.7.9/bin/python twi-py
Python環境の切り替えは作成したtwi-pyに移動してから
$ source bin/activate
これでプロンプトに(twi-py)
とついていればOK。
この状態でPythonのバージョンを確認したら、2.7.9になっているはず!
pip installでOAuth認証用Pythonライブラリを入れる
上記のモジュールを入れた状態だと
Python で Twitter から情報収集 (Twitter API 編)
の通りでさくっと進むので割愛します。
入れなかった場合のエラー祭りは下の方に……
サンプルコードの実行
Python で Twitter から情報収集 (Twitter API 編)
の通りでさくっと進むのでry
dots.女子部
で検索してみたところ
(twi-py)***@***-VirtualBox:~/twi-py$ python twi-sample1.py
tweet_id: 676300237133090817
created_at: Mon Dec 14 07:18:36 +0000 2015
user_id: 1703590964
user_desc: 「dots.」はいつでも、どこでも、知りたいときに、興味のある内容の勉強会を探せるエンジニア勉強会情報サービスです。
screen_name: eventdots
user_name: eventdots
とりあえずdots.は引っかかった模様。
ちゃんとパラメータとか理解してまた色々やってみたいけど今回はとりあえずここまで!
ぶっちゃけAdvent Calenderに間に合わせるのにはここが限界でした_(:3」 ∠)_
エラーで引っかかった所と原因
というわけで。
三日間かかって、やっとこさサンプル動かすだけになった原因を晒します。
誰得感は否めませんが、きっと世の中には同じエラーに遭遇する人がいるはず……!!
ubuntu14.04インストールまで
「VirtualBoxをインストールしてその上にUbuntuのせるだけ」
と、思ったらまず引っかかったのが画面の解像度。
何故か画面サイズが640×480から変更できない。
ぐぐった結果
VirtualBox にインストールした Ubuntu の画面サイズ(解像度)を640×480以外に変更する方法
を発見、この通りにすることで無事解決。
virtualenvで環境が作れない
virtualenv --python=/opt/python2.7.9/bin/python twi-py
しようとしたら、エラー。
***@***VirtualBox:~$ virtualenv --python=/opt/python2.7.9/bin/python twi-py
Running virtualenv with interpreter /opt/python2.7.9/bin/python
New python executable in twi-py/bin/python
Installing setuptools, pip...
Complete output from command /home/ホームディレクトリ/twi-py/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/share/python-virtualenv/pip-1.5debian1-py2.py3-none-any.whl/pip/__init__.py", line 10, in <module>
File "/usr/share/python-virtualenv/pip-1.5debian1-py2.py3-none-any.whl/pip/util.py", line 18, in <module>
File "/usr/share/python-virtualenv/pip-1.5debian1-py2.py3-none-any.whl/pip/_vendor/distlib/version.py", line 14, in <module>
File "/usr/share/python-virtualenv/pip-1.5debian1-py2.py3-none-any.whl/pip/_vendor/distlib/compat.py", line 31, in <module>
ImportError: cannot import name HTTPSHandler
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 2339, in <module>
main()
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 825, in main
symlink=options.symlink)
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 993, in create_environment
install_wheel(to_install, py_executable, search_dirs)
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 961, in install_wheel
'PIP_NO_INDEX': '1'
File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 903, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /home/ホームディレクトリ/twi-py/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1
結論としては
【エラー対策】OSError: Command ・・・ "import sys, pip; sys...d"] + sys.argv[1:]))" setuptools pip failed with error code 1
を参考に、上の成功例で書いたように
$sudo easy_install virtualenv==1.10.1
を実行してからvirtuslenv
すれば構築できました。
あとそもそもzlibが無いと怒られていた気もするんですが、ログ取り損ねた為詳細わすれました……
pip installできない
Python2.7.9だと本来pipが入っているそうなんですが、
参考にした記事通りにpip installしようとすると
(twi-py)***@***VirtualBox:~/twi-py$ pip install requests requests_oauthlib
Traceback (most recent call last):
File "/home/ホームディレクトリ/twi-py/bin/pip", line 9, in <module>
load_entry_point('pip==1.4.1', 'console_scripts', 'pip')()
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
return ep.load()
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pip/__init__.py", line 10, in <module>
from pip.util import get_installed_distributions, get_prog
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pip/util.py", line 17, in <module>
from pip.vendor.distlib import version
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pip/vendor/distlib/version.py", line 13, in <module>
from .compat import string_types
File "/home/ホームディレクトリ/twi-py/lib/python2.7/site-packages/pip/vendor/distlib/compat.py", line 31, in <module>
from urllib2 import (Request, urlopen, URLError, HTTPError,
ImportError: cannot import name HTTPSHandler
調べたところデフォルトだとpipは入っていないらしいので、
Python2.7.9とPython3.4.xをpip付きでインストールする。
を参考にpipをインストール。しようとしたら今度は
open sslがないと怒られた。
あと、そもろもvirtualenvで環境作ろうとしたらzlibも無いと怒らてた気がする。
で、結論としては
事前に
# OpenSSLをインストール
$sudo apt-get install libssl-dev
# zlibをインストール
$ sudo apt-get install zlib1g-dev
した上でPythonのインストールをconfigureからやり直す!
ということで、上に書いた成功例の所にたどり着きました。
サンプルファイルを実行しようとしたらエラー
やっとpip-installをくぐり抜けこれでサンプルを実行できる!!
と思ったら遭遇したエラー。
(twi-py)***@***VirtualBox:~/twi-py$ python twi-sample1.py
Error code: 401
Traceback (most recent call last):
File "twi-sample1.py", line 63, in <module>
main()
File "twi-sample1.py", line 19, in main
for tweet in tweets["statuses"]:
TypeError: 'NoneType' object has no attribute '__getitem__'
TypeError: 'NoneType' object has no attribute '__getitem__'
?
オブジェクトの型が違う?でもこれどうやらモジュールとかのエラーではなさそう?
※私は毎回文の最後に;つけて怒られる程度のPython初心者なので察してください
で、結論。API Keyのコピペミスでした……
。そして、これが発覚して無事Python2.7.9でサンプルが実行できたあと、
もしかして……と思いPython2.7.6で同様にvirtualenv作ってやってみたら……
案の定無事動きました。
コピペミス怖い!!!
ただ、SSLやらなんやらでエラーも出てたのでその辺をapt-getでちゃんと入れてなかったのが原因だった気もするんですが。
ただ、pip周りにてこずってPython2.7.9入れるのに丸二日以上かけたので、ちゃんと正しくコピペできていれば三日かけたらちょっとはそれっぽい何かができた気がして割と全力で落ち込んでます。
が、まあ趣味だしいいか……