2013-10-01 2 views
6

仮想環境にPillowおよびqrcodeモジュールがインストールされています。PIL Image ImportError

>>> from PIL import Image 
>>> img = Image.new('1', (200, 200)) 
>>> img.save('test-image.jpeg', 'JPEG') 

グレート、私はそれが期待するのと同じように動作します:

Pythonシェルから

、私はプログラムでPILを使用してテスト画像を作成することができます。

>>> import qrcode 
>>> qr_code = qrcode.make("1") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/vagrant/.virtualenvs/env1/local/lib/python2.7/site-packages/qrcode/main.py", line 8, in make 
    return qr.make_image() 
    File "/home/vagrant/.virtualenvs/env1/local/lib/python2.7/site-packages/qrcode/main.py", line 186, in make_image 
    from qrcode.image.pil import PilImage 
    File "/home/vagrant/.virtualenvs/env1/local/lib/python2.7/site-packages/qrcode/image/pil.py", line 5, in <module> 
    import Image 
ImportError: No module named Image 

なぜ輸入PILのImageクラスをQRコードことはできませんが、それはシェルから作品:私はPILに依存しているモジュールを使用しようとすると、しかし、私はこのエラーを取得していますか?

+1

これは暗闇の中で少しのショットですが、 'from PIL import ImageDraw'はシェルでも動作しますか?そのモジュールが何らかの形で 'PIL'パッケージにない場合、' qrcode'は 'Image'も' PIL'パッケージから抜けてトップレベルからインポートしようとします。あなたが見ている問題を引き起こします。 – abarnert

+0

正しい仮想環境から実際にテストしていない可能性があります。あなたのシェルから、 'PIL import Image'から' Image'と打ち込んで、どのパスがあなたに与えられるのかを見てください。それは '/ home/vagrant/.virtualenvs/env1/blah/blah'の中にあるのですか? – abarnert

答えて

5

ImageモジュールはPILモジュールのサブパッケージとしてインストールされていますが、使用しているライブラリではImageモジュールがPythonパスに直接存在すると予想されます。

import Image 

で:

from PIL import Image 

ファイルqrcode/image/pil.pyで最も簡単な解決策を交換することです。

+0

ええ、古い学校のPILは時には片方向に、時にはもう一方にもインストールされます。多くの人がこれを回避するために明示的に 'sys.path'にパッケージを追加しますが、それはいつもひどい考えです。枕は、より賢明なものを選んで一貫して行ったが、他のものを期待するいくつかの他のパッケージがある。 – abarnert

+0

しかし、これはうまくいかないでしょう。 [ソース](https://github.com/lincolnloop/python-qrcode/blob/master/qrcode/image/pil.py)を見ると、既に 'PIL import Image'から' PIL import Image'を試みています。それが失敗したときに「イメージをインポートする」。 – abarnert

+0

この場合、virtualenvに何か問題があるはずです。ちょうどテストされ、それは動作します: 'virtualenvを実行しました。&& so so/bin/activate && pipピローqrcode six && python'をインストールし、' import qrcode; qrcode.make( "1")。show() '。貧しい人には申し訳ありませんが、コメントに合った書式設定です。 –