オープンデータとプログラミング

Tag Archive for python

pipでPIL(画像ライブラリ)のインストールがうまくいかない場合の解決方法(メモ)

python

pipでPIL(画像ライブラリ)をインストールしようとしてうまくいかなかった場合の対処方法に関するメモです。

PILは古い(2009年開発終了)のでPillowの使用をお勧めします。PIL向けのソースはほぼそのままで動くと思います。
環境:
python 2.7.11
CentOS release 6.7 (Final)

いろいろネットの情報を参考にしてpipを実行しましたがエラーがでてうまくいきません。

$pip install PIL --allow-external PIL --allow-unverified PIL

エラー内容は以下のとおりです。

DEPRECATION: --allow-external has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.
DEPRECATION: --allow-unverified has been deprecated and will be removed in the future. Due to changes in the repository protocol, it no longer has any effect.
Collecting PIL
  Could not find a version that satisfies the requirement PIL (from versions: )
No matching distribution found for PIL

このような場合は、以下のサイトからソースをダウンロードしてコンパイルします。

最新版をDLします。

Python Imaging Library 1.1.7 Source Kit (all platforms) (November 15, 2009)

適当な場所に解凍したら、ディレクトリに降りてsetup.pyを実行。

$python setup.py install

途中、freetypeのヘッダまわりでエラーになる場合があります。

_imagingft.c:73:31: error: freetype/fterrors.h: そのようなファイルやディレクトリはありません
_imagingft.c:78: error: expected expression before ‘static’
_imagingft.c: In function ‘getfont’:
_imagingft.c:132: error: ‘library’ undeclared (first use in this function)
_imagingft.c:132: error: (Each undeclared identifier is reported only once
_imagingft.c:132: error: for each function it appears in.)
_imagingft.c:144: 警告: passing argument 1 of ‘FT_New_Face’ from incompatible pointer type

この解決方法は、シンボリックリンクを作成してあげればOKです。
※freetypeのインストール場所は環境によって異なる場合があるかもしれませんのでよく確認してください

ln -s /usr/include/freetype2/freetype /usr/local/include/freetype

シンボリックリンクを作成したら再度、setup.pyを実行。

$python setup.py install

以上で完了です。

Pythonで”TypeError: argument of type ‘int’ is not iterable”が出てしまったときのチェックポイント

python

こんにちはPythonをいじっていて、以下のようなエラーに出てしまうことはありませんか?


”TypeError: argument of type ‘int’ is not iterable”

iterableといわれてもさっぱりですが、Python Japanのサイトに説明がありますので見てみましょう。

iterable
(反復可能オブジェクト) 要素を一つずつ返せるオブジェクトです。

反復可能オブジェクトの例には、(list, str, tuple といった) 全てのシーケンス型や、 dict や file といった幾つかの非シーケンス型、あるいは __iter__() か __getitem__() メソッドを実装したクラスのインスタンスが含まれます。

反復可能オブジェクトは for ループ内やその他多くのシーケンス (訳注: ここでのシーケンスとは、シーケンス型ではなくただの列という意味)が必要となる状況 (zip(), map(), …) で利用できます。

反復可能オブジェクトを組み込み関数 iter() の引数として渡すと、オブジェクトに対するイテレータを返します。このイテレータは一連の値を引き渡す際に便利です。反復可能オブジェクトを使う際には、通常 iter() を呼んだり、イテレータオブジェクトを自分で扱う必要はありません。 for 文ではこの操作を自動的に行い、無名の変数を作成してループの間イテレータを記憶します。

ここまで読んでお分かりだと思いますが、要するにintは反復可能オブジェクトではないということです。

具体的な例をみてみましょう。

よくはまる例としては、ある文字(列)が文字列中に含まれるか判定するときに使う、演算子”in”があります。

>>> "1" in "1234"
True
>>>

これはOKですが、ダブルクォーテーションを外すとNGです。

>>> 1 in 1234
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'int' is not iterable

このように直接、数値が記述されている場合は一目瞭然ですが、実際のプログラムでは変数で書かれている場合がほとんどです。
変数で記述されている場合は一見してわからない場合も多いのではないでしょうか。






Pythonでディープラーニングを学ぶならこの本がおすすめ(アマゾンで購入)

Pythonでディープラーニングを学ぶならこの本がおすすめ(楽天で購入)

PyQueryを使ったアプリをpy2exeしたときに動かなかったときのメモ

python

PyQueryを使ったアプリをpy2exeしたときに、実行時に「ImportError: No module named cssselect」がでることがあります。

ちょっとハマぅたのでメモを残しておきます。

Traceback (most recent call last):
  File "XXXXXXXXXXXXXX.py", line XX, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "f2.pyo", line 4, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "pyquery\__init__.pyo", line 11, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "pyquery\pyquery.pyo", line 6, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "pyquery\cssselectpatch.pyo", line 6, in <module>
ImportError: No module named cssselect

この問題の解決手順は次のとおりです。

githubからcssselectのZIPしてきて解凍します。

https://github.com/SimonSapin/cssselect

解凍したファイルの中に次のようなフォルダ・ファイルがありますので、
これをC:\Python27\Lib\site-packages配下に入れるとエラーがでなくなりました。

cssselect/__init__.py
cssselect/parser.py
cssselect/tests.py
cssselect/xpath.py

いかがでしたか?

py2exeのエラーには悩まされますね。