Changing Python easy_install's default include path - python

Question about Python's setuptools. I just did a fresh install of Mac OS 10.8 and installed the official Python 2.7.3 package. When installing the binary module py-bcrypt (or any other binary module for that matter), I get the following error:
bcrypt/bcrypt_python.c:17:10: fatal error: 'Python.h' file not found
#include "Python.h"
^
1 error generated.
error: Setup script exited with error: command 'clang' failed with exit status 1
Running sudo easy_install --verbose py-bcrypt shows the following call to CLang:
clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c bcrypt/bcrypt_python.c -o build/temp.macosx-10.8-intel-2.7/bcrypt/bcrypt_python.o
...which is fine except for this part:
-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
Because Python.h is actually stored in the non-System Library here: /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/Python.h
So to finally get to the point: How do you change the default include path used by setuptools?

In Ubuntu, doing this in .bashrc or .zshrc would solve the issue:
export C_INCLUDE_PATH=/you_name_it/include/python2.7
export CPLUS_INCLUDE_PATH=/you_name_it/include/python2.7
It enabled gcc to find other headers you need, but I'm not sure whether it works for clang.

I still have no idea how to actually do this, but I found a workaround. Installing XCode's Command Line Tools (Preferences -> Download -> Command Line Tools) put Python headers in the right place.

Related

How to fix "cc: error: unrecognized command line option '-Wshorten-64-to-32'" issue on Mac

You may have following issue while compiling python packages on Mac:
cc -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch x86_64 -arch i386 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/misaka.c -o build/temp.macosx-10.9-intel-2.7/src/misaka.o
cc: error: unrecognized command line option '-Wshorten-64-to-32'
error: command 'cc' failed with exit status 1
Solution is to run commands below:
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
If you see this problem on a Mac OS X system, it is likely because you are running Python2.7 and using distutils.
By default, Python2.7 on Mac OS X is compiled with the alias "cc". At compile time, "cc" refers to "clang". Clang is the default program that Apple uses to compile C and C++ code.
Solution 1
The most appropriate solution is to ensure that "cc" refers to the correct compiler on your Mac OS X distribution. Try typing into the terminal:
ls -l `which cc`
If the output does not resolve to "/usr/bin/cc -> clang", or something similar that points to clang, then you should fix this by removing (or relabelling) "cc" programs in your path that do not point to clang.
If you have installed gcc or some other c/c++ compiler then it may have added a link to your path that refers "cc" to a different compiler. This is not recommended, because other compilations in the system that rely on cc referring to clang, or have used cc in the past expecting clang may fail. A prime example is what brought you to this page.
Solution 2
As mentioned by Igor you can type in the terminal before executing python setup code and/or compiling python code:
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
Solution 3
You can also set these options inside of python with:
import os
os.environ["CC"] = "clang"
os.environ["CXX"] = "clang++"

Cannot install pycurl on Mac OS X - get errors 1 and 2

I am attempting to install pycurl-7.19.0 on my Mac OSX 10.8.4.
The error I get when compiling:
py setup.py install
The results:
Using curl-config (libcurl 7.24.0)
running install
running build
running build_py
running build_ext
building 'pycurl' extension
clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict- aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -DHAVE_CURL_SSL=1 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c src/pycurl.c -o build/temp.macosx-10.8-intel-2.7/src/pycurl.o
clang: warning: argument unused during compilation: '-mno-fused-madd'
In file included from src/pycurl.c:50:
In file included from /usr/local/include/curl/curl.h:35:
/usr/local/include/curl/curlrules.h:143:6: error: '__curl_rule_01__' declared as an array with a negative size
[CurlchkszEQ(long, CURL_SIZEOF_LONG)];
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/curl/curlrules.h:132:27: note: expanded from macro 'CurlchkszEQ'
#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
^~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/curl/curlrules.h:153:6: error: '__curl_rule_02__' declared as an array with a negative size
[CurlchkszEQ(curl_off_t, CURL_SIZEOF_CURL_OFF_T)];
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/curl/curlrules.h:132:27: note: expanded from macro 'CurlchkszEQ'
#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
^~~~~~~~~~~~~~~~~~~~~~~
src/pycurl.c:85:4: warning: "libcurl was compiled with SSL support, but configure could not determine which " "library
was used; thus no SSL crypto locking callbacks will be set, which may " "cause random crashes on SSL requests"
[-W#warnings]
# warning \
^
1 warning and 2 errors generated.
error: command 'clang' failed with exit status 1
I currently have curl-7.32.0 installed and am running Python 2.7.2 and GCC 4.2.1.
This works for me on OSX 10.9
sudo env ARCHFLAGS="-arch x86_64" easy_install setuptools pycurl==7.19.0

How do I build PIL on OS X Mountain Lion?

When I try to build PIL on Mac OS X 10.8.1 Mountain Lion, I get the following result:
$ sudo python setup.py install
Password:
running install
running build
running build_py
running build_ext
--- using frameworks at /System/Library/Frameworks
building '_imaging' extension
clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -DHAVE_LIBJPEG -DHAVE_LIBZ -IlibImaging -I/opt/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include -I/usr/local/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _imaging.c -o build/temp.macosx-10.8-intel-2.7/_imaging.o
clang: warning: argument unused during compilation: '-mno-fused-madd'
_imaging.c:75:10: fatal error: 'Python.h' file not found
#include "Python.h"
^
1 error generated.
error: command 'clang' failed with exit status 1
PIL does not keep up with support for new operating systems (by making changes to setup.py for new lib dirs, etc). But intstead of PIL, you can use the "friendly PIL fork" Pillow:
http://pypi.python.org/pypi/Pillow
And if you get the same error, please report the issue:
https://github.com/python-imaging/Pillow/issues/new
From this SO question, I was able to find Python.h in /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7. (note that i have Xcode installed)
I then ran sudo python setup.py build_ext --include-dirs /Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7:/Developer/SDKs/MacOSX10.7.sdk/usr/include
(note: /Developer/SDKs/MacOSX10.7.sdk/usr/include added because stdio.h was missing once the Python.h was resolved)
Finally, I ran sudo python setup.py install

Edit C Compiler used in MySQLdb Python

I am trying to install MySQLdb 1.2.3 on Mac OSX Lion 10.7.3. When I run
$ sudo ARCHFLAGS="-arch x86_64" python setup.py build
An error is thrown that says:
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk
-g -O2 -DNDEBUG -g -O3 -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 - I/usr/local/mysql/include - I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _mysql.c -o build/temp.macosx-10.6-x86_64-2.7/_mysql.o -Os -g -fno-common -fno-strict-aliasing -arch i386
unable to execute gcc-4.2: No such file or directory
error: command 'gcc-4.2' failed with exit status 1
I saw this similar forum post but noticed that MySQLdb 1.2.3 does not include a user_config.py.
My question is, which .py file can I edit to change 'gcc-4.2' to 'gcc'? This could likely fix the problem.
Meh.
CC=gcc python setup.py ...

Installing oursql on Mac OS Lion successes but import in python fails. **Why?**

I followed the installation instructions for installing oursql on Mac OS X. Since
sudo pip install oursql
told me, that it couldn't find mysql_config I (located it with locate mysql_config and) told it where to find it by
sudo MYSQL_CONFIG=/usr/local/mysql-5.5.14-osx10.6-x86_64/bin/mysql_config pip install oursql
I added the terminal output at the bottom for readability reasons. After that I fired up python in terminal (On Mac OS Lion it is python 2.7 now,...) and did
>>> import oursql
but python keeps telling me:
>>> import oursql
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Python/2.7/site-packages/oursql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Library/Python/2.7/site-packages/oursql.so
Reason: image not found
What do I miss? Any suggestions?
Terminal Output, of pip installation:
Downloading/unpacking oursql
Downloading oursql-0.9.2.tar.bz2 (113Kb): 113Kb downloaded
Running setup.py egg_info for package oursql
Installing collected packages: oursql
Running setup.py install for oursql
skipping 'oursqlx/oursql.c' Cython extension (up-to-date)
building 'oursql' extension
/usr/local/mysql-5.5.14-osx10.6-x86_64/bin/mysql_config --cflags
llvm-gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c oursqlx/oursql.c -o build/temp.macosx-10.7-intel-2.7/oursqlx/oursql.o -I/usr/local/mysql-5.5.14-osx10.6-x86_64/include -Os -g -fno-common -fno-strict-aliasing -arch x86_64
oursqlx/oursql.c: In function ‘__pyx_pf_6oursql_10Connection___cinit__’:
oursqlx/oursql.c:4630: warning: implicit conversion shortens 64-bit value into a 32-bit value
oursqlx/oursql.c: In function ‘__pyx_pf_6oursql_10_Statement_execute’:
oursqlx/oursql.c:10219: warning: implicit conversion shortens 64-bit value into a 32-bit value
oursqlx/oursql.c: In function ‘__pyx_pf_6oursql_16_DBAPITypeObject___richcmp__’:
oursqlx/oursql.c:17597: warning: implicit conversion shortens 64-bit value into a 32-bit value
llvm-gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c oursqlx/compat.c -o build/temp.macosx-10.7-intel-2.7/oursqlx/compat.o -I/usr/local/mysql-5.5.14-osx10.6-x86_64/include -Os -g -fno-common -fno-strict-aliasing -arch x86_64
/usr/local/mysql-5.5.14-osx10.6-x86_64/bin/mysql_config --libs
llvm-gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.7-intel-2.7/oursqlx/oursql.o build/temp.macosx-10.7-intel-2.7/oursqlx/compat.o -o build/lib.macosx-10.7-intel-2.7/oursql.so -L/usr/local/mysql-5.5.14-osx10.6-x86_64/lib -lmysqlclient -lpthread
ld: warning: ignoring file build/temp.macosx-10.7-intel-2.7/oursqlx/oursql.o, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: ignoring file build/temp.macosx-10.7-intel-2.7/oursqlx/compat.o, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: ignoring file /usr/local/mysql-5.5.14-osx10.6-x86_64/lib/libmysqlclient.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
Successfully installed oursql
Cleaning up...
This did the job:
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"
If you don't want to install a full MySQL you can compile oursql with the mysql-connector-c.
Download mysql-connector-c, unzip and install:
wget http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-6.0.2-osx10.5-x86-64bit.tar.gz/from/http://cdn.mysql.com/
tar -xvf mysql-connector-c-6-1.0.2-osx10.5-x86-64bit.tar
cd mysql-connector-c-6.0.2-osx10.5-x86-64bit
sudo cp bin/* /usr/local/bin/
sudo cp lib/* /usr/local/lib/
sudo cp -r include/* /usr/local/include/
Download and unzip oursql:
wget --no-check-certificate https://launchpad.net/oursql/py3k/py3k-0.9.3/+download/oursql-0.9.3.zip
unzip oursql-0.9.3.zip
Compile oursql:
cd oursql-0.9.3
sudo python setup.py build_ext
This has been verified to work with OSX 10.8.2, Xcode 4.5.2 and Python 3.2.3
I came across this question looking for a solution to installing oursql on OSX 10.10.5. I had previously installed mysql using brew brew install mysql. For those looking to install oursql on yosemite, here is what works for me:
1) Download the package manually. See links here.
2) Open oursql/oursql-0.9.3.1/oursqlx/_exceptions.c in your favourite text editor
3) Comment the last “default”, should look something like this:
/*default:
if (err >= ER_ERROR_FIRST && err <= ER_ERROR_LAST)
return _oursqlx_ProgrammingError;
else if (err > CR_MIN_ERROR && err < CR_MAX_ERROR)
return _oursqlx_InterfaceError;*/
4) Now try running setup again:
[sudo] python setup.py install
The best way for installing mysql-server on mac os snow leopard is trying to install from source file in order to make sure you are compiling mysql for the correct architecture x86_64.

Categories