7

Mac OS X に PIL をインストールする際の悪名高い _imaging C モジュール エラーに関する他の投稿を読みましたが、PIL FAQ を含め、どこにも提供されている解決策はどれも役に立ちませんでした。

ソースから新しくインストールされた libjpeg と zlib の最新バージョンがあります。これらのそれぞれの Makefile を編集して、32 ビット ビルド用の LD_FLAGS 変数にオプション -arch i386 を含めました。PIL は何の問題もなくインストールされ、端末に出力されるインストールの概要には、JPEG、TIFF、および PNG のサポートはすべて問題ないと表示されます。その後、セルフテストを試します:

new-host:Imaging-1.1.7 ely$ python selftest.py 
*** The _imaging C module is not installed

これは、さまざまな理由で一般的に見られます。より深く調べて、ここで _imaging を Python に直接インポートしようとします。

new-host:Imaging-1.1.7 ely$ python
ActivePython 2.7.1.4 (ActiveState Software Inc.) based on
Python 2.7.1 (r271:86832, Feb  7 2011, 11:33:10) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>> import _imaging
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart
  Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/_imaging.so
  Expected in: dynamic lookup

ここでも、「Symbol not found: _jpeg_resync_to_restart」は悪名高く一般的であり、多くの人がこれは libjpeg へのパスが正しくないことに関係していると示唆しています。私は何度も何度もチェックしましたが、libjpeg(およびzlibなど)のみがホームディレクトリにインストールされており、すべてソースから別のフォルダーにあり、これらすべてがsetup.pyファイルで正しくマークされています。

したがって、PIL は適切な場所から jpeg サポート (および zlib など) を取得する必要があります。すべての依存関係がインストールされます。sys.path に _imaging.so が表示されますが、まだこの _jpeg_resync_to_restart エラーが発生します。

別の投稿にリンクしていないアイデアはありますか? 私は、見つけることができるすべてのフォーラムの投稿から可能な解決策を読み、試してみました.

4

9 に答える 9

8

これを数回試しているので、まずいくつかのコマンドを実行して古いアイテムを一掃し、最初からやり直すことをお勧めします。

Mac OS X、10.6、および10.7でjpeg v8cとImaging 1.1.6を使用しました

jpeg cd の v8c を jpeg ディレクトリに取得します。

sudo make clean
CC="gcc -arch i386" ./configure --enable-shared --enable-static
make
sudo make install

1.1.6を使用しているイメージングを取得します

cd をイメージングに untar します

sudo rm -rf build
vi setup.py
JPEG_ROOT = libinclude(“/usr/local/lib”)
sudo python setup.py install

そして、それはとても簡単です

Python インタープリターを実行します。

import PIL
import _imaging
import Image

すべてが順調であれば、準備万端です。

私のブログPython 2.7, OSX Lion, PIL and Imagingの記事全文はこちら

于 2011-07-27T14:30:04.763 に答える
4

I have faced the same problem this evening on my mac running Mac OS X v10.7.5, Python v2.7.1 with PIL Imaging 1.1.7 and jpeg 8d.


Summarizing - the key to success in my case was:

export ARCHFLAGS="-arch x86_64"

Nothing from the other answers have solved the issue, constantly I've been getting: The _imaging C module is not installed caused by: Symbol not found: _jpeg_resync_to_restart.

Digging here and there finally I've found the solution, at least works for me:

  • ensure you don't have any obvious libjpeg libs on the system: find / -iname "libjpe*" will tell you that. I have temporarily changed places where they exist so no one could find them (especially /sw was interacting with PIL in my case):

    mv opt opt-OFF  
    mv sw sw-OFF  
    

These locations have been created by mac ports and fink - be warned that it is quite possible that FREETYPE2 might not be found by PIL after this move - if you need it, then just rename libjpeg parts in those locations.

  • in PIL Imaging src directory edit setup.py as described above to set JPEG_ROOT to /usr/local, try to run:

    rm -rf build ; python setup.py build 2> /tmp/err > /tmp/log
    

Check in /tmp/log - you should not see JPEG support available. You can now go to the next step.

  • go to jpeg-8d src directory and run:

    export ARCHFLAGS="-arch x86_64"  
    sudo make clean; CC="gcc -arch x86_64" ./configure --enable-shared --enable-static  
    sudo make install
    
  • go back to PIL Imaging, run these commands:

    export ARCHFLAGS="-arch x86_64"  
    sudo rm -rf build ; python setup.py build 2> /tmp/err > /tmp/log
    

Check in /tmp/log - you should now see "JPEG support available", check /tmp/err - search for "jpeg" - if you see something like this: ld: warning: ignoring file /usr/local/lib/libjpeg.dylib, file was built for unsupported file format which is not the architecture being linked (i386) - then the arch flags (both set by ARCHFLAGS and -arch) failed to trigger - investigate that case, it is crucial. If you don't see this, then you're lucky and you can invoke the installation:

export ARCHFLAGS="-arch x86_64"  
sudo rm -rf build ; sudo python setup.py install

Check if your PIL works:

python selftest.py

or

echo "import _imaging" | python && echo "Works"

I hope this helps.

于 2012-10-02T22:04:43.220 に答える
2

問題は、_imaging モジュールが静的ではなく動的に libjpeg にリンクされていることです。libjpeg コードは _imaging モジュールに直接含まれていません。つまり、プラットフォームのダイナミック リンカは、libjpeg を読み込んでリンクするために libjpeg を見つけることができる必要があります。ここでの私の MacOS の知識はあいまいですが、私が覚えているように、その動的リンカーは と呼ばれdyld、そのマンページには、使用できるオプションに関する詳細情報が記載されている場合があります。

通常、プラットフォームのダイナミック リンカーはライブラリのホーム ディレクトリを検索しませんが、たとえば、DYLD_LIBRARY_PATH環境変数を設定するか、システム全体の構成 (存在する場合) を編集することで、そのように指示できます。ただし、変数は通常、Python を起動する前に実行する必要があるため、適切ではない場合があります。ランタイム検索パスを _imaging 拡張モジュールに埋め込もうとすることもできます。これは通常、リンカーに渡す-rpathことによって行われますが、MacOS のリンカーがその機能を提供しているかどうかはわかりません。最後に、libjpeg を共有ライブラリではなく静的ライブラリとしてビルドし、それに対して _imaging モジュールをリンクさせることができます。これにより、libjpeg の共有ライブラリ全体の状況が回避されます。libjpegの場合、configureでスクリプトし--enable-static --disable-sharedます。

于 2011-05-27T09:41:27.500 に答える
2

古い 10.6 Mac インストールで、これらの提案のほとんどすべて (および参照されているブログの他の 2 つの提案) を試しました。それらのどれもそのままでは機能しませんでしたが、行の後ろを読んで、問題を解決することができました。リターン1行「print os.path.join(directory、include)」の直前に、find_include_file()のPIL setup.pyに追加しました。これにより、どのlibjpeg PILがビルドされているかを追跡することができました. 次に、PIL をビルドし、それが参照する libjpeg (/sw、/opt/、/usr/local/lib などのさまざまなコピー) を見つけ、その libjpeg (ヘッダー ファイルと lib ファイルの両方) を削除します。

最後に、クリーンなシステムで、自分でダウンロードした libjpeg ソース tarball をビルドしてインストールし、続いてソースから PIL をビルドしてインストールしました。これはうまくいきました。フォールバックとして、上記のファイルを上記のように削除するか、setup.py の上記の関数から常に 0 を返すことで libjpeg を無効にすることができます。

于 2012-10-28T23:27:00.780 に答える
1

Mountain Lion 10.8.2 でうまく動作します。

ステップ 1。すべての jpeg パッケージを削除しています。MacPort の場合:

sudo port -f uninstall jpegまたsudo port -f uninstall jpeg @version_here

すべてのjpeg バージョンを削除する必要があります。

ステップ 2。PIL を削除します。pip uninstall PIL

ステップ 3。jpeg パッケージを再度インストールします。MacPort の場合:sudo port install jpeg

ステップ 4。PIL を再度インストールします。pip install PIL

>>> import PIL
>>> import _imaging

エラーなし!


すべての jpeg パッケージを削除するには?

$ port installed | grep -i jpeg
jpeg @8c_0
jpeg @9a_0 (active)

$ sudo port -f uninstall jpeg @8c_0
$ sudo port -f uninstall jpeg @9a_0

依存関係を気にしないでください。jpeg パッケージを再度インストールする必要があるためです。

$ sudo port install jpeg
于 2013-03-14T19:47:48.533 に答える
1

皆さんが言及したすべてのエラーに遭遇しました。私は故障して、代わりに virtualenv を使用し、Pillow をインストールしました。出来た:

sudo pip install virtualenv
virtualenv python_script && cd !$
. /activate/bin
pip install Pillow
于 2016-01-21T08:18:23.273 に答える
0

これは私のために働いた-http : //www.thetoryparty.com/2010/08/31/pil-on-snow-leopard-_jpeg_resync_to_restart-error/

于 2012-10-01T05:33:30.923 に答える
0

PIL (OS X 10.7.5、Python 2.7.3) を約 5 時間インストールしようとしています。私も「Symbol not found: _jpeg_resync_to_restart」エラーで行き詰まり、すべての依存関係を再インストールするなど、提案された解決策の多くを試してみましたが、役に立ちませんでした。最後に、ダブルクリック可能なPillowのインストールを発見しました。

ありがとう、ルディックス!「PIL のインポート」と「_imaging のインポート」が機能するようになりました。

psを介してlibjpegをインストールしましたが、このインストールを特に削除しなかったため、これが最終的な解決策の一部であったかどうかはわかりません。

于 2013-03-25T16:54:12.170 に答える
0

Python 2.7 と OSX Lion で同じ問題が発生し、基本的に @ApPeL プロセスに従い、libjpeg と PIL を再インストールしました。libjpeg は正しくインストールされているようで、PIL はそれを正しく検出しているように見えましたが、実行するpython -vimport _imaging常に次のエラーが発生しました。

ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/_imaging.so, 2): シンボルが見つかりません: _jpeg_resync_to_restart

libjpeg (バージョン 8d) と PIL (バージョン 1.1.7) をわずかに異なるオプションで 20 回インストールして再インストールした後、 /usr/local/include (ヘッダー)の下にあるすべての libjpeg ファイルを確実に削除したことを確認しました。および /user/local/lib の下のファイル。

ソースから PIL をインストールする必要はありませんでした。pip install pil

于 2012-04-25T10:37:36.150 に答える