PILは_imaging Cモジュールをインポートしません:「*** _imaging Cモジュールはインストールされていません」
-
29-09-2019 - |
質問
PIL setup.pyビルドの背景の少し:
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)
[GCC 4.3.3]
--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------
これは、Ubuntu 9.04インストールにあります。
Djangoが(異なる形式の)さまざまな画像をアップロードしてサイズ変更できるようにするには、PILだけが必要です。残念ながら、現在JPEGを処理することはできません。 PILのselftest.pyを実行した後、これを思いつきました。
*** The _imaging C module is not installed
Python -Vインタープリター(両方が機能した)を使用して、画像と_imagingをインポートしようとしました...
>>> from PIL import Image
import PIL # directory PIL
# PIL/__init__.pyc matches PIL/__init__.py
import PIL # precompiled from PIL/__init__.pyc
# PIL/Image.pyc matches PIL/Image.py
import PIL.Image # precompiled from PIL/Image.pyc
かなり長い間継続する
>>> import _imaging
dlopen("/usr/local/lib/python2.6/dist-packages/PIL/_imaging.so", 2);
import _imaging # dynamically loaded from /usr/local/lib/python2.6/dist-packages/PIL/_imaging.so
したがって、_ ImagingはPythonインタープリターを使用する場合に使用できますが、何らかの理由で他の場合には適切にインポートされていません。
私は過去数時間この問題の解決策を探していましたが、それを見つけることに近づいていません。私は愚かに明白なものが足りないのですか?それとも、なぜそれが機能していないのかというアイデアはありますか?
前もって感謝します!
また、私は知っています http://effbot.org/zone/pil-imaging-not-installed.htm しかし、それはエラーのみを示し、解決策を提供しません。
編集: 私はぐるぐる回ってきましたが、_imagingmathをインポートすることが問題であるように見えます。私はPython -VV selftest.pyがどこで壊れているのかを見るために行いました。これがどのように起こったかです。
dlopen("/usr/local/lib/python2.6/dist-packages/PIL/_imagingmath.so", 2);
import _imagingmath # dynamically loaded from /usr/local/lib/python2.6/dist-packages/PIL/_imagingmath.so
*** The _imaging C module is not installed
# clear __builtin__._
[etc. etc. etc.]
解決
PILをインストールする前に、Libjpegをインストールしていなかったようです。したがって、libjpeg-62とlibjpeg62-devをインストールし、PILを再インストールしました。同じエラーが発生しました
*** The _imaging C module is not installed
別のWebサイトで、PILの再構築をソースから強制することを示唆する潜在的なソリューションを見つけました。
sudo python setup.py build_ext -f
これにより、このエラーに関する興味深い情報がいくつかありました(この問題もある場合)。 GCCはさまざまなファイルを適切にコンパイルしていないようです(GCC4.3.3があります)。つまり、以下は次のとおりです。
_imaging.c:3017: warning: initialization from incompatible pointer type
_imaging.c:3077: warning: initialization from incompatible pointer type
libImaging/Quant.c: In function 'rehash_collide':
libImaging/Quant.c:154: warning: cast to pointer from integer of different size
(他のすべては大丈夫だと思われます)
私はこれについて少し調査しましたが、他のいくつかのWebサイトは、PILを構築するために使用しているGCCのバージョンが、使用しているpython.org pythonを構築するために使用されるバージョンとは異なるためだと示唆しています。これは非常に理にかなっています。 これが私がこれを提案する他の質問です.
最後に、最後のインストールを試しましたが、今回はダウンロードしたタールとは対照的にリポジトリからです。これは問題を解決したようです。
sudo apt-get install python-imaging
私は元の問題に完全に答えたことはありませんが、代替の解決策を見つけました。上記の情報がこの状況で他の人を助けることができることを願っています!
他のヒント
開発libjpegをインストールしてこれを修正しました。
sudo apt-get install libjpeg8-dev
次に、PILモジュールを完全に再インストールします。
(私は仮想環境を使用していますが、Pythonを標準として実行するだけでも動作するはずです)
Libjpegライブラリをインストールしていません。これを行う:
sudo apt-get install libjpeg
PILの設置を再実行します。