Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
PythonMagick on OS X

Installing PythonMagick on OS X

  1. brew install boost - will take a lot of time and make your Mac hot
  2. brew install --with-magick-plus-plus imagemagick
  3. cd <path_to_PythonMagick_source>
  4. ./configure --with-boost=<path_to_boost_root>
  5. make
  6. make install
  7. python -c "import PythonMagick"

If PythonMagick build fails saying that it couldn't find -lboost_python navigate to <path_to_boost_root>/lib/, ln -s libboost_python-mt.dylib libboost_python.dylib and run make again.

Tested on 10.6.8 with Python 2.6.7 (custom build). Should work with Lion running stock 2.7.

NOTE: Looks like I was too quick to call it done. The module imports but raises exceptions when used. Bummer.

Ringil commented Jun 10, 2012

Did you ever figure out how to solve the import problem?


tomekwojcik commented Jun 10, 2012

Ringil commented Jun 11, 2012

I solved this problem by copying from where make install installed PythonMagick /usr/local/lib/python2.7/site-packages/PythonMagick to where Python actually looks on a OS X Lion, /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/

nfglynn commented Jul 5, 2012

Just a quick note for anyone checking this in future, after successfully building PythonMagick on Mac OS X Lion I was getting:

>>> import PythonMagick
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "PythonMagick/", line 1, in <module>
from . import _PythonMagick
ImportError: cannot import name _PythonMagick

This can be fixed by changing the first line of in PythonMagick (Usually to be found in site-packages, in my case /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PythonMagick) from:

from . import _PythonMagick


import _PythonMagick

is there any howto about installing PythonMagick on mac os x? It's annoying problem.

can find ./configure file .

RemyMuhire@Muhires-MBP:~$ cd /usr/local/Cellar/imagemagick/6.8.9-8
RemyMuhire@Muhires-MBP:/usr/local/Cellar/imagemagick/6.8.9-8$ ./configure --with-boost=/usr/local/Cellar/boost/1.56.0
-bash: ./configure: No such file or directory

DWishR commented Nov 6, 2015

I got it working. Note that in the future boost/1.59.0 will change to something else.
Download PythonMagick-0.9.12 and unzip/untar/unwhatevs

$ brew install --with-magick-plus-plus imagemagick
$ brew install boost --with-python
$ brew install boost-python

$ cd ~/Downloads/PythonMagick-0.9.12
$ BOOST_ROOT=/usr/local/Cellar/boost/1.59.0/
$ ./configure

Now you need to edit Makefile and pythonmagick_src/Makefile to include the boost library. You want to find two lines, one that starts with DEFAULT_INCLUDES and the other with LDFLAGS. Add boost paths to the end of those lines so they look something like this:
DEFAULT_INCLUDES = -I. -I$(top_builddir)/config -I/usr/local/Cellar/boost/1.59.0/include
LDFLAGS = -L/usr/local/Cellar/boost-python/1.59.0/lib

$ make
$ make install

Edit in the PythonMagick package folder, I found it at /usr/local/lib/python2.7/site-packages/PythonMagick. If you can't find the path, it should be at the end of the output of make install, on a line like: /bin/sh ./libtool --mode=install /usr/bin/install -c '/usr/local/lib/python2.7/site-packages/PythonMagick'.

You want to change the first line of from:

from . import _PythonMagick


import _PythonMagick

And that should do it!

rgvasquez commented Jul 8, 2016

@DWishR I was able to get through the instructions, but it still gives me "No module named PythonMagick" I noticed that even though I edited, the corresponding init.pyc and init.pyo does not get rebuild when I import PythonMagick.

@DWishR Just followed your instructions to a tee (correcting for new versions) and it worked perfectly. Thanks!

nazikus commented Nov 20, 2016

@DWishR as of today, your solution still works, thanks.

note: brew install --with-magick-plus-plus imagemagick gives warning
Warning: imagemagick: this formula has no --with-magick-plus-plus option so it will be ignored!
but nevertheless it worked, thanks.

duyvk commented Dec 27, 2016

i got this error when running "make"

 Making all in helpers_src

  CXX      libhelper_la-Blob.lo



clang: warning: argument unused during compilation: '-pthread'

ld: library not found for -l-L/usr/local/Cellar/imagemagick/6.9.7-0/lib

clang: error: linker command failed with exit code 1 (use -v to see invocation)

make[1]: *** [] Error 1

make: *** [all-recursive] Error 1

Do you guys know what may cause the problem ?
Thanks !

CXX libpymagick_la-_Image.lo
_Image.cpp:400:92: error: no member named 'alphaColor' in 'Magick::Image'
.def("alphaColor", (void (Magick::Image::)(const Magick::Color&) )&Magick::Image::alphaColor)
_Image.cpp:401:86: error: no member named 'alphaColor' in 'Magick::Image'
.def("alphaColor", (Magick::Color (Magick::Image::
)() const)&Magick::Image::alphaColor)
2 errors generated.
make[1]: *** [libpymagick_la-_Image.lo] Error 1
make: *** [all-recursive] Error 1

Anyone getting these errors?

anasamoudi commented Apr 10, 2017

@krishnakt031990 Yes I'm getting the same error.

Managed to solve it by downloading this version

JonniePerkgit commented Apr 12, 2017

@krishnakt031990 same error for me. @anasamoudi I tried your solution and it didn't work.... Any other ideas?

Is there an issue with the new release? I can't find anything on yee old Google about this...

OS: macOS 10.12.4
Python: 2.7.13
Trying to install: PythonMagick-0.9.16 (I've also tried 0.9.15 which produced the same error)

@duyvk Hey, I'm getting this error too

Making all in helpers_src
  CXX      libhelper_la-Blob.lo
clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument]
ld: library not found for -l-L/usr/local/Cellar/imagemagick@6/6.9.8-10/lib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [] Error 1
make: *** [all-recursive] Error 1

Have you solved the problem yet?

@Jasper912 @duyvk
I had the same problem the BOOST_PYTHON_LIB was empty in the MakeFile. I just removed the -l{BOOST_PYTHON_LIB} when it appear in the MakeFile and it compile.

djorlando24 commented Dec 27, 2017

Due to changes in the ImageMagick API for version 7 and later, as of PythonMagick-0.9.18 there are some broken hooks that will raise Symbol Not Found errors when attempting to import the dynamic library, and possibly a KeyError('cacheThreshold') when attempting to import PythonMagick. In addition to the above steps (using homebrew to install ImageMagick, boost, boost-python etc). You may also need to apply the following changes. Here I have done a 'git diff' on my version (working on MacOS 10.12.6 with ImageMagick 7.0.5) against the current master branch as of late Dec 2017.

diff --git a/../PythonMagick-master/pythonmagick_src/_Image.cpp b/./pythonmagick_src/_Image.cpp
index 8791c74..5c26cfa 100644
--- a/../PythonMagick-master/pythonmagick_src/_Image.cpp
+++ b/./pythonmagick_src/_Image.cpp
@@ -490,8 +490,8 @@ void Export_pyste_src_Image()
         .def("modifyImage", &Magick::Image::modifyImage)
 #if MagickLibVersion < 0x700
         .def("throwImageException", &Magick::Image::throwImageException)
         .def( self == self )
         .def( self != self )
         .def( self > self )
diff --git a/../PythonMagick-master/pythonmagick_src/_main.cpp b/./pythonmagick_src/_main.cpp
index 449f0b1..a7d3cce 100644
--- a/../PythonMagick-master/pythonmagick_src/_main.cpp
+++ b/./pythonmagick_src/_main.cpp
@@ -30,7 +30,7 @@ void Export_pyste_src_PathArcAbs();
 void Export_pyste_src_Image();
 void Export_pyste_src_GravityType();
 void Export_pyste_src_Geometry();
-void Export_pyste_src_FilterTypes();
+void Export_pyste_src_FilterType();
 void Export_pyste_src_Exception();
 void Export_pyste_src_DrawableViewbox();
 void Export_pyste_src_DrawableTranslation();
@@ -62,7 +62,7 @@ void Export_pyste_src_DrawablePointSize();
 void Export_pyste_src_DrawablePoint();
 void Export_pyste_src_DrawablePath();
 void Export_pyste_src_DrawableMiterLimit();
-void Export_pyste_src_DrawableMatte();
+void Export_pyste_src_DrawableAlpha();
 void Export_pyste_src_DrawableLine();
 void Export_pyste_src_DrawableGravity();
 void Export_pyste_src_DrawableFont();
@@ -70,8 +70,8 @@ void Export_pyste_src_DrawableFillRule();
 void Export_pyste_src_DrawableFillOpacity();
 void Export_pyste_src_DrawableFillColor();
 void Export_pyste_src_DrawableEllipse();
-void Export_pyste_src_DrawableDashOffset();
-void Export_pyste_src_DrawableDashArray();
+void Export_pyste_src_DrawableStrokeDashOffset();
+void Export_pyste_src_DrawableStrokeDashArray();
 void Export_pyste_src_DrawableCompositeImage();
 void Export_pyste_src_DrawableColor();
 void Export_pyste_src_DrawableClipPath();
@@ -119,7 +119,7 @@ BOOST_PYTHON_MODULE(_PythonMagick)
-    Export_pyste_src_FilterTypes();
+    Export_pyste_src_FilterType();
@@ -151,7 +151,7 @@ BOOST_PYTHON_MODULE(_PythonMagick)
-    Export_pyste_src_DrawableMatte();
+    Export_pyste_src_DrawableAlpha();
@@ -159,8 +159,8 @@ BOOST_PYTHON_MODULE(_PythonMagick)
-    Export_pyste_src_DrawableDashOffset();
-    Export_pyste_src_DrawableDashArray();
+    Export_pyste_src_DrawableStrokeDashOffset();
+    Export_pyste_src_DrawableStrokeDashArray();

djorlando24 commented Dec 27, 2017

Following above, you'll need to modify to point to the correct functions as well.

diff --git a/../PythonMagick-master/PythonMagick/ b/./PythonMagick/
index 6750c2e..61ba8d4 100644
--- a/../PythonMagick-master/PythonMagick/
+++ b/./PythonMagick/
@@ -51,10 +51,10 @@ class DrawableColor(_PythonMagick.DrawableColor):
 class DrawableCompositeImage(_PythonMagick.DrawableCompositeImage):
-class DrawableDashArray(_PythonMagick.DrawableDashArray):
+class DrawableStrokeDashArray(_PythonMagick.DrawableStrokeDashArray):
-class DrawableDashOffset(_PythonMagick.DrawableDashOffset):
+class DrawableStrokeDashOffset(_PythonMagick.DrawableStrokeDashOffset):
 class DrawableEllipse(_PythonMagick.DrawableEllipse):
@@ -78,7 +78,7 @@ class DrawableGravity(_PythonMagick.DrawableGravity):
 class DrawableLine(_PythonMagick.DrawableLine):
-class DrawableMatte(_PythonMagick.DrawableMatte):
+class DrawableAlpha(_PythonMagick.DrawableAlpha):
 class DrawableMiterLimit(_PythonMagick.DrawableMiterLimit):
@@ -174,7 +174,7 @@ class DrawableViewbox(_PythonMagick.DrawableViewbox):
 class Exception(_PythonMagick.Exception):
-class FilterTypes(_PythonMagick.FilterTypes):
+class FilterType(_PythonMagick.FilterType):
 class Geometry(_PythonMagick.Geometry):
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment