#1260 closed defect (fixed)

there should be a way to force compiling C extensions from source

Reported by: davidsarah Owned by: somebody
Priority: major Milestone: 1.11.0
Component: packaging Version: 1.8.0
Keywords: install setuptools docs test Cc:
Launchpad Bug:

Description (last modified by warner)

On tahoe-dev, Zooko O'Whielacronx wrote:

One of the goals for this release is to let people on more platforms more easily set up Tahoe-LAFS. (Problems with the setup process are probably the number one complaint mentioned on the mailing list and issue tracker right now.)

Tahoe-LAFS itself is pure Python and doesn't need to be compiled at all, but some of its dependencies do, so a big part of the "ease of setup" goal is to provide binary packages of those dependencies.

Scott Dial replied:

I actually found this release less easy to install. On my linux machines, neither the setup.py or using easy_install yielded working dependencies for my system. Eventually I tracked it down to the pycryptopp binary egg:

[snip problem due to a libstdc++ ABI mismatch]

After solving the mystery, I was forced to resort to introspection:

$ python -c "import sys; \
           sys.path.insert(0, 'src/allmydata'); \
           from _auto_deps import install_requires; \
            print '\n'.join(install_requires)" \
  | xargs -I{} pip install "{}"
# This dependency gets missed for some reason:
$ pip install pyOpenSSL

To get all of the dependencies to be built by my system (easy_install will use the binary eggs, and there is no way to force it to ignore them), pip was the only tool I could find that would do it without me being involved.

This release took infinitely longer to install than 1.7, where I just ran "python setup.py build" and "python setup.py install" and was done.

We need to support an option to force compiling the C/C++ code in dependencies from source, for users who either encounter problems with the binary eggs, or just prefer to do it that way.

Change History (1)

comment:1 Changed at 2016-03-26T21:30:45Z by warner

  • Description modified (diff)
  • Milestone changed from undecided to 1.11.0
  • Resolution set to fixed
  • Status changed from new to closed

We're using wheels now, but to force pip to compile from source even though a binary wheel is available, use: e.g. pip wheel --no-use-wheel zfec.

Also note that neither we nor PyPI host *linux* binary wheels, because of the variety of incompatible ABIs in the linux world. There is work (see the PEP-513 "manylinux" spec) to fix this, but we're not using it yet.

I think we can close this. Please re-open if you disagree.

Note: See TracTickets for help on using tickets.