explain build process and compile failures
[Imported from Trac: page CompileError, version 1]
parent
a70e973569
commit
a9a1e42e3b
24
CompileError.md
Normal file
24
CompileError.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
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.
|
||||
|
||||
A typical error message when building is:
|
||||
|
||||
```
|
||||
distutils.errors.DistutilsError: Setup script exited with error: Unable to find vcvarsall.bat
|
||||
```
|
||||
|
||||
That's on Windows. On Linux a typical error message is:
|
||||
|
||||
```
|
||||
error: Python.h: No such file or directory
|
||||
```
|
||||
|
||||
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`.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
Loading…
Reference in a new issue