Pythonクックブック(3章)
dateutilモジュール。
インストール
サードパーティのモジュールなのでまずはインストールから。
サイトからtarballを持ってくるやり方もあるみたいだけど、easy_installでインストール可能なので、
[kobakoba0723@fedora13-intel64 ~]$ easy_install python-dateutil Searching for python-dateutil Reading http://pypi.python.org/simple/python-dateutil/ Reading http://labix.org/python-dateutil Best match: python-dateutil 2.0 Downloading http://labix.org/download/python-dateutil/python-dateutil-2.0.tar.gz Processing python-dateutil-2.0.tar.gz Running python-dateutil-2.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-sXQGAy/python-dateutil-2.0/egg-dist-tmp-rPlpIE Adding python-dateutil 2.0 to easy-install.pth file Installed /home/kobakoba0723/lib/python2.6/site-packages/python_dateutil-2.0-py2.6.egg Processing dependencies for python-dateutil Finished processing dependencies for python-dateutil [kobakoba0723@fedora13-intel64 ~]$
あれ、2.0が入っちゃった。。。
公開サイトを見ると、2.x系は1.5みたいなんだけどなぁ。まぁ、いいか。
relativedelta, rruleモジュール
dateutil.relativedelta は datetime.timedelta のような差分を扱うモジュール
>>> import dateutil >>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2011, 7, 4, 22, 26, 22, 723727) >>> now + dateutil.relativedelta.relativedelta(months=+1) datetime.datetime(2011, 8, 4, 22, 26, 22, 723727) >>> now + dateutil.relativedelta.relativedelta(months=+1, weeks=+1) datetime.datetime(2011, 8, 11, 22, 26, 22, 723727) >>> >>> today = datetime.date.today() >>> today datetime.date(2011, 7, 4) >>> today + dateutil.relativedelta.relativedelta(months=+1, weeks=+1) datetime.date(2011, 8, 11) >>> today + dateutil.relativedelta.relativedelta(months=+2, weeks=+1, hour=10) datetime.datetime(2011, 9, 11, 10, 0) >>>
relativedeltaを使うと、うるう年をモジュール側でちゃんと考慮して計算してくれる。
>>> datetime.date(2008, 1, 31) + dateutil.relativedelta.relativedelta(months=+1) datetime.date(2008, 2, 29) >>> datetime.date(2011, 1, 31) + dateutil.relativedelta.relativedelta(months=+1) datetime.date(2011, 2, 28) >>> >>> datetime.date(2000, 2, 29) datetime.date(2000, 2, 29) >>> datetime.date(2000, 2, 29) + dateutil.relativedelta.relativedelta(years=+1) datetime.date(2001, 2, 28) >>> datetime.date(2000, 2, 29) + dateutil.relativedelta.relativedelta(years=-1) datetime.date(1999, 2, 28) >>> >>> datetime.date(2000, 1, 1) + dateutil.relativedelta.relativedelta(nlyearday=60) datetime.date(2000, 3, 1) >>> datetime.date(2000, 1, 1) + dateutil.relativedelta.relativedelta(yearday=60) datetime.date(2000, 2, 29) >>>
つぎにrruleモジュールと思ってhelpでも眺めようと思ったらエラーが。。。
>>> help(dateutil.rrule) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute 'rrule' >>> from dateutil import rrule Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/kobakoba0723/lib/python2.6/site-packages/python_dateutil-2.0-py2.6.egg/dateutil/rrule.py", line 13, in <module> import _thread ImportError: No module named _thread >>>
どうも_threadっていうモジュールがないからインポート処理が進まない。
調べてみると_threadは python 3 のモジュールだから進まない。python 2.x では thread って名前だった。
やっぱり、python-dateutil-2.0だったからうまくいかないのか。
アンインストール&&再インストール
easy_installで入れたんだから、easy_installで削除出来るといいなと思ってググってると、
"-mxN"オプション + モジュール削除でアンインストールできる。
[kobakoba0723@fedora13-intel64 site-packages]$ easy_install -mxN python_dateutilSearching for python-dateutil Best match: python-dateutil 2.0 Processing python_dateutil-2.0-py2.6.egg Using /home/kobakoba0723/lib/python2.6/site-packages/python_dateutil-2.0-py2.6.egg Because this distribution was installed --multi-version, before you can import modules from this package in an application, you will need to 'import pkg_resources' and then use a 'require()' call similar to one of these examples, in order to select the desired version: pkg_resources.require("python-dateutil") # latest installed version pkg_resources.require("python-dateutil==2.0") # this exact version pkg_resources.require("python-dateutil>=2.0") # this version or higher [kobakoba0723@fedora13-intel64 site-packages]$ rm -rf python_dateutil-2.0-py2.6.egg/ [kobakoba0723@fedora13-intel64 site-packages]$ python Python 2.6.4 (r264:75706, Apr 1 2010, 02:55:51) [GCC 4.4.3 20100226 (Red Hat 4.4.3-8)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import dateutil Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named dateutil >>>
ちゃんとアンインストールできたようなので、次は1.5をインストールする。
easy_installで版数を指定する場合、"パッケージ名 == 版数"とやれば版数指定インストールが出来る。
[kobakoba0723@fedora13-intel64 python-dateutil-1.5]$ easy_install "python-dateutil == 1.5" Searching for python-dateutil==1.5 Reading http://pypi.python.org/simple/python-dateutil/ Reading http://labix.org/python-dateutil Best match: python-dateutil 1.5 Downloading http://labix.org/download/python-dateutil/python-dateutil-1.5.tar.gz Processing python-dateutil-1.5.tar.gz Running python-dateutil-1.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-WjExNi/python-dateutil-1.5/egg-dist-tmp-DH9yWO Adding python-dateutil 1.5 to easy-install.pth file Installed /home/kobakoba0723/lib/python2.6/site-packages/python_dateutil-1.5-py2.6.egg Processing dependencies for python-dateutil==1.5 Finished processing dependencies for python-dateutil==1.5 [kobakoba0723@fedora13-intel64 python-dateutil-1.5]$
さて、今度はrruleのヘルプが見れるといいな。
>>> import dateutil >>> help(dateutil.rrule) >>> dateutil.rrule.rrule(dateutil.rrule.MONTHLY, dtstart=datetime.datetime(2011, 07, 04)) <dateutil.rrule.rrule instance at 0x1896e18> >>>
よし、見れたし、なんかうまく動きそう。続きは明日やろう。
参考サイト
python dateutil@Labix
The Python Standard Library@Python v3.1.3 documentation
Python標準ライブラリ@Python 2.6.2 documentation
pythonモジュールのアンインストール@kokiyaの日記
setuptoolsでモジュールのバージョンを指定する方法@DSAS開発者の部屋
- 作者: Alex Martelli,Anna Martelli Ravenscroft,David Ascher,鴨澤眞夫,當山仁健,吉田聡,吉宗貞紀
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/06/26
- メディア: 大型本
- 購入: 11人 クリック: 423回
- この商品を含むブログ (85件) を見る