Installation On MacOS X¶
If you are using MacOS X, mod_wsgi can be compiled from source code against the standard versions of Python and Apache httpd server supplied with the operating system. To do this though you will first need to have installed the Xcode command line tools.
The Xcode command line tools package provides a C compiler, along with header files and support tools for the Apache httpd server. If you have already set up your system so as to be able to install additional Python packages which include C extensions, you likely will already have the Xcode command line tools.
Install Xcode command line tools¶
To install the Xcode command line tools you should run the command:
If this gives you back the error message:
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
then the tools have already been installed. As noted by the warning message, do make sure you have run a system software update to ensure that you have the latest versions of these tools.
If you do not already have the Xcode command line tools installed, running
xcode-select command should result in you being prompted to
install them. This may ask you to provide the details of an administrator
account along with the password for that account.
Note that it is not necessary to install the whole of the Xcode
developer application from the MacOS X App Store, only the command line
xcode-select. If you have installed the Xcode developer
application, still ensure that the command line tools are installed and
ensure you have run the system software update.
Configuring and building mod_wsgi¶
If you are using the Python and Apache httpd server packages provided with the operating system, all you need to do to configure the mod_wsgi source code before building it is to run in the mod_wsgi source code directory:
This should yield output similar to:
checking for apxs2... no checking for apxs... /usr/sbin/apxs checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for prctl... no checking Apache version... 2.4.18 checking for python... /usr/bin/python configure: creating ./config.status config.status: creating Makefile
configure script should show that it has detected
apxs as being
python as being at
If you get different values for
python then it means
that you likely have a separate installation of Python or the Apache
httpd server installed on your system. If this is the case, to ensure that
you use the versions of Python and Apache httpd server provided with the
operating system instead use the command:
./configure --with-python=/usr/bin/python --with-apxs=/usr/sbin/apxs
Once you have configured the source code by running
can build mod_wsgi using the command:
This will compile the mod_wsgi source code and produce a single
mod_wsgi.so file which then needs to be installed into a common
location so that the Apache httpd server can use it.
Installing the mod_wsgi module¶
What you need to do to install the mod_wsgi module depends on which version of MacOS X you are using.
For the Apache httpd server provided by the operating system, the directory
/usr/libexec/apache2 is used to store the compiled modules. Prior to
MacOS X El Capitan (10.11) this directory was writable and the mod_wsgi
module could be installed here along with all the default modules. With the
introduction of the System Integrity Protection (SIP) feature in MacOS X
El Capitan this directory is not writable, not even to the root user.
Because of this, if you are using a version of MacOS X prior to MacOS X El Capitan (10.11) you can use the command:
sudo make install
to install the mod_wsgi module. As
sudo is being run, you will be
prompted for your password. The module will be installed into the
/usr/libexec/apache2. Within the Apache httpd server
configuration file you can then use the standard
LoadModule wsgi_module libexec/apache2/mod_wsgi.so
If however you are using MacOS X El Capitan (10.11) or later, the mod_wsgi
module will need to be installed into a different location. If you don’t
and try to run just
sudo make install, it will fail with the output:
./apxs -i -S LIBEXECDIR=/usr/libexec/apache2 -n 'mod_wsgi' src/server/mod_wsgi.la /usr/share/httpd/build/instdso.sh SH_LIBTOOL='./libtool' src/server/mod_wsgi.la /usr/libexec/apache2 ./libtool --mode=install install src/server/mod_wsgi.la /usr/libexec/apache2/ libtool: install: install src/server/.libs/mod_wsgi.so /usr/libexec/apache2/mod_wsgi.so install: /usr/libexec/apache2/mod_wsgi.so: Operation not permitted apxs:Error: Command failed with rc=4653056 . make: *** [install] Error 1
The directory you use to install the mod_wsgi module is up to you, but
one suggested option is that you use the directory
/usr/local/httpd/modules. Just ensure that this isn’t already used
by a separate installation of the Apache httpd server.
To install the mod_wsgi module into this directory use the command:
sudo make install LIBEXECDIR=/usr/local/httpd/modules
The output from the command will be similar to:
mkdir -p /usr/local/httpd/modules ./apxs -i -S LIBEXECDIR=/usr/local/httpd/modules -n 'mod_wsgi' src/server/mod_wsgi.la /usr/share/httpd/build/instdso.sh SH_LIBTOOL='./libtool' src/server/mod_wsgi.la /usr/local/httpd/modules ./libtool --mode=install install src/server/mod_wsgi.la /usr/local/httpd/modules/ libtool: install: install src/server/.libs/mod_wsgi.so /usr/local/httpd/modules/mod_wsgi.so libtool: install: install src/server/.libs/mod_wsgi.lai /usr/local/httpd/modules/mod_wsgi.la libtool: install: install src/server/.libs/mod_wsgi.a /usr/local/httpd/modules/mod_wsgi.a libtool: install: chmod 644 /usr/local/httpd/modules/mod_wsgi.a libtool: install: ranlib /usr/local/httpd/modules/mod_wsgi.a libtool: install: warning: remember to run `libtool --finish /usr/libexec/apache2' chmod 755 /usr/local/httpd/modules/mod_wsgi.so
The warning about needing to run
libtool --finish can be ignored as it
is not required for everything to work.
With the mod_wsgi module installed in this location, the
in the Apache httpd configuration file should be:
LoadModule wsgi_module /usr/local/httpd/modules/mod_wsgi.so
Normal steps to then configure the Apache httpd server and mod_wsgi for your specific WSGI application would then be followed.