Changes between Initial Version and Version 1 of CompileError


Ignore:
Timestamp:
2012-07-09T19:14:09Z (12 years ago)
Author:
zooko
Comment:

explain build process and compile failures

Legend:

Unmodified
Added
Removed
Modified
  • CompileError

    v1 v1  
     1Sometimes running {{{python setup.py build}}} results in an error message about a compile failure. This page will tell you how to get past that problem.
     2
     3A typical error message when building is:
     4
     5{{{
     6distutils.errors.DistutilsError: Setup script exited with error: Unable to find vcvarsall.bat
     7}}}
     8
     9That's on Windows. On Linux a typical error message is:
     10
     11{{{
     12error: Python.h: No such file or directory
     13}}}
     14
     15To decide what to do about this, you have to understand that the Tahoe-LAFS software itself is written in 100% pure Python and never gets compiled. However, Tahoe-LAFS uses several libraries which themselves contain native C or C++ code that needs to be compiled. Currently there are six libraries that Tahoe-LAFS uses: {{{Twisted}}}, {{{pyOpenSSL}}}, {{{pycrypto}}}, {{{pycryptopp}}}, {{{zfec}}}, and {{{zope.interface}}}.
     16
     17To understand why the compile failure happens and how to get past it, you have to understand that {{{python setup.py build}}} tries *three* different methods of satisfying Tahoe-LAFS's need for its libraries, and only if all three methods fail does it emit an error message like this.
     18
     191. First, if a suitable version of the library is already installed in your system, then Tahoe-LAFS will just use that. So for example if the compile failure is happening because it can't compile {{{Twisted}}}, and if you were to install Twisted into your operating system, such as by running {{{sudo apt-get install python-twisted}}} on Debian, or by downloading and running the MSI installer for Twisted from http://twistedmatrix.com/trac/ on Windows, then the compile failure would stop happening, because it would no longer attempt to compile Twisted, because it would use the installed Twisted instead.
     20
     212. Second, if a "Python egg" of the library for your platform and your version of Python is available from the library's page on http://pypi.python.org or from [//source/tahoe-lafs/deps/tahoe-lafs-dep-eggs/README.html the collection of eggs hosted on http://tahoe-lafs.org], it will download and use that. In that case it will not attempt to compile the library at all! It will instead use the precompiled "egg" package of that library.
     22
     233. Third, only if both of the two methods above failed then it downloads the source code of the library and tries to compile it. Then, if you don't have a compiler, you don't have the {{{Python.h}}} header file, or you don't have some other compile-time dependency of that library, the compile will fail and you'll get an error message like the ones above.
     24