| 1 | Sometimes 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 | |
| 3 | A typical error message when building is: |
| 4 | |
| 5 | {{{ |
| 6 | distutils.errors.DistutilsError: Setup script exited with error: Unable to find vcvarsall.bat |
| 7 | }}} |
| 8 | |
| 9 | That's on Windows. On Linux a typical error message is: |
| 10 | |
| 11 | {{{ |
| 12 | error: Python.h: No such file or directory |
| 13 | }}} |
| 14 | |
| 15 | To 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 | |
| 17 | To 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 | |
| 19 | 1. 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 | |
| 21 | 2. 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 | |
| 23 | 3. 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 | |