2

StackOverflowと一般的なWebには、この質問の順列がたくさんあります。私はたくさんのことを試しましたが、何もうまくいきません。

これが私の設定です。OSX10.6を実行しています。私はHomebrewを使用してPython2.7.1をインストールしました。

$ python
Python 2.7.1 (r271:86832, Mar 12 2011, 16:21:44) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

アクティビティモニターでは、これは64ビットプロセスとして報告されることに注意してください。

まず、Homebrewでlibjpegをインストールしてみました。後でそれをアンインストールし、次のようにソースをダウンロードして/ usr/localにインストールしました。

export CC="/usr/bin/gcc -arch x86_64"
./configure --enable-shared --enable-static
make
sudo make install

次に、Django virtualenvで、PILを再インストールします。

export CC="/usr/bin/gcc -arch x86_64"
pip uninstall PIL
pip install --no-install PIL
vi build/PIL/setup.py  # change JPEG_ROOT to libinclude("/usr/local")
pip install PIL

それでも、それは機能しません:

>>> import _imaging
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/me/byp/lib/python2.7/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart
  Referenced from: /Users/me/byp/lib/python2.7/site-packages/PIL/_imaging.so
  Expected in: dynamic lookup
4

3 に答える 3

5

bypあなたのvirtualenvは何ですか?システムPython 2.6で問題はありませんでしたが、同じことをしました。libjpeg必要に応じて virtualenv に直接インストールできます。その後、PIL ビルド スクリプトをハックする必要はありません。これが私がしたことです:

% mkvirtualenv foo
(foo)% cdvirtualenv
(foo)% lftpget http://www.ijg.org/files/jpegsrc.v8c.tar.gz
(foo)% tar zxf jpegsrc.v8c.tar.gz
(foo)% cd jpeg-8c
(foo)% CC="gcc -arch x86_64" ./configure --prefix=$VIRTUAL_ENV
(foo)% make install
(foo)% cd ..
(foo)% pip install PIL
(foo)% python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import _imaging
>>> _imaging
<module '_imaging' from '/Users/nicholas/LMI/foo/lib/python2.6/site-packages/PIL/_imaging.so'>
>>> ^D

用に_imaging.soビルドされましたがi386、(Apple の Python がそのようにコンパイルされたため)用にコンパイルされたのは、私が gcc に与えたフラグのためだけでした:ppcx86_64libjpegx86_64

(foo)% file lib/libjpeg.8.dylib
lib/libjpeg.8.dylib: Mach-O 64-bit dynamically linked shared library x86_64
(foo)% file lib/python2.6/site-packages/PIL/_imaging.so
lib/python2.6/site-packages/PIL/_imaging.so: Mach-O universal binary with 3 architectures
lib/python2.6/site-packages/PIL/_imaging.so (for architecture i386):    Mach-O bundle i386
lib/python2.6/site-packages/PIL/_imaging.so (for architecture ppc7400): Mach-O bundle ppc
lib/python2.6/site-packages/PIL/_imaging.so (for architecture x86_64):  Mach-O 64-bit bundle x86_64
(foo)% otool -L lib/python2.6/site-packages/PIL/_imaging.so
lib/python2.6/site-packages/PIL/_imaging.so:
    /Users/nicholas/LMI/foo/lib/libjpeg.8.dylib (compatibility version 12.0.0, current version 12.0.0)
    /opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

_imaging.so動的にリンクするためlibjpeg、予想されるアーキテクチャで dylib が利用できない場合、ロード時に失敗します。Python を 32 ビットとして実行することで、あなたが見たのと同様のことを引き起こすことができました。

(foo)% arch -i386 python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import _imaging
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/nicholas/LMI/foo/lib/python2.6/site-packages/PIL/_imaging.so, 2): Symbol not found: _jpeg_resync_to_restart
  Referenced from: /Users/nicholas/LMI/foo/lib/python2.6/site-packages/PIL/_imaging.so
  Expected in: flat namespace
 in /Users/nicholas/LMI/foo/lib/python2.6/site-packages/PIL/_imaging.so

したがって、Python、PIL、および libjpeg のアーキテクチャに互換性があることを確認します。ただし、より良いエラーメッセージが表示されないのはかなり面倒です!

于 2011-03-13T04:03:12.060 に答える
1

私はこの問題を何時間も解決しようとしていましたが、唯一の方法はこのパッケージを使用することでした:

http://ethan.tira-thompson.org/Mac_OS_X_Ports.html

libjpeg をインストールすると、PIL がインストールされ、pip から適切に動作します。他のソースも同様だと思います。

于 2011-06-29T12:54:12.490 に答える