pypa / pip

The Python package installer
https://pip.pypa.io/
MIT License
9.39k stars 2.99k forks source link

pip install hangs with interactive setup.py setups #2732

Closed malemburg closed 6 years ago

malemburg commented 9 years ago

Try:

pip install egenix-pyopenssl

with Python 2.7 to see what I mean.

The setup.py in the packages asks for confirmation and pip no longer seems to support this (it did with earlier pip versions). Instead, the pip process simply hangs.

malemburg commented 9 years ago

pip 1.5.6 doesn't have this issue.

dstufft commented 9 years ago

This is most likely a result of the changes to silence output and make it so that the invocation of setup.py doesn't get to "take over" the stdout/stderr/stdin of the pip process itself. Ultimately those things were removed largely to present a better user experience (spamming people with random distutils warnings and such was a persistent source of confusion).

I'm surprised it's hanging though, I would have expected it to just bomb out when it couldn't read anything more from stdin, though I'm not sure if that would be a bug in pip or your setup.py.

Just for completeness, here's the results of doing this with pip 1.5.6:

$ pip install egenix-pyopenssl
Downloading/unpacking egenix-pyopenssl
  Downloading egenix-pyopenssl-0.13.8.zip (78kB): 78kB downloaded
  Running setup.py (path:/Users/dstufft/.virtualenvs/tmp-31d8628ad43eed9/build/egenix-pyopenssl/setup.py) egg_info for package egenix-pyopenssl
    ------------------------------------------------------------------------
    Cryptography Download Request
    =============================

    The file you are about to download from the eGenix.com server in
    Germany (the "Software") contains or links to code using cryptography
    and can be classified as 5D002a under the German Ausfuhrliste. Due to
    export restrictions imposed on such code, we have to ask you to read,
    approve and confirm the following terms and conditions. Please note
    that all downloads will be logged to comply with export regulations.

    File URL:
    https://www.egenix.com/cryptodownload/?file=egenix-pyopenssl-0.13.8.zip&confirm=1&action=download

    Export Control Restrictions
    ---------------------------

    You acknowledge that the Software is subject to the export control
    laws and regulations of Germany and the European Union ("EU") and may
    include technical algorithms and information that is subject to export
    restrictions imposed by German or EU law.

    You hereby confirm that you will not download, export, re-export or
    make available the Software, directly or indirectly, either to:

     * any countries that are subject to German and/or EU export
       restrictions, or

     * any end user (including yourself) who you know or have reason to
       believe will utilize them in the design, development or production
       of nuclear, chemical or biological weapons, or utilize them in a
       military, paramilitary, police or intelligence context, or

     * any end user (including yourself) who has been prohibited from
       participating in German and/or EU export transactions by the German
       and/or EU export control authorities.

    For more information on export control, please refer to the German
    BAFA [1] and EU Common Foreign & Security Policy [2]. Please also
    consult your national authorities on any legal restrictions that may
    apply to download and use of software containing cryptography.

    [1] http://www.ausfuhrkontrolle.info/bafa/en/export_control/index.html
    [2] http://eeas.europa.eu/cfsp/index_en.htm

    Confirmation
    ------------

    Please confirm that you have read, understood and agree to comply to
    the above terms and conditions.

    Thank you.

    ------------------------------------------------------------------------
    Please confirm the above terms by entering "ok":

I'll admit that prompting a user during the install isn't something that I've ever really thought about. I'm not sure that I'd consider it currently "supported" (in the sense that there are any tests or any consideration given to it, not that you can't technically do it). I'm not sure that supporting a free for all ability to prompt is a good idea in general, it assumes some level of interactivity on your install which breaks a major use case of pip.

Can you raise a distutils-sig thread? This is going to come down to trying to decide what the "interface" of setup.py is (in particular, whether or not it can assume to have control over stdout/stdin/stderr and a user present to interact with them. I've never personally considered that part of the API "contract" but maybe others have? Nailing down the API is an ongoing effort.

malemburg commented 9 years ago

After some more debugging, I found that the cause is pip not writing the output to stdout. Blindly confirming the question does cause pip to proceed with the installation, but not even pip -vv causes the output to written to the terminal in time (it is written to the terminal after entering the "ok"), which is a bit surprising since we're writing to sys.stdout.

Note that we do have built in an option to do the confirmation using an environment variable, but it would be good to:

We could then at least tell people to set the environment variable and then fail the installation.

ionelmc commented 9 years ago

Shouldn't pip just close stdin? That would make this sort of code in setup.py fail right away.

malemburg commented 9 years ago

On 28.04.2015 18:26, Ionel Cristian Mărieș wrote:

Shouldn't pip just close stdin? That would make this sort of code in setup.py fail right away.

I don't see how that would help.

On one hand you're putting effort into making pip look nice when used interactively, on the other hand you'd prevent any user interaction with the package's setup.py.

BTW: It's not unusual to have packages interact with the user during installation as you can see when e.g. installing Postfix Debian/Ubuntu packages.

Marc-Andre Lemburg

ionelmc commented 9 years ago

On Tue, Apr 28, 2015 at 7:35 PM, Marc-Andre Lemburg < notifications@github.com> wrote:

BTW: It's not unusual to have packages interact with the user during installation as you can see when e.g. installing Postfix Debian/Ubuntu packages.

​For some context here, yum works similarly to pip6, and output is captured (interactive post-install is a bad practice with rpm). On the other hand, Debian has support for interactive prompts​ that goes beyond the terminal (gui with choices and so on, via debconf).

The point was that getting an error is way better than getting stuck. Of course, this is in the context of not allowing interactive installs.

pfmoore commented 9 years ago

Personally, my instinct says that an interactive setup.py isn't something we particularly want to support. I have never encountered an interactive setup.py myself though, so it's hard to know what uses people make of the capability. Allowing setup.py control of stdin/stdout means that pip loses the ability to reduce clutter in the install output, which is something we've been doing a lot of work on recently (and IMO, the results are a huge improvement, that I'd be reluctant to lose).

I'm not too keen on the "please accept the license" style of use that triggered this. If there's a wheel available, the license acceptance won't be processed, for example. But equally, I don't know of any good alternative to the current approach. Maybe the package metadata should include a "print this text and wait for confirmation" item - it could probably be a metadata extension.

I agree with @dstufft, this should probably be discussed on distutils-sig.

malemburg commented 9 years ago

On 28.04.2015 18:51, Ionel Cristian Mărieș wrote:

On Tue, Apr 28, 2015 at 7:35 PM, Marc-Andre Lemburg < notifications@github.com> wrote:

BTW: It's not unusual to have packages interact with the user during installation as you can see when e.g. installing Postfix Debian/Ubuntu packages.

​For some context here, yum works similarly to pip6, and output is captured (interactive post-install is a bad practice with rpm). On the other hand, Debian has support for interactive prompts​ that goes beyond the terminal (gui with choices and so on, via debconf).

The point was that getting an error is way better than getting stuck. Of course, this is in the context of not allowing interactive installs.

Agreed, an error is definitely better.

I also believe that silencing all messages and warnings during installation is not a good idea, since packages may well not install correctly or not in the intended way without the user knowing (not because the package doesn't report this, but because pip doesn't show these messages).

A way to make the user experience better is by adding more structure to the output by e.g. adding headlines and sections. In the same way make works. A user who doesn't care can then use the -q option to create less verbose output - again in the same way make does.

Marc-Andre Lemburg

malemburg commented 9 years ago

Just to clarify:

So the question here is not so much whether or not to accept input, but rather whether or not to show setup.py output to the user without caching and filtering per default.

IMO, that's a regression not only because of things like the egenix-pyopenssl use case not working anymore, but also because it leaves the user without any feedback about the progress of the command currently running, e.g. try running "pip install numpy" - the process just sits there without any feedback, even though the system is compiling lots of stuff in the background.

pfmoore commented 9 years ago

I also believe that silencing all messages and warnings during installation is not a good idea, since packages may well not install correctly or not in the intended way without the user knowing (not because the package doesn't report this, but because pip doesn't show these messages).

I would be more inclined to agree with this if setup.py was less wordy by default. In particular, packages that use 2to3 generate multiple screenfuls of text that is essentially useless to the user.

Note that the "may not install correctly" argument is (or should be!) a red herring, as a failed install should result in the setup.py invocation ending in an error, which causes pip to display all of the captured output. If a package fails in its setup.py and pip doesn't report the output, that's a pip bug and should be reported (if a setup.py installation fails but exits with a success code, though, that's a bug in the setup.py and should be reported to the project).

As a way forward, I would suggest:

  1. Projects can provide wheels, which allows the setup.py output to be seen and dealt with on the build machine. This is obviously only a Windows/OSX solution at present.
  2. Work should be done to improve the options for setup.py to provide cleaner output. This is a discussion for distutils-sig, but I'm thinking in terms of 2a. New setuptools APIs to provide categorised output - maybe by using the logging module, 2b. Deprecation of direct use of stdin/stdout in setup.py in favour of the new setuptools APIs. 2c. (Possibly) Additional options for pip to control the level of setup.py output.

I am -1 on removing the improvements to pip that suppressed setup.py output for a successful build.

IMO, that's a regression not only because of things like the egenix-pyopenssl use case not working anymore, but also because it leaves the user without any feedback about the progress of the command currently running, e.g. try running "pip install numpy" - the process just sits there without any feedback, even though the system is compiling lots of stuff in the background.

Personally I don't view it as a regression, but as a deliberate change to improve the user experience. It has its limitations, but these are mostly due to setup.py limitations (hence my suggestions for improving things at that end before revisiting the issue in pip).

malemburg commented 9 years ago

On 28.04.2015 20:52, Paul Moore wrote:

Note that the "may not install correctly" argument is (or should be!) a red herring, as a failed install should result in the setup.py invocation ending in an error, which causes pip to display all of the captured output. If a package fails in its setup.py and pip doesn't report the output, that's a pip bug and should be reported (if a setup.py installation fails but exits with a success code, though, that's a bug in the setup.py and should be reported to the project).

I should have been clearer in what I meant: As example, it is well possible that an extension includes optional parts which only get installed in case e.g. certain libraries are available on the system.

In such a setting, the extension would print a warning to the console stating that it hasn't built the optional part. This warning is not displayed to the user using the latest pip.

Similarly, the setup.py may chose a compiler, library or specific setting during the compile step which the user wasn't aware of, e.g. use clang instead of gcc, compile without optimization, use a pure Python version instead of a C extension because the C extension cannot be compiled, etc.

Again, the installation of the package would succeed, but not necessarily be what the user really wants or expects.

As a way forward, I would suggest:

  1. Projects can provide wheels, which allows the setup.py output to be seen and dealt with on the build machine. This is obviously only a Windows/OSX solution at present.
  2. Work should be done to improve the options for setup.py to provide cleaner output. This is a discussion for distutils-sig, but I'm thinking in terms of 2a. New setuptools APIs to provide categorised output - maybe by using the logging module, 2b. Deprecation of direct use of stdin/stdout in setup.py in favour of the new setuptools APIs. 2c. (Possibly) Additional options for pip to control the level of setup.py output.

I am -1 on removing the improvements to pip that suppressed setup.py output for a successful build.

See above.

Note that these things have been hashed out over decades for e.g. make's output. It is easily possible to reduce the verbosity, but default is to display every to the user, since the output during the compile may well include important notices or warnings and helps a lot in detecting problems early.

If a user knows what to expect, she can use "make -q" to silence most of the less important details.

distutils has a logging mechanism to filter messages by importance (see distutils.log). Why don't you use it's levels instead of filtering the complete stdout output away ? The interfaces are all there, they just need to get used. It's even possible to replace the distutils lob interface with the stdlib logging module (the code was implemented to make this possible, but it never happened).

Note that egenix-pyopenssl only writes directly to sys.stdout because previous pip versions already filtered the distutils log output away or prevented in from being displayed right away by buffering it. The standard distutils log mechanism doesn't do this. We'd really like to not have to write hacks to work around pip issues, if possible.

Marc-Andre Lemburg

crdoconnor commented 8 years ago

+1 @malemburg

This issue is causing me a headache too via another use case.

IMO there ought to at least be a way to turn this behavior off on a per package basis (via setup.py?) rather than just sweeping all messages (spammy and vital) under the carpet and hoping that nothing too important got concealed from the user.

rgommers commented 8 years ago

I agree completely with @malemburg, this is a poor default choice and at the very least should be configurable by a package via its own setup.py. I just ran into this for scipy:

$ pip install scipy
Collecting scipy
  Using cached scipy-0.16.1.tar.gz
Building wheels for collected packages: scipy
 Running setup.py bdist_wheel for scipy
<silence>

That will sit there for at least 10 minutes with zero output. Most users will simply hit Ctrl-C.

A minimal and quick improvement would be to print some ....... to stdout so something appears to be moving under the hood. And show the user a message saying "Build in progress, for build output see /tmp/somefilename".

rgommers commented 8 years ago

And the concern about 2to3 probably isn't super relevant anymore. Most packages I know have dropped it in favor of a single codebase supporting Python 2.x and 3.x a long time ago.

EDIT: and if 2to3 noise is really such a big deal, why not filter it out and pass everything else through to stdout. Can't be that hard.

rgommers commented 8 years ago

A few more things that occurred to me:

::

$ ../Bento/bentomaker build -i -j
['../Bento/bentomaker', 'build', '-i', '-j']
Running from scipy source directory.
Checking for 'c_bgxlc' (c compiler)      : not found 
Checking for 'gcc' (c compiler)          : /usr/bin/gcc 
Checking for program python              : ['/usr/bin/python'] 
Checking for python version              : (2, 7, 6, 'final', 0) 
...
[  47/1071] f2py: scipy/optimize/cobyla/cobyla.pyf -> build/scipy/optimize/cobyla/_cobylamodule.c
[  48/1071] f2py: build/scipy/linalg/fblas.pyf -> build/scipy/linalg/_fblasmodule.c
[  49/1071] f2py: scipy/interpolate/src/fitpack.pyf -> build/scipy/interpolate/src/dfitpackmodule.c
[  50/1071] f2py: scipy/stats/statlib.pyf -> build/scipy/stats/statlibmodule.c
[  51/1071] f2py_fortran: scipy/integrate/tests/banded5x5.f -> build/scipy/integrate/tests/_test_odeint_bandedmodule.c
... 
dstufft commented 8 years ago

Well I mean, the verbosity of pip install on success cases was a pain point for people, particularly when it would indicate an error that wasn't actually an error which caused a lot of confusion. The main pain point being that people couldn't tell the difference between the output of the setup.py and the output of pip itself. There wasn't a whole lot we could do around that either because the output of basically every setup.py was way more voluminous than what pip produced so it easilly drowned out everything else. This was also a problem because it meant people would miss warnings printed onto their console as well because it would just scroll past in a sea of crap nobody actually cared about.

I don't think we're likely to re-enable the printing of the output of the build command, it's just way too varied, especially in the context of multiple different build commands that is currently being discussed, and I don't see any outcome except for returning back to the confusion it presented in the first case.

As far as why download has a progress bar and building doesn't, the answer is basically because we don't really have a sane way of doing it. We don't have any way for the build system to report progress back to pip so we can tell whether or not it's actually doing anything or not or how far it's progressed. The best we could do is use a spinner that just sits there and spins... but I'm not sure that's really any better since if the setup.py has hung it'll sit there and spin still which means people won't have any confidence that it means anything except we're waiting on the setup.py. I'm not opposed to it though, our progress tooling has a spinner built into it, though we'll need to switch our subprocess interface around so that instead of blocking on the subprocess call we poll it for the process to be done. That being said, I wouldn't be opposed to adding a spinner to it if people think it'd be less confusing.

For the record though, the main reason I left this ticket open is I wanted to close sys.stdin on the subprocess so an interactive setup.py like this just fails immediately instead of hang forever.

malemburg commented 8 years ago

On 02.11.2015 15:04, Donald Stufft wrote:

Well I mean, the verbosity of pip install on success cases was a pain point for people, particularly when it would indicate an error that wasn't actually an error which caused a lot of confusion. The main pain point being that people couldn't tell the difference between the output of the setup.py and the output of pip itself. There wasn't a whole lot we could do around that either because the output of basically every setup.py was way more voluminous than what pip produced so it easilly drowned out everything else. This was also a problem because it meant people would miss warnings printed onto their console as well because it would just scroll past in a sea of crap nobody actually cared about.

You do know that setup.py has a way of defining verbosity to increase or reduce the output volume, right ?

Cutting away important messages such as which libraries were used to build an extension, which options are enabled/disabled based on the installed libs, or failure to compile an option part of an extension is not something I'd call "crap nobody actually cared about".

Not showing this output will make the user experience worse, not better, since people will have a hard time debugging the reasons why their installation is not working correctly.

It's not even possible for users to assess the hidden output after the fact, because it's being sent to /dev/null and there's no option to bring it back or display it to the user, AFAIK.

This is really poor UI design, IMO.

Marc-Andre Lemburg http://www.malemburg.com/

pfmoore commented 8 years ago

Cutting away important messages such as which libraries were used to build an extension, which options are enabled/disabled based on the installed libs, or failure to compile an option part of an extension is not something I'd call "crap nobody actually cared about".

While in principle I agree with you, the feedback we got from pip users was that they genuinely didn't want to see the output being produced. It's not so much the failure case, where the output is "merely" unhelpfully verbose, but the success case, where it's genuinely not of interest.

I don't particularly defend our users' preference for hiding the data (even though as a user I agree with it) but it was the feedback we got, and we took the decision we did because of it.

This is really poor UI design, IMO.

Maybe you're right. The history is that pip's UI design has never been that good (arguably because setuptools/distutils didn't really offer what pip needed to manage it well as a subprocess, but the reason why is not really important). We're slowly improving it as best we can, but it's not simple to do so, particularly given the conflicting demands of the various parts of our user base.

Suggestions (or better yet, code ;-)) are always welcome, but should take into account what pip users have said they want (which is minimal output by default in the success case).

dstufft commented 8 years ago

You do know that setup.py has a way of defining verbosity to increase or reduce the output volume, right ?

Yes I am. I'm also aware it's practically useless. Here's the output of a very basic setup.py being invoked with -q:

$ python setup.py install --single-version-externally-managed -q --record /dev/null
running install
running build
running build_py
package init file 'warehouse/migrations/__init__.py' not found (or not a regular file)
running egg_info
writing warehouse.egg-info/PKG-INFO
writing entry points to warehouse.egg-info/entry_points.txt
writing top-level names to warehouse.egg-info/top_level.txt
writing dependency_links to warehouse.egg-info/dependency_links.txt
writing requirements to warehouse.egg-info/requires.txt
reading manifest file 'warehouse.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files found matching 'requirements.txt'
warning: no previously-included files found matching 'requirements-dev.txt'
warning: no previously-included files found matching 'requirements-deploy.txt'
warning: no previously-included files found matching 'babel.cfg'
warning: no previously-included files found matching 'Makefile'
warning: no previously-included files found matching 'Gulpfile.js'
warning: no previously-included files found matching 'package.json'
warning: no previously-included files found matching '.dockerignore'
warning: no previously-included files found matching 'Dockerfile'
warning: no previously-included files found matching 'docker-compose.yml'
warning: no previously-included files found matching 'Procfile'
warning: no previously-included files found matching 'runtime.txt'
warning: no previously-included files found matching 'uwsgi.ini'
no previously-included directories found matching 'bin'
no previously-included directories found matching 'vcl'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'dev'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'tasks'
writing manifest file 'warehouse.egg-info/SOURCES.txt'
running install_lib
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/__about__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/__main__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/auth_policy.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/forms.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/interfaces.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/models.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/services.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/accounts/views.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts
copying build/lib/warehouse/aws.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache
copying build/lib/warehouse/cache/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache
copying build/lib/warehouse/cache/http.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin
copying build/lib/warehouse/cache/origin/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin
copying build/lib/warehouse/cache/origin/fastly.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin
copying build/lib/warehouse/cache/origin/interfaces.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin
copying build/lib/warehouse/celery.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/classifiers
copying build/lib/warehouse/classifiers/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/classifiers
copying build/lib/warehouse/classifiers/models.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/classifiers
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli
copying build/lib/warehouse/cli/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/branches.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/current.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/downgrade.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/heads.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/history.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/merge.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/revision.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/show.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/stamp.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
copying build/lib/warehouse/cli/db/upgrade.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/search
copying build/lib/warehouse/cli/search/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/search
copying build/lib/warehouse/cli/search/reindex.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/search
copying build/lib/warehouse/cli/shell.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli
copying build/lib/warehouse/config.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/csrf.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/db.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/filters.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/forms.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n
copying build/lib/warehouse/i18n/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n
copying build/lib/warehouse/i18n/filters.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n
copying build/lib/warehouse/i18n/translations.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy
copying build/lib/warehouse/legacy/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy
copying build/lib/warehouse/legacy/action_routing.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api
copying build/lib/warehouse/legacy/api/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api
copying build/lib/warehouse/legacy/api/json.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api
copying build/lib/warehouse/legacy/api/pypi.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api
copying build/lib/warehouse/legacy/api/simple.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api
copying build/lib/warehouse/legacy/api/xmlrpc.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api
copying build/lib/warehouse/legacy/tables.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy
copying build/lib/warehouse/logging.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations
copying build/lib/warehouse/migrations/env.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations
copying build/lib/warehouse/migrations/script.py.mako -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/10cb17aea73_default_hosting_mode_to_pypi_only.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/111d8fc0443_use_enums_instead_of_text.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/116be7c87e1_add_a_sitemap_bucket_column_to_user.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/128a0ead322_add_primary_key_roles.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/1ce6d45d7ef_readd_the_unique_constraint_on_pep426_.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/1f002cab0a7_add_size_signature_and_docs.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/20f4dbe11e9_normalize_function.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/23a3c4ffe5d_relax_normalization_rules.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/283c68f2ab2_initial_migration.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/28a7e805fd0_drop_denormalized_normalized_name_field.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/312040efcfe_default_upload_time_to_now.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/3af8d0006ba_normalize_runs_of_characters_to_a_.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/41abd35caa3_add_index_on_release_created.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/41e9207fbe5_remove_the_description_html_column.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/49b93c346db_merge_1f002cab0a7_and_28a7e805fd0.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/4ec0adada10_add_function_to_convert_string_to_bucket.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/5345b1bc8b9_add_a_sitemap_bucket_column_to_project.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/57b1053998d_merge_41e9207fbe5_and_1ce6d45d7ef.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/5988e3e8d2e_add_primary_key_to_release_files.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/5ff0c99c94_add_primary_key_to_dependency.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/91508cc5c2_add_pep_426_normalize_index.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
copying build/lib/warehouse/migrations/versions/9177113533_add_a_column_to_specify_a_project_.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/packaging/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/packaging/interfaces.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/packaging/models.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/packaging/search.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/packaging/services.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/packaging/views.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging
copying build/lib/warehouse/raven.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/redirects.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/routes.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/search.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/sessions.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap
copying build/lib/warehouse/sitemap/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap
copying build/lib/warehouse/sitemap/models.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap
copying build/lib/warehouse/sitemap/views.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/css
copying build/lib/warehouse/static/css/normalize-db1aae18.css -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/css
copying build/lib/warehouse/static/css/normalize.css -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/css
copying build/lib/warehouse/static/css/style-696bf423.css -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/css
copying build/lib/warehouse/static/css/style.css -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/css
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/images
copying build/lib/warehouse/static/images/logo.png -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/images
copying build/lib/warehouse/static/images/search-icon.png -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/images
copying build/lib/warehouse/static/manifest.json -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_comments.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_flash.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_header.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_project.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_search-bar.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_stats.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
copying build/lib/warehouse/static/sass/_utils.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_base.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_buttons.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_forms.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_grid-settings.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_lists.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_tables.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_typography.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/base/_variables.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass/base
copying build/lib/warehouse/static/sass/style.scss -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/static/sass
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/accounts
copying build/lib/warehouse/templates/accounts/login.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/accounts
copying build/lib/warehouse/templates/accounts/logout.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/accounts
copying build/lib/warehouse/templates/accounts/profile.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/accounts
copying build/lib/warehouse/templates/base.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/includes
copying build/lib/warehouse/templates/includes/current-user-indicator.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/includes
copying build/lib/warehouse/templates/index.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/legacy
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/legacy/api
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/legacy/api/simple
copying build/lib/warehouse/templates/legacy/api/simple/detail.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/legacy/api/simple
copying build/lib/warehouse/templates/legacy/api/simple/index.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/legacy/api/simple
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/packaging
copying build/lib/warehouse/templates/packaging/detail.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/packaging
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/packaging/includes
copying build/lib/warehouse/templates/packaging/includes/project-stats.html -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/packaging/includes
copying build/lib/warehouse/templates/robots.txt -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/sitemap
copying build/lib/warehouse/templates/sitemap/bucket.xml -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/sitemap
copying build/lib/warehouse/templates/sitemap/index.xml -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/templates/sitemap
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/translations
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/translations/en
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/translations/en/LC_MESSAGES
copying build/lib/warehouse/translations/en/LC_MESSAGES/warehouse.po -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/translations/en/LC_MESSAGES
copying build/lib/warehouse/translations/warehouse.pot -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/translations
creating /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/__init__.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/attrs.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/crypto.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/gravatar.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/http.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/static.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/utils/wsgi.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils
copying build/lib/warehouse/views.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
copying build/lib/warehouse/wsgi.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/__about__.py to __about__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/__main__.py to __main__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/auth_policy.py to auth_policy.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/forms.py to forms.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/interfaces.py to interfaces.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/models.py to models.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/services.py to services.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/accounts/views.py to views.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/aws.py to aws.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/http.py to http.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin/fastly.py to fastly.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cache/origin/interfaces.py to interfaces.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/celery.py to celery.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/classifiers/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/classifiers/models.py to models.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/branches.py to branches.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/current.py to current.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/downgrade.py to downgrade.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/heads.py to heads.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/history.py to history.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/merge.py to merge.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/revision.py to revision.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/show.py to show.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/stamp.py to stamp.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/db/upgrade.py to upgrade.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/search/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/search/reindex.py to reindex.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/cli/shell.py to shell.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/config.py to config.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/csrf.py to csrf.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/db.py to db.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/filters.py to filters.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/forms.py to forms.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n/filters.py to filters.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/i18n/translations.py to translations.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/action_routing.py to action_routing.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api/json.py to json.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api/pypi.py to pypi.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api/simple.py to simple.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/api/xmlrpc.py to xmlrpc.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/legacy/tables.py to tables.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/logging.py to logging.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/env.py to env.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/10cb17aea73_default_hosting_mode_to_pypi_only.py to 10cb17aea73_default_hosting_mode_to_pypi_only.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/111d8fc0443_use_enums_instead_of_text.py to 111d8fc0443_use_enums_instead_of_text.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/116be7c87e1_add_a_sitemap_bucket_column_to_user.py to 116be7c87e1_add_a_sitemap_bucket_column_to_user.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/128a0ead322_add_primary_key_roles.py to 128a0ead322_add_primary_key_roles.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/1ce6d45d7ef_readd_the_unique_constraint_on_pep426_.py to 1ce6d45d7ef_readd_the_unique_constraint_on_pep426_.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/1f002cab0a7_add_size_signature_and_docs.py to 1f002cab0a7_add_size_signature_and_docs.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/20f4dbe11e9_normalize_function.py to 20f4dbe11e9_normalize_function.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/23a3c4ffe5d_relax_normalization_rules.py to 23a3c4ffe5d_relax_normalization_rules.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/283c68f2ab2_initial_migration.py to 283c68f2ab2_initial_migration.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/28a7e805fd0_drop_denormalized_normalized_name_field.py to 28a7e805fd0_drop_denormalized_normalized_name_field.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/312040efcfe_default_upload_time_to_now.py to 312040efcfe_default_upload_time_to_now.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/3af8d0006ba_normalize_runs_of_characters_to_a_.py to 3af8d0006ba_normalize_runs_of_characters_to_a_.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/41abd35caa3_add_index_on_release_created.py to 41abd35caa3_add_index_on_release_created.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/41e9207fbe5_remove_the_description_html_column.py to 41e9207fbe5_remove_the_description_html_column.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/49b93c346db_merge_1f002cab0a7_and_28a7e805fd0.py to 49b93c346db_merge_1f002cab0a7_and_28a7e805fd0.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/4ec0adada10_add_function_to_convert_string_to_bucket.py to 4ec0adada10_add_function_to_convert_string_to_bucket.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/5345b1bc8b9_add_a_sitemap_bucket_column_to_project.py to 5345b1bc8b9_add_a_sitemap_bucket_column_to_project.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/57b1053998d_merge_41e9207fbe5_and_1ce6d45d7ef.py to 57b1053998d_merge_41e9207fbe5_and_1ce6d45d7ef.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/5988e3e8d2e_add_primary_key_to_release_files.py to 5988e3e8d2e_add_primary_key_to_release_files.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/5ff0c99c94_add_primary_key_to_dependency.py to 5ff0c99c94_add_primary_key_to_dependency.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/91508cc5c2_add_pep_426_normalize_index.py to 91508cc5c2_add_pep_426_normalize_index.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/migrations/versions/9177113533_add_a_column_to_specify_a_project_.py to 9177113533_add_a_column_to_specify_a_project_.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging/interfaces.py to interfaces.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging/models.py to models.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging/search.py to search.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging/services.py to services.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/packaging/views.py to views.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/raven.py to raven.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/redirects.py to redirects.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/routes.py to routes.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/search.py to search.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sessions.py to sessions.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap/models.py to models.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/sitemap/views.py to views.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/__init__.py to __init__.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/attrs.py to attrs.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/crypto.py to crypto.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/gravatar.py to gravatar.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/http.py to http.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/static.py to static.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/utils/wsgi.py to wsgi.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/views.py to views.cpython-35.pyc
byte-compiling /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/wsgi.py to wsgi.cpython-35.pyc
running install_egg_info
Copying warehouse.egg-info to /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse-15.0.dev0-py3.5.egg-info
running install_scripts
Installing warehouse script to /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
writing list of installed files to '/dev/null'

This gets worse if the project has files that don't successfully byte compile on the current version of Python (for instance, if they have 2.x or 3.x only files that get installed but which have syntax errors on the current version of Python). We attempted to reduce the verbosity of this by filtering the output lines against a regex... but it's not really reliable to do that and it commonly broke down on byte-compile errors because they look exactly like actual errors.

I challenge you to point out even a single line in that output that an end user should care about, and that's when it's run with -q (which doesn't actually do much by default, both with and without has the same output).

But OK, so -q is pretty much useless, maybe we can just present stderr to the end user and let that pass through? Well, except distutils/setuptools is completely bonkers on that front too, here's what you get on stderr by default (again with -q):

$ python setup.py install --single-version-externally-managed --record /dev/null > /dev/null
package init file 'warehouse/migrations/__init__.py' not found (or not a regular file)
warning: no previously-included files found matching 'requirements.txt'
warning: no previously-included files found matching 'requirements-dev.txt'
warning: no previously-included files found matching 'requirements-deploy.txt'
warning: no previously-included files found matching 'babel.cfg'
warning: no previously-included files found matching 'Makefile'
warning: no previously-included files found matching 'Gulpfile.js'
warning: no previously-included files found matching 'package.json'
warning: no previously-included files found matching '.dockerignore'
warning: no previously-included files found matching 'Dockerfile'
warning: no previously-included files found matching 'docker-compose.yml'
warning: no previously-included files found matching 'Procfile'
warning: no previously-included files found matching 'runtime.txt'
warning: no previously-included files found matching 'uwsgi.ini'
no previously-included directories found matching 'bin'
no previously-included directories found matching 'vcl'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'dev'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'tasks'

Great, still a bunch of crap nobody actually cares about.

Cutting away important messages such as which libraries were used to build an extension, which options are enabled/disabled based on the installed libs, or failure to compile an option part of an extension is not something I'd call "crap nobody actually cared about".

Not showing this output will make the user experience worse, not better, since people will have a hard time debugging the reasons why their installation is not working correctly.

A better way to handle this is for these projects to record what options are enabled/disabled, what libraries they compiled against, and things of that nature and present it as a something that can be inspected from the installed distribution. Perhaps something like python -m foo.compileopts or something. The reason this is better is because it persists past the time when the project is actually being built which may be days, months, or even years ago from when the person is attempting to debug why something doesn't work. This is even more true now than it used to be thanks to the automatic Wheel cache in pip which means that someone could have built say, Pillow, without PNG support 6 months ago and are attempting to figure out now why they can't interact with PNGs. Showing them that information 6 months ago doesn't help them today, but Pillow providing a way to see what options it was compiled with does.

I believe that even when these projects were able to output information on to stdout/stderr that most users simply didn't see it because a pip install on any moderately sized project would simply produce pages and pages of output with 99% of it being useless noise.

malemburg commented 8 years ago

On 02.11.2015 15:44, Paul Moore wrote:

Cutting away important messages such as which libraries were used to build an extension, which options are enabled/disabled based on the installed libs, or failure to compile an option part of an extension is not something I'd call "crap nobody actually cared about".

While in principle I agree with you, the feedback we got from pip users was that they genuinely didn't want to see the output being produced. It's not so much the failure case, where the output is "merely" unhelpfully verbose, but the success case, where it's genuinely not of interest.

I don't particularly defend our users' preference for hiding the data (even though as a user I agree with it) but it was the feedback we got, and we took the decision we did because of it.

Defaulting to low verbosity is fine, as long as it's possible to adjust the verbosity level and also possible to check a log will the output after pip install has run (in both the success and error case).

pip users may not be aware that a packages makes decisions for them during the install and needs to inform them about those choices.

Examples: setup.py might find an old OpenSSL lib version due to missing include path setups and then build against this, opening up the user to vulnerabilities, or it may leave out building a sub-package because it cannot find the needed include files or tools to build them.

Since you're interfacing to the build process via command line rather than using distutils, you could define an text output format for the build process to use which pip can then parse and display correctly. Alternatively, the log data could be sent to an XML file via a setup.py option.

This is really poor UI design, IMO.

Maybe you're right. The history is that pip's UI design has never been that good (arguably because setuptools/distutils didn't really offer what pip needed to manage it well as a subprocess, but the reason why is not really important). We're slowly improving it as best we can, but it's not simple to do so, particularly given the conflicting demands of the various parts of our user base.

Suggestions (or better yet, code ;-)) are always welcome, but should take into account what pip users have said they want (which is minimal output by default in the success case).

See above.

Marc-Andre Lemburg http://www.malemburg.com/

dstufft commented 8 years ago

Note: Adding more -q does make it better, in this case for the simple example above, it devolves into the stderr case. So here's a more complex example using multiple -q:

$ python setup.py install -qqqqqqq --single-version-externally-managed --record /dev/null
running install
running build
running build_py
creating build
creating build/lib.macosx-10.11-x86_64-3.5
creating build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/__init__.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/_binary.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/_util.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/BdfFontFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/BmpImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/BufrStubImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ContainerIO.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/CurImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/DcxImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/EpsImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ExifTags.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/features.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/FitsStubImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/FliImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/FontFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/FpxImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/GbrImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/GdImageFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/GifImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/GimpGradientFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/GimpPaletteFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/GribStubImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/Hdf5StubImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/IcnsImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/IcoImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/Image.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageChops.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageCms.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageColor.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageDraw.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageDraw2.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageEnhance.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageFilter.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageFont.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageGrab.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageMath.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageMode.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageMorph.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageOps.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImagePalette.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImagePath.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageQt.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageSequence.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageShow.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageStat.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageTk.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageTransform.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImageWin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/ImtImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/IptcImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/Jpeg2KImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/JpegImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/JpegPresets.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/McIdasImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/MicImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/MpegImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/MpoImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/MspImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/OleFileIO.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PaletteFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PalmImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PcdImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PcfFontFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PcxImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PdfImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PixarImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PngImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PpmImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PsdImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PSDraw.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/PyAccess.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/SgiImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/SpiderImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/SunImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/TarIO.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/TgaImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/TiffImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/TiffTags.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/WalImageFile.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/WebPImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/WmfImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/XbmImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/XpmImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
copying PIL/XVThumbImagePlugin.py -> build/lib.macosx-10.11-x86_64-3.5/PIL
running egg_info
writing dependency_links to Pillow.egg-info/dependency_links.txt
writing top-level names to Pillow.egg-info/top_level.txt
writing Pillow.egg-info/PKG-INFO
reading manifest file 'Pillow.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'Pillow.egg-info/SOURCES.txt'
copying PIL/OleFileIO-README.md -> build/lib.macosx-10.11-x86_64-3.5/PIL
running build_ext
--- using frameworks at /System/Library/Frameworks
building 'PIL._imaging' extension
creating build/temp.macosx-10.11-x86_64-3.5
creating build/temp.macosx-10.11-x86_64-3.5/libImaging
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c _imaging.c -o build/temp.macosx-10.11-x86_64-3.5/_imaging.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c outline.c -o build/temp.macosx-10.11-x86_64-3.5/outline.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Bands.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Bands.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/ConvertYCbCr.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/ConvertYCbCr.o
_imaging.c:488:7: warning: variable 'r' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
                if (PyLong_Check(color)) {
                    ^~~~~~~~~~~~~~~~~~~
/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/longobject.h:15:9: note: expanded from macro 'PyLong_Check'
        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/object.h:666:35: note: expanded from macro 'PyType_FastSubclass'
#define PyType_FastSubclass(t,f)  PyType_HasFeature(t,f)
                                  ^~~~~~~~~~~~~~~~~~~~~~
/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/object.h:664:33: note: expanded from macro 'PyType_HasFeature'
#define PyType_HasFeature(t,f)  (((t)->tp_flags & (f)) != 0)
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
_imaging.c:498:7: note: uninitialized use occurs here
                if (r == -1 && PyErr_Occurred())
                    ^
_imaging.c:488:3: note: remove the 'if' if its condition is always true
                if (PyLong_Check(color)) {
                ^~~~~~~~~~~~~~~~~~~~~~~~~
_imaging.c:477:10: note: initialize the variable 'r' to silence this warning
    int r, g, b, a;
         ^
          = 0
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c path.c -o build/temp.macosx-10.11-x86_64-3.5/path.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Copy.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Copy.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/BitDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/BitDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Crc32.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Crc32.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Blend.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Blend.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Crop.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Crop.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Access.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Access.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Chops.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Chops.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Dib.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Dib.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Draw.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Draw.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/AlphaComposite.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/AlphaComposite.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Convert.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Convert.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Resample.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Resample.o
1 warning generated.
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c decode.c -o build/temp.macosx-10.11-x86_64-3.5/decode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Filter.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Filter.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Effects.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Effects.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c encode.c -o build/temp.macosx-10.11-x86_64-3.5/encode.o
encode.c:57:43: warning: comparison of constant 0 with boolean expression is always false [-Wtautological-constant-out-of-range-compare]
    if(!PyType_Ready(&ImagingEncoderType) < 0)
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/EpsEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/EpsEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/FliDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/FliDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/GifEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/GifEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/File.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/File.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Geometry.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Geometry.o
1 warning generated.
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c map.c -o build/temp.macosx-10.11-x86_64-3.5/map.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Fill.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Fill.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c display.c -o build/temp.macosx-10.11-x86_64-3.5/display.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/HexDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/HexDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/LzwDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/LzwDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Offset.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Offset.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Histo.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Histo.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Matrix.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Matrix.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Pack.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Pack.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/JpegDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/JpegDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/ModeFilter.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/ModeFilter.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/MspDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/MspDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/JpegEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/JpegEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/GetBBox.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/GetBBox.o
libImaging/JpegEncode.c:233:37: warning: comparison of integers of different signs: 'int' and 'size_t' (aka 'unsigned long') [-Wsign-compare]
        if (context->rawExifLen + 5 >  context->destination.pub.free_in_buffer){
            ~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/PackDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/PackDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Negative.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Negative.o
1 warning generated.
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Quant.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Quant.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/GifDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/GifDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Palette.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Palette.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/PcxDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/PcxDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/PcxEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/PcxEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/RawEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/RawEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Paste.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Paste.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Point.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Point.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Storage.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Storage.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/RankFilter.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/RankFilter.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/SunRleDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/SunRleDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/QuantOctree.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/QuantOctree.o
libImaging/QuantOctree.c:188:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->rBits > rBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:195:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->gBits > gBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:202:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->bBits > bBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:209:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->aBits > aBits) {
       ~~~~~~~~~~~ ^ ~~~~~
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/TgaRleDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/TgaRleDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/RawDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/RawDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/UnpackYCC.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/UnpackYCC.o
4 warnings generated.
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/QuantHash.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/QuantHash.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Unpack.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Unpack.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/ZipEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/ZipEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/UnsharpMask.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/UnsharpMask.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/QuantHeap.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/QuantHeap.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/TiffDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/TiffDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/XbmDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/XbmDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/PcdDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/PcdDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/XbmEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/XbmEncode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Incremental.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Incremental.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/BoxBlur.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/BoxBlur.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/ZipDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/ZipDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Jpeg2KDecode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Jpeg2KDecode.o
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_LIBJPEG -DHAVE_LIBZ -DHAVE_LIBTIFF -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c libImaging/Jpeg2KEncode.c -o build/temp.macosx-10.11-x86_64-3.5/libImaging/Jpeg2KEncode.o
Building using 4 processes
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/openssl/lib -L/Users/dstufft/.pyenv/versions/3.5.0/lib build/temp.macosx-10.11-x86_64-3.5/_imaging.o build/temp.macosx-10.11-x86_64-3.5/decode.o build/temp.macosx-10.11-x86_64-3.5/encode.o build/temp.macosx-10.11-x86_64-3.5/map.o build/temp.macosx-10.11-x86_64-3.5/display.o build/temp.macosx-10.11-x86_64-3.5/outline.o build/temp.macosx-10.11-x86_64-3.5/path.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Access.o build/temp.macosx-10.11-x86_64-3.5/libImaging/AlphaComposite.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Resample.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Bands.o build/temp.macosx-10.11-x86_64-3.5/libImaging/BitDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Blend.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Chops.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Convert.o build/temp.macosx-10.11-x86_64-3.5/libImaging/ConvertYCbCr.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Copy.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Crc32.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Crop.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Dib.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Draw.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Effects.o build/temp.macosx-10.11-x86_64-3.5/libImaging/EpsEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/File.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Fill.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Filter.o build/temp.macosx-10.11-x86_64-3.5/libImaging/FliDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Geometry.o build/temp.macosx-10.11-x86_64-3.5/libImaging/GetBBox.o build/temp.macosx-10.11-x86_64-3.5/libImaging/GifDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/GifEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/HexDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Histo.o build/temp.macosx-10.11-x86_64-3.5/libImaging/JpegDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/JpegEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/LzwDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Matrix.o build/temp.macosx-10.11-x86_64-3.5/libImaging/ModeFilter.o build/temp.macosx-10.11-x86_64-3.5/libImaging/MspDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Negative.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Offset.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Pack.o build/temp.macosx-10.11-x86_64-3.5/libImaging/PackDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Palette.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Paste.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Quant.o build/temp.macosx-10.11-x86_64-3.5/libImaging/QuantOctree.o build/temp.macosx-10.11-x86_64-3.5/libImaging/QuantHash.o build/temp.macosx-10.11-x86_64-3.5/libImaging/QuantHeap.o build/temp.macosx-10.11-x86_64-3.5/libImaging/PcdDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/PcxDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/PcxEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Point.o build/temp.macosx-10.11-x86_64-3.5/libImaging/RankFilter.o build/temp.macosx-10.11-x86_64-3.5/libImaging/RawDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/RawEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Storage.o build/temp.macosx-10.11-x86_64-3.5/libImaging/SunRleDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/TgaRleDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Unpack.o build/temp.macosx-10.11-x86_64-3.5/libImaging/UnpackYCC.o build/temp.macosx-10.11-x86_64-3.5/libImaging/UnsharpMask.o build/temp.macosx-10.11-x86_64-3.5/libImaging/XbmDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/XbmEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/ZipDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/ZipEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/TiffDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Incremental.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Jpeg2KDecode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/Jpeg2KEncode.o build/temp.macosx-10.11-x86_64-3.5/libImaging/BoxBlur.o -L/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib -L/usr/local/lib -L/usr/local/Cellar/freetype/2.6_1/lib -L/usr/lib -ljpeg -lz -ltiff -o build/lib.macosx-10.11-x86_64-3.5/PIL/_imaging.cpython-35m-darwin.so
building 'PIL._imagingft' extension
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c _imagingft.c -o build/temp.macosx-10.11-x86_64-3.5/_imagingft.o
_imagingft.c:400:27: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
            for (y = 0; y < glyph->bitmap.rows; y++) {
                        ~ ^ ~~~~~~~~~~~~~~~~~~
_imagingft.c:419:27: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
            for (y = 0; y < glyph->bitmap.rows; y++) {
                        ~ ^ ~~~~~~~~~~~~~~~~~~
2 warnings generated.
Building using 4 processes
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/openssl/lib -L/Users/dstufft/.pyenv/versions/3.5.0/lib build/temp.macosx-10.11-x86_64-3.5/_imagingft.o -L/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib -L/usr/local/lib -L/usr/local/Cellar/freetype/2.6_1/lib -L/usr/lib -lfreetype -o build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingft.cpython-35m-darwin.so
building 'PIL._webp' extension
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DHAVE_WEBPMUX -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c _webp.c -o build/temp.macosx-10.11-x86_64-3.5/_webp.o
Building using 4 processes
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/openssl/lib -L/Users/dstufft/.pyenv/versions/3.5.0/lib build/temp.macosx-10.11-x86_64-3.5/_webp.o -L/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib -L/usr/local/lib -L/usr/local/Cellar/freetype/2.6_1/lib -L/usr/lib -lwebp -lwebpmux -lwebpdemux -o build/lib.macosx-10.11-x86_64-3.5/PIL/_webp.cpython-35m-darwin.so
building 'PIL._imagingtk' extension
creating build/temp.macosx-10.11-x86_64-3.5/Tk
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c _imagingtk.c -o build/temp.macosx-10.11-x86_64-3.5/_imagingtk.o -framework Tcl -framework Tk
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c Tk/tkImaging.c -o build/temp.macosx-10.11-x86_64-3.5/Tk/tkImaging.o -framework Tcl -framework Tk
clang: warning: -framework Tcl: 'linker' input unused
clang: warning: -framework Tk: 'linker' input unused
clang: warning: -framework Tcl: 'linker' input unused
clang: warning: -framework Tk: 'linker' input unused
Building using 4 processes
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/openssl/lib -L/Users/dstufft/.pyenv/versions/3.5.0/lib build/temp.macosx-10.11-x86_64-3.5/_imagingtk.o build/temp.macosx-10.11-x86_64-3.5/Tk/tkImaging.o -L/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib -L/usr/local/lib -L/usr/local/Cellar/freetype/2.6_1/lib -L/usr/lib -o build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingtk.cpython-35m-darwin.so -framework Tcl -framework Tk
building 'PIL._imagingmath' extension
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c _imagingmath.c -o build/temp.macosx-10.11-x86_64-3.5/_imagingmath.o
Building using 4 processes
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/openssl/lib -L/Users/dstufft/.pyenv/versions/3.5.0/lib build/temp.macosx-10.11-x86_64-3.5/_imagingmath.o -L/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib -L/usr/local/lib -L/usr/local/Cellar/freetype/2.6_1/lib -L/usr/lib -o build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingmath.cpython-35m-darwin.so
building 'PIL._imagingmorph' extension
clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/System/Library/Frameworks/Tcl.framework/Versions/8.5/Headers -I/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -I/usr/local/Cellar/freetype/2.6_1/include/freetype2 -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/Pillow-3.0.0/libImaging -I/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/include -I/usr/local/include -I/usr/local/Cellar/freetype/2.6_1/include -I/usr/include -I/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m -c _imagingmorph.c -o build/temp.macosx-10.11-x86_64-3.5/_imagingmorph.o
Building using 4 processes
clang -bundle -undefined dynamic_lookup -L/usr/local/opt/openssl/lib -L/Users/dstufft/.pyenv/versions/3.5.0/lib build/temp.macosx-10.11-x86_64-3.5/_imagingmorph.o -L/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib -L/usr/local/lib -L/usr/local/Cellar/freetype/2.6_1/lib -L/usr/lib -o build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingmorph.cpython-35m-darwin.so
--------------------------------------------------------------------
PIL SETUP SUMMARY
--------------------------------------------------------------------
version      Pillow 3.0.0
platform     darwin 3.5.0 (default, Oct  8 2015, 21:08:25)
             [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.72)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
*** OPENJPEG (JPEG2000) support not available
--- ZLIB (PNG/ZIP) support available
--- LIBTIFF support available
--- FREETYPE2 support available
*** LITTLECMS2 support not available
--- WEBP support available
--- WEBPMUX support available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

To check the build, run the selftest.py script.

running build_scripts
creating build/scripts-3.5
copying Scripts/createfontdatachunk.py -> build/scripts-3.5
copying and adjusting Scripts/enhancer.py -> build/scripts-3.5
copying and adjusting Scripts/explode.py -> build/scripts-3.5
copying and adjusting Scripts/gifmaker.py -> build/scripts-3.5
copying and adjusting Scripts/painter.py -> build/scripts-3.5
copying and adjusting Scripts/pilconvert.py -> build/scripts-3.5
copying and adjusting Scripts/pildriver.py -> build/scripts-3.5
copying and adjusting Scripts/pilfile.py -> build/scripts-3.5
copying and adjusting Scripts/pilfont.py -> build/scripts-3.5
copying and adjusting Scripts/pilprint.py -> build/scripts-3.5
copying and adjusting Scripts/player.py -> build/scripts-3.5
copying and adjusting Scripts/thresholder.py -> build/scripts-3.5
copying and adjusting Scripts/viewer.py -> build/scripts-3.5
changing mode of build/scripts-3.5/createfontdatachunk.py from 644 to 755
changing mode of build/scripts-3.5/enhancer.py from 644 to 755
changing mode of build/scripts-3.5/explode.py from 644 to 755
changing mode of build/scripts-3.5/gifmaker.py from 644 to 755
changing mode of build/scripts-3.5/painter.py from 644 to 755
changing mode of build/scripts-3.5/pilconvert.py from 644 to 755
changing mode of build/scripts-3.5/pildriver.py from 644 to 755
changing mode of build/scripts-3.5/pilfile.py from 644 to 755
changing mode of build/scripts-3.5/pilfont.py from 644 to 755
changing mode of build/scripts-3.5/pilprint.py from 644 to 755
changing mode of build/scripts-3.5/player.py from 644 to 755
changing mode of build/scripts-3.5/thresholder.py from 644 to 755
changing mode of build/scripts-3.5/viewer.py from 644 to 755
running install_lib
copying build/lib.macosx-10.11-x86_64-3.5/PIL/_imaging.cpython-35m-darwin.so -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/PIL
copying build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingft.cpython-35m-darwin.so -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/PIL
copying build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingmath.cpython-35m-darwin.so -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/PIL
copying build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingmorph.cpython-35m-darwin.so -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/PIL
copying build/lib.macosx-10.11-x86_64-3.5/PIL/_imagingtk.cpython-35m-darwin.so -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/PIL
copying build/lib.macosx-10.11-x86_64-3.5/PIL/_webp.cpython-35m-darwin.so -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/PIL
running install_egg_info
removing '/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/Pillow-3.0.0-py3.5.egg-info' (and everything under it)
Copying Pillow.egg-info to /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/Pillow-3.0.0-py3.5.egg-info
running install_scripts
copying build/scripts-3.5/enhancer.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/explode.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/gifmaker.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/painter.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/pilconvert.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/pildriver.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/pilfile.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/pilfont.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/pilprint.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/player.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/thresholder.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
copying build/scripts-3.5/viewer.py -> /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/createfontdatachunk.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/enhancer.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/explode.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/gifmaker.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/painter.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/pilconvert.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/pildriver.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/pilfile.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/pilfont.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/pilprint.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/player.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/thresholder.py to 755
changing mode of /Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/bin/viewer.py to 755
writing list of installed files to '/dev/null'

The "nice" thing about this is that the extraneous crap from setup.py actually pushes the useful information 3-4 pages up on a fairly reasonable terminal size.

malemburg commented 8 years ago

On 02.11.2015 15:47, Donald Stufft wrote:

You do know that setup.py has a way of defining verbosity to increase or reduce the output volume, right ?

Yes I am. I'm also aware it's practically useless. Here's the output of a very basic setup.py being invoked with -q:

$ python setup.py install --single-version-externally-managed -q --record /dev/null

You need to pass -q to setup.py, not the command you're running.

Try:

python setup.py -q install ...

Marc-Andre Lemburg http://www.malemburg.com/

dstufft commented 8 years ago

Defaulting to low verbosity is fine, as long as it's possible to adjust the verbosity level and also possible to check a log will the output after pip install has run (in both the success and error case).

You can adjust the verbosity level using -v to pip which will allow the output of setup.py to be part of the stream without any filtering. For awhile we had the full output of every command logged but we ended up removing that because it was causing churn in the cache directory which helped contribute to systems which detected if they needed to re-persist the cache directory based on if anything changed in that directory to have unneeded cache churn.

dstufft commented 8 years ago
$ python setup.py -qqqqqqqq install -qqqqqqq --single-version-externally-managed --record /dev/null
package init file 'warehouse/migrations/__init__.py' not found (or not a regular file)
warning: no previously-included files found matching 'requirements.txt'
warning: no previously-included files found matching 'requirements-dev.txt'
warning: no previously-included files found matching 'requirements-deploy.txt'
warning: no previously-included files found matching 'babel.cfg'
warning: no previously-included files found matching 'Makefile'
warning: no previously-included files found matching 'Gulpfile.js'
warning: no previously-included files found matching 'package.json'
warning: no previously-included files found matching '.dockerignore'
warning: no previously-included files found matching 'Dockerfile'
warning: no previously-included files found matching 'docker-compose.yml'
warning: no previously-included files found matching 'Procfile'
warning: no previously-included files found matching 'runtime.txt'
warning: no previously-included files found matching 'uwsgi.ini'
no previously-included directories found matching 'bin'
no previously-included directories found matching 'vcl'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'dev'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'tasks'

That's still a page full of stuff that nobody cares about and is completely useless.

Here's what the output looks like if you have a file in it that for 2.x when you're installing into 3.x (or the other way too):

$ python setup.py -qqqqqqqq install -qqqqqqq --single-version-externally-managed --record /dev/null
package init file 'warehouse/migrations/__init__.py' not found (or not a regular file)
warning: no previously-included files found matching 'requirements.txt'
warning: no previously-included files found matching 'requirements-dev.txt'
warning: no previously-included files found matching 'requirements-deploy.txt'
warning: no previously-included files found matching 'babel.cfg'
warning: no previously-included files found matching 'Makefile'
warning: no previously-included files found matching 'Gulpfile.js'
warning: no previously-included files found matching 'package.json'
warning: no previously-included files found matching '.dockerignore'
warning: no previously-included files found matching 'Dockerfile'
warning: no previously-included files found matching 'docker-compose.yml'
warning: no previously-included files found matching 'Procfile'
warning: no previously-included files found matching 'runtime.txt'
warning: no previously-included files found matching 'uwsgi.ini'
no previously-included directories found matching 'bin'
no previously-included directories found matching 'vcl'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'dev'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'tasks'
  File "/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/invalid_syntax.py", line 1
    raise Exception, "Bar"
                   ^
SyntaxError: invalid syntax

This install was completely successful, the error there is only an error during byte compile and can safely be ignored... but how is someone supposed to know that from the output? This was a constant source of confusion for people.

Even for the Pillow case, it does mean that the informational stuff shows up on the first page but it still shows stuff that is unlikely to be useful for anyone but the maintainers of Pillow:

$ python setup.py -qqqqqqqq install -qqqqqqq --single-version-externally-managed --record /dev/null
--- using frameworks at /System/Library/Frameworks
Building using 4 processes
_imaging.c:488:7: warning: variable 'r' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
                if (PyLong_Check(color)) {
                    ^~~~~~~~~~~~~~~~~~~
/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/longobject.h:15:9: note: expanded from macro 'PyLong_Check'
        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/object.h:666:35: note: expanded from macro 'PyType_FastSubclass'
#define PyType_FastSubclass(t,f)  PyType_HasFeature(t,f)
                                  ^~~~~~~~~~~~~~~~~~~~~~
/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/object.h:664:33: note: expanded from macro 'PyType_HasFeature'
#define PyType_HasFeature(t,f)  (((t)->tp_flags & (f)) != 0)
                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
_imaging.c:498:7: note: uninitialized use occurs here
                if (r == -1 && PyErr_Occurred())
                    ^
_imaging.c:488:3: note: remove the 'if' if its condition is always true
                if (PyLong_Check(color)) {
                ^~~~~~~~~~~~~~~~~~~~~~~~~
_imaging.c:477:10: note: initialize the variable 'r' to silence this warning
    int r, g, b, a;
         ^
          = 0
1 warning generated.
encode.c:57:43: warning: comparison of constant 0 with boolean expression is always false
      [-Wtautological-constant-out-of-range-compare]
    if(!PyType_Ready(&ImagingEncoderType) < 0)
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
1 warning generated.
libImaging/JpegEncode.c:233:37: warning: comparison of integers of different signs: 'int' and 'size_t' (aka 'unsigned long')
      [-Wsign-compare]
        if (context->rawExifLen + 5 >  context->destination.pub.free_in_buffer){
            ~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
libImaging/QuantOctree.c:188:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->rBits > rBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:195:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->gBits > gBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:202:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->bBits > bBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:209:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->aBits > aBits) {
       ~~~~~~~~~~~ ^ ~~~~~
4 warnings generated.
Building using 4 processes
_imagingft.c:400:27: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
            for (y = 0; y < glyph->bitmap.rows; y++) {
                        ~ ^ ~~~~~~~~~~~~~~~~~~
_imagingft.c:419:27: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
            for (y = 0; y < glyph->bitmap.rows; y++) {
                        ~ ^ ~~~~~~~~~~~~~~~~~~
2 warnings generated.
Building using 4 processes
Building using 4 processes
clangclang: : warning: warning: -framework Tcl: 'linker' input unused-framework Tcl: 'linker' input unused

clangclang: : warningwarning: : -framework Tk: 'linker' input unused-framework Tk: 'linker' input unused

Building using 4 processes
Building using 4 processes
--------------------------------------------------------------------
PIL SETUP SUMMARY
--------------------------------------------------------------------
version      Pillow 3.0.0
platform     darwin 3.5.0 (default, Oct  8 2015, 21:08:25)
             [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.72)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
*** OPENJPEG (JPEG2000) support not available
--- ZLIB (PNG/ZIP) support available
--- LIBTIFF support available
--- FREETYPE2 support available
*** LITTLECMS2 support not available
--- WEBP support available
--- WEBPMUX support available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.

To check the build, run the selftest.py script.

It's easy to look at something like that Pillow example and just sort of ignore the fact that there is a good chunk of stuff there that most people just won't care about or even the "simple" example that has a page full of stuff. However, when you're installing a number of projects like you will with any moderately complex project each page of output produced by these things add up and it's really easy for even minimal output to end up with 10-30 pages of output where the vast bulk of it simply isn't useful at all or worse, is outright confusing.

If we were a GUI we could hide the build log under a collapsed thing for each thing we installed which would make it way easier, but we're not. Reducing the amount of pointless output is important to a lot of our users and since showing it only helps if you're building the thing right now, not if you're re-using the wheel you built a month ago, I think this is better solved by libraries providing more insight against the installed item than by increasing the verbosity of pip by default.

That being said, it's possible that pip could store the output of the setup.py invocation in the installation metadata... but it's not entirely trivial to do since in the wheel build case we won't have that until after the wheel is built. So we'd need to then open the wheel and add a file to it. This would ruin the ability for the wheel file to be deterministic though (which isn't currently possible, but it's an oft requested feature).

rgommers commented 8 years ago

Why would you store the build log inside the wheel or install? A tmpfile will do just fine.

I understand the default chosen. There are still more users of pure-Python packages/stacks than those with (significant amounts of) compiled code. And those installs almost always work, so OK to hide by default.

pip install -v also helps. I actually tried -v and decided that it didn't work because of the long time pip takes to get started (~3 min on my machine for scipy, hence my attempt at fixing that last night....).

You're OK with a progress indicator, so that's the easiest one down. Now for the other one: what do you think about allowing a package to toggle pips behavior on this? Maybe a simple key in setup.cfg? Probably easier to do than storing the build log somewhere (and no concern about disk pollution).

dstufft commented 8 years ago

Why would you store the build log inside the wheel or install? A tmpfile will do just fine.

A temp file goes away, with cached Wheels you may be debugging something that was built days/weeks/months ago long past that time that temp file has been cleaned. It seems silly to say that the installation that happens right now from that build is the only one that will need the ability to debug the build. Using PIL as an example again, I might not have cared if I got PNG today because I was only manipulating JPEG, but a month from now I might want to be interacting with PNG and that temporary file is gone.

You're OK with a progress indicator, so that's the easiest one down. Now for the other one: what do you think about allowing a package to toggle pips behavior on this? Maybe a simple key in setup.cfg? Probably easier to do than storing the build log somewhere (and no concern about disk pollution).

It feels like the wrong solution TBH. It still doesn't solve anything beyond the initial build. I'm not sure why a solution that only covers things if people immediately notice it is better than projects exposing what options they were compiled with at runtime somehow. This seems to be a common pattern in C stuff already where they do things like:

$ openssl version -a
OpenSSL 1.0.2d 9 Jul 2015
built on: reproducible build, date unspecified
platform: darwin64-x86_64-cc
options:  bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: clang -I. -I.. -I../include  -fPIC -fno-common -DOPENSSL_PIC -DZLIB_SHARED -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -arch x86_64 -O3 -DL_ENDIAN -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/etc/openssl"

or

$ python -m sysconfig
Platform: "macosx-10.11-x86_64"
Python version: "3.5"
Current installation scheme: "posix_prefix"

Paths:
    data = "/Users/dstufft/.pyenv/versions/3.5.0"
    include = "/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m"
    platinclude = "/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m"
    platlib = "/Users/dstufft/.pyenv/versions/3.5.0/lib/python3.5/site-packages"
    platstdlib = "/Users/dstufft/.pyenv/versions/3.5.0/lib/python3.5"
    purelib = "/Users/dstufft/.pyenv/versions/3.5.0/lib/python3.5/site-packages"
    scripts = "/Users/dstufft/.pyenv/versions/3.5.0/bin"
    stdlib = "/Users/dstufft/.pyenv/versions/3.5.0/lib/python3.5"

Variables:
    ABIFLAGS = "m"
    AC_APPLE_UNIVERSAL_BUILD = "0"
    AIX_GENUINE_CPLUSPLUS = "0"
    AR = "ar"
    ARFLAGS = "rc"
    ASDLGEN = "python ./Parser/asdl_c.py"
    ASDLGEN_FILES = "./Parser/asdl.py ./Parser/asdl_c.py"
    AST_ASDL = "./Parser/Python.asdl"
    AST_C = "Python/Python-ast.c"
    AST_C_DIR = "Python"
    AST_H = "Include/Python-ast.h"
    AST_H_DIR = "Include"
    BASECFLAGS = "-Wno-unused-result -Wsign-compare -Wunreachable-code"
    BASECPPFLAGS = ""
    BASEMODLIBS = ""
    BINDIR = "/Users/dstufft/.pyenv/versions/3.5.0/bin"
    BINLIBDEST = "/Users/dstufft/.pyenv/versions/3.5.0/lib/python3.5"
    ...

I know that Conda is gaining some popularity in the scientific world. They only support installing from already compiled modules afaik, do they report to you what the compile time options were during install? If not why is it important that pip does it while building (but not when installed from a binary dist).

rgommers commented 8 years ago

First, note that numpy for example does what you suggest already:

$ python -c "import numpy; numpy.show_config()"
lapack_opt_info:
    libraries = ['lapack', 'f77blas', 'cblas', 'atlas']
    library_dirs = ['/usr/lib/atlas-base/atlas', '/usr/lib/atlas-base']
    define_macros = [('NO_ATLAS_INFO', -1)]
    language = f77
    include_dirs = ['/usr/include/atlas']
openblas_lapack_info:
  NOT AVAILABLE
atlas_3_10_blas_threads_info:
  NOT AVAILABLE
atlas_threads_info:
  NOT AVAILABLE
atlas_3_10_threads_info:
  NOT AVAILABLE
atlas_blas_info:
    libraries = ['f77blas', 'cblas', 'atlas']
    library_dirs = ['/usr/lib/atlas-base']
    define_macros = [('HAVE_CBLAS', None), ('NO_ATLAS_INFO', -1)]
    language = c
    include_dirs = ['/usr/include/atlas']
...
...

But there are multiple problems with relying on just that:

  1. It doesn't cover everything. I ask users for build logs regularly (and yes, sometimes they may need to re-build to obtain them).
  2. It's a lot more effort for each project to implement, so in practice is going to happen slowly (if ever).
  3. A whole lot of stuff simply won't be available. For projects that rely on numpy.distutils, they somehow need to coerce numpy.distutils to give them back compile flags etc. Good luck with that. Same for setuptools I expect.

I know that Conda is gaining some popularity in the scientific world. They only support installing from already compiled modules afaik, do they report to you what the compile time options were during install? If not why is it important that pip does it while building (but not when installed from a binary dist).

Don't think there's a reporting mechanism, but for those binaries it's much easier because build recipes for them can be inspected.

It's also not just about reporting options. There's a lot of stuff in a build log that's very valuable. What about which compilers that were selected? Exact Cython version used? Compile flags that came from Python itself? Warnings about API/ABI incompatibility? I can go on, but I hope it's clear that just implementing some reporting thingy isn't the solution to everything.

rgommers commented 8 years ago

A temp file goes away, with cached Wheels you may be debugging something that was built days/weeks/months ago long past that time that temp file has been cleaned. It seems silly to say that the installation that happens right now from that build is the only one that will need the ability to debug the build.

You could keep temp files in some rotating store - keep the last N.

Inserting stuff in wheels is going to give problems I'd expect. What about wheels that are later uploaded somewhere?

rgommers commented 8 years ago

It feels like the wrong solution TBH. It still doesn't solve anything beyond the initial build.

Do you have any idea how important that initial build is for scientific projects? Distribution and install is easy in comparison. So even a partial solution helps a lot. It's also trivial to implement, so why not do this and encourage projects to add some show_config type thing.

njsmith commented 8 years ago

regarding progress indication: my thought would be that if the build is slow, then put up a spinner, and update the spinner each time there's some text printed by the child process? it wouldn't be a panacea because some slow builds might sit for a long time without printing anything, but at least that is under the control of the code being built.

class SpinnerTee(object):
    # A file proxy that calls spinner.update() whenever data is written
    # (but limited by max_updates_per_second)
    def __init__(self, real_output_file, max_updates_per_second, spinner):
        self._real_output_file = real_output_file
        self._max_updates_per_second = max_updates_per_second
        self._spinner = spinner
        self._last_update = -1

    def write(self, data):
        now = time.time()
        if now - self._last_update > (1 / max_updates_per_second):
            self._spinner.update()
            self._last_update = now
        self._real_output_file.write(data)

    def close(self):
        self._real_output_file.close()

Biggest issue would be build systems that turn on output buffering when their stdout is not a terminal so that output writes get batched up and only delivered once every 4096 bytes, but that could be fixed within setuptools or within the setup.py of individual projects like scipy that have slow builds and get complaints from impatient users.

njsmith commented 8 years ago

Correction: it looks like the solution to the buffering issue would just be for pip to run python -u setup.py ... instead of python setup.py ....

malemburg commented 8 years ago

On 02.11.2015 16:38, Donald Stufft wrote:

$ python setup.py -qqqqqqqq install -qqqqqqq --single-version-externally-managed --record /dev/null
package init file 'warehouse/migrations/__init__.py' not found (or not a regular file)
warning: no previously-included files found matching 'requirements.txt'
warning: no previously-included files found matching 'requirements-dev.txt'
warning: no previously-included files found matching 'requirements-deploy.txt'
warning: no previously-included files found matching 'babel.cfg'
warning: no previously-included files found matching 'Makefile'
warning: no previously-included files found matching 'Gulpfile.js'
warning: no previously-included files found matching 'package.json'
warning: no previously-included files found matching '.dockerignore'
warning: no previously-included files found matching 'Dockerfile'
warning: no previously-included files found matching 'docker-compose.yml'
warning: no previously-included files found matching 'Procfile'
warning: no previously-included files found matching 'runtime.txt'
warning: no previously-included files found matching 'uwsgi.ini'
no previously-included directories found matching 'bin'
no previously-included directories found matching 'vcl'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'dev'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'tasks'

That's still a page full of stuff that nobody cares about and is completely useless.

Is it ?

At least some of those warnings and errors point to problems with your MANIFEST.in file (or the lack of having such a file and distutils assuming some defaults).

Here's what the output looks like if you have a file in it that for 2.x when you're installing into 3.x (or the other way too):

$ python setup.py -qqqqqqqq install -qqqqqqq --single-version-externally-managed --record /dev/null
package init file 'warehouse/migrations/__init__.py' not found (or not a regular file)
warning: no previously-included files found matching 'requirements.txt'
warning: no previously-included files found matching 'requirements-dev.txt'
warning: no previously-included files found matching 'requirements-deploy.txt'
warning: no previously-included files found matching 'babel.cfg'
warning: no previously-included files found matching 'Makefile'
warning: no previously-included files found matching 'Gulpfile.js'
warning: no previously-included files found matching 'package.json'
warning: no previously-included files found matching '.dockerignore'
warning: no previously-included files found matching 'Dockerfile'
warning: no previously-included files found matching 'docker-compose.yml'
warning: no previously-included files found matching 'Procfile'
warning: no previously-included files found matching 'runtime.txt'
warning: no previously-included files found matching 'uwsgi.ini'
no previously-included directories found matching 'bin'
no previously-included directories found matching 'vcl'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'dev'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'tasks'
  File "/Users/dstufft/.virtualenvs/tmp-8474a91e5e17e69/lib/python3.5/site-packages/warehouse/invalid_syntax.py", line 1
    raise Exception, "Bar"
                   ^
SyntaxError: invalid syntax

This install was completely successful, the error there is only an error during byte compile and can safely be ignored... but how is someone supposed to know that from the output? This was a constant source of confusion for people.

By looking at it and seeing that Python 2 syntax is not being accepted by Python 3 ?!

The above may also well be a genuine error in the application, e.g. you may be trying to install Python 2 software with Python 3.

Even for the Pillow case, it does mean that the informational stuff shows up on the first page but it still shows stuff that is unlikely to be useful for anyone but the maintainers of Pillow:

$ python setup.py -qqqqqqqq install -qqqqqqq --single-version-externally-managed --record /dev/null

BTW: You only need a single -q, since this sets .verbosity to 0.

--- using frameworks at /System/Library/Frameworks

This is useful information.

Building using 4 processes _imaging.c:488:7: warning: variable 'r' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (PyLong_Check(color)) { ^~~~~~~ /Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/longobject.h:15:9: note: expanded from macro 'PyLong_Check' PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS) ^~~~~~~~~~~~~~ /Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/object.h:666:35: note: expanded from macro 'PyType_FastSubclass'

define PyType_FastSubclass(t,f) PyType_HasFeature(t,f)

                              ^~~~~~~~~~~~~~~~~~~~~~

/Users/dstufft/.pyenv/versions/3.5.0/include/python3.5m/object.h:664:33: note: expanded from macro 'PyType_HasFeature'

define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0)

                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

_imaging.c:498:7: note: uninitialized use occurs here if (r == -1 && PyErr_Occurred()) ^ _imaging.c:488:3: note: remove the 'if' if its condition is always true if (PyLong_Check(color)) { ^~~~~~~~~ _imaging.c:477:10: note: initialize the variable 'r' to silence this warning int r, g, b, a; ^ = 0 1 warning generated. encode.c:57:43: warning: comparison of constant 0 with boolean expression is always false [-Wtautological-constant-out-of-range-compare] if(!PyType_Ready(&ImagingEncoderType) < 0)


1 warning generated.
libImaging/JpegEncode.c:233:37: warning: comparison of integers of different signs: 'int' and 'size_t' (aka 'unsigned long')
      [-Wsign-compare]
        if (context->rawExifLen + 5 >  context->destination.pub.free_in_buffer){
            ~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
libImaging/QuantOctree.c:188:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->rBits > rBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:195:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->gBits > gBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:202:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->bBits > bBits) {
       ~~~~~~~~~~~ ^ ~~~~~
libImaging/QuantOctree.c:209:20: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
   if (cube->aBits > aBits) {
       ~~~~~~~~~~~ ^ ~~~~~
4 warnings generated.
Building using 4 processes
_imagingft.c:400:27: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
            for (y = 0; y < glyph->bitmap.rows; y++) {
                        ~ ^ ~~~~~~~~~~~~~~~~~~
_imagingft.c:419:27: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare]
            for (y = 0; y < glyph->bitmap.rows; y++) {
                        ~ ^ ~~~~~~~~~~~~~~~~~~
2 warnings generated.

These warnings may well hint at problems when running the application and could cause a crash or unexpected output.

Maintainers should be made aware of these warnings.

Building using 4 processes Building using 4 processes clangclang: : warning: warning: -framework Tcl: 'linker' input unused-framework Tcl: 'linker' input unused

clangclang: : warningwarning: : -framework Tk: 'linker' input unused-framework Tk: 'linker' input unused

Again, this is something to report to the maintainers. That way they can document or fix the warning in the setup.py output.

Building using 4 processes

Building using 4 processes

PIL SETUP SUMMARY

version Pillow 3.0.0 platform darwin 3.5.0 (default, Oct 8 2015, 21:08:25)

[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.72)]

--- TKINTER support available --- JPEG support available * OPENJPEG (JPEG2000) support not available --- ZLIB (PNG/ZIP) support available --- LIBTIFF support available --- FREETYPE2 support available * LITTLECMS2 support not available --- WEBP support available

--- WEBPMUX support available

To add a missing option, make sure you have the required library, and set the corresponding ROOT variable in the setup.py script.

To check the build, run the selftest.py script.


It's easy to look at something like that Pillow example and just sort of ignore the fact that there is a good chunk of stuff there that most people just won't care about or even the "simple" example that has a page full of stuff. However, when you're installing a number of projects like you will with any moderately complex project each page of output produced by these things add up and it's really easy for even minimal output to end up with 10-30 pages of output where the vast bulk of it simply isn't useful at all or worse, is outright confusing.

If we were a GUI we could hide the build log under a collapsed thing for each thing we installed which would make it way easier, but we're not. Reducing the amount of pointless output is important to a lot of our users and since showing it only helps if you're building the thing right now, not if you're re-using the wheel you built a month ago, I think this is better solved by libraries providing more insight against the installed item than by increasing the verbosity of pip by default.

I think the answer to all this needs to be more nuanced. On/off is not the right way to approach this. If a build script needs to report important information to the user, this should be possible, either by using special syntax for the output or by signaling it in some other way.

The full log then provides the necessary audit information for later debugging or finding out why certain things failed to build.

In the above -q examples, (most, if not all) output to stdout is silenced. What you are seeing on the console is mostly stderr output generated by the compiler and warnings issued using log.warn() from inside distutils.

That being said, it's possible that pip could store the output of the setup.py invocation in the installation metadata... but it's not entirely trivial to do since in the wheel build case we won't have that until after the wheel is built. So we'd need to then open the wheel and add a file to it. This would ruin the ability for the wheel file to be deterministic though (which isn't currently possible, but it's an oft requested feature).

Why not store the log alongside the wheel file in the cache and have pip output the log using e.g. "pip audit somepackage" ?

Marc-Andre Lemburg http://www.malemburg.com/

ionelmc commented 8 years ago

On Tue, Nov 3, 2015 at 12:42 PM, Marc-Andre Lemburg < notifications@github.com> wrote:

no previously-included directories found matching '.travis' no previously-included directories found matching 'dev' no previously-included directories found matching 'docs/_build' no previously-included directories found matching 'tasks'


That's still a page full of stuff that nobody cares about and is
completely useless.

Is it ?

At least some of those warnings and errors point to problems with your MANIFEST.in file (or the lack of having such a file and distutils assuming some defaults).

The excludes/prunes will create spurious warnings at least. The idea is that you exclude stuff you usually have in development, but that stuff don't exist in the temp dir pip creates - thus spurious warnings.​

^

SyntaxError: invalid syntax


This install was completely successful, the error there is only an error
during byte compile and can safely be ignored... but how is someone
supposed to know that from the output? This was a constant source of
confusion for people.

By looking at it and seeing that Python 2 syntax is not being accepted by Python 3 ?!

The above may also well be a genuine error in the application, e.g. you may be trying to install Python 2 software with Python 3.

​I actually have this problem in one of my packages - I have a module​ with some py3 specific code (that is only imported on py3 - I want to use yieldfrom if it's available) and people have actually complained about the weird warning.

malemburg commented 8 years ago

On 03.11.2015 12:43, Ionel Cristian Mărieș wrote:

^

SyntaxError: invalid syntax


This install was completely successful, the error there is only an error
during byte compile and can safely be ignored... but how is someone
supposed to know that from the output? This was a constant source of
confusion for people.

By looking at it and seeing that Python 2 syntax is not being accepted by Python 3 ?!

The above may also well be a genuine error in the application, e.g. you may be trying to install Python 2 software with Python 3.

​I actually have this problem in one of my packages - I have a module​ with some py3 specific code (that is only imported on py3 - I want to use yieldfrom if it's awailable) and people have actually complained about the weird warning.

I think this should be addressed by fixing distutils to optionally detect and ignore such SyntaxErrors in a set of files. This could then be enabled via setup.cfg. It's a separate issues from the one at hand, though.

Marc-Andre Lemburg http://www.malemburg.com/

dstufft commented 8 years ago

It's a separate issues from the one at hand, though.

It's not really though. The underlying reason why pip no longer shows the build logs by default is because we have no control over what the build system ouputs and pretty much no matter what we do to try and differentiate them if it's output by default people will assume it's pip giving the error and will get confused about what it means. That particular thing is just one particularly annoying example of the underlying problem.

Shoving things into a temporary file is something that could be done and just outputting the location of that temporary file saying something like: "See /tmp/whatever.log to view build log". I don't think it's unreasonable though I worry it's not as good of a solution as something that is more persistent than a temporary file since a built wheel might still be being used days, weeks, months or even years later. There are other questions too of course like how do we ensure we don't just fill up the temporary directory over time since we won't be cleaning up the temporary files at the end of the execution, but those really just need someone to sit down and figure it out.

malemburg commented 8 years ago

On 04.11.2015 01:28, Donald Stufft wrote:

It's a separate issues from the one at hand, though.

It's not really though. The underlying reason why pip no longer shows the build logs by default is because we have no control over what the build system ouputs and pretty much no matter what we do to try and differentiate them if it's output by default people will assume it's pip giving the error and will get confused about what it means. That particular thing is just one particularly annoying example of the underlying problem.

I think you seeing this all black and white. There's actually a lot of grey in there :-)

First of all, pip should make it clear that the output is generated by the build process, so that users can see where the messages are generated.

Then, we would need to solve the issues with standard distutils commands such as the SyntaxError which a maintainer could easily flag as false positive in setup.cfg.

And finally, to make interaction of pip with the build process easier, there should be a clear definition of how important messages that do need to be seen by the user should look like, so that pip can parse and then highlight them.

Now all this is going to take a while to implement, so starting with first recording the logs in a central place is a good short term solution.

Shoving things into a temporary file is something that could be done and just outputting the location of that temporary file saying something like: "See /tmp/whatever.log to view build log". I don't think it's unreasonable though I worry it's not as good of a solution as something that is more persistent than a temporary file since a built wheel might still be being used days, weeks, months or even years later. There are other questions too of course like how do we ensure we don't just fill up the temporary directory over time since we won't be cleaning up the temporary files at the end of the execution, but those really just need someone to sit down and figure it out.

I usually put all build logs into gzipped files in a subdir of the product build area (and keep them there, since they don't take up much space and are useful for auditing purposes). In case of pip, this would probably be the cache dir where it puts the wheel files.

pip could also remove older build logs in case it rebuilds a wheel so that it never stores more than one build log per wheel.

Marc-Andre Lemburg http://www.malemburg.com/

kadrlica commented 8 years ago

I just ran across a similar issue when writing a setup.py script that asks for user confirmation to install an optional component. I have a build option to automate the confirmation, but the filtering (and delayed printing) of sys.stdout was a head scratcher until I found this thread.

It seems unlikely that pip will be modified to allow a prompt to be displayed for user input, and in my case it would be preferable to close sys.stdin on the subprocess.

njsmith commented 8 years ago

@kadrlica: I agree that pip showing output by default isn't going to happen, so closing sys.stdin for harm reduction seems like a good idea to me too. Probably the next step is for someone (maybe you?) to submit a PR that does this.

malemburg commented 8 years ago

By closing sys.stdin you'd make it impossible to report back anything from the setup.py install process, including debug information, build information, install choices made by the install command, etc.

How can that be considered "harm reduction" ? You'd be breaking "setup.py install" even more.

What you will probably regard as "enhanced user experience" again, is, in reality, a user nightmare in every single case something in the build and install process doesn't work out as planned. You can easily end up with a target system that is missing important parts, is slow because a C extension failed to build or using wrong libraries - with no way to detect these errors early by e.g. parsing the log files for indications of things going wrong.

pfmoore commented 8 years ago

I'm confused. Why would closing sys.stdin affect output/reporting?

malemburg commented 8 years ago

On 27.06.2016 09:59, Paul Moore wrote:

I'm confused. Why would closing sys.stdin affect output/reporting?

Oh, sorry, not enough coffee yet... I read "sys.stdout". Closing sys.stdin is probably fine if you don't allow accepting user input anyway.

Marc-Andre Lemburg http://www.malemburg.com/

pradyunsg commented 7 years ago

Commenting to add this to my watch list.

rgommers commented 7 years ago

@pradyunsg may be a nice one to add to your GSoC proposal.

Commenting to add this to my watch list.

Note there's a "subscribe" button in the right sidebar for watching an issue, no need to comment.

pradyunsg commented 7 years ago

@rgommers Thanks. That's what I meant by "watch list". I forgot that watch the verb already had a use. I guess I could have phrased it better...

I've commented on issues I am interested in, and then I use the search to see what issues I've commented on already.

I know about the subscribe button. :)

piotr-dobrogost commented 7 years ago

@rgommers There's no way to list issues you are subscribed to.

pradyunsg commented 7 years ago

Coming around to this now...


I agree with @dstufft, this should probably be discussed on distutils-sig.

I couldn't find any discussion about this in the archives.

Shouldn't pip just close stdin?

I guess so... Is this how we want to do this?

dogopupper commented 6 years ago

"Running setup.py bdist_wheel for numpy: still running" takes forever.

Google led me here. Am I in the right place? What's the problem in a summary?

rgommers commented 6 years ago

@dogopupper not really. The numpy issue tracker would be the right place. Please provide the whole build log there, because this is not enough info to help you.

RubensZimbres commented 6 years ago

Same issue installing numpy in Ubuntu Core ARM system using pip==10.0.1

$ sudo pip3 install tensorflow-1.8.0-cp35-none-linux_armv7l.whl

Processing ./tensorflow-1.8.0-cp35-none-linux_armv7l.whl Requirement already satisfied (use --upgrade to upgrade): gast>=0.2.0 in /usr/local/lib/python3.5/dist-packages (from tensorflow==1.8.0) Collecting grpcio>=1.8.6 (from tensorflow==1.8.0) Downloading https://files.pythonhosted.org/packages/0b/ba/7f8b2578dd33bad86345dda09c42caaf66aa5cbab451f2d3e6e10814b933/grpcio-1.13.0-cp35-cp35m-linux_armv7l.whl (8.3MB) 70% |###################### | 5.9MB 3.0MB/s eta 0:00:01debug2: channel 0: window 998918 sent adjust 49658 100% |################################| 8.3MB 16kB/s Collecting tensorboard<1.9.0,>=1.8.0 (from tensorflow==1.8.0) Downloading https://files.pythonhosted.org/packages/59/a6/0ae6092b7542cfedba6b2a1c9b8dceaf278238c39484f3ba03b03f07803c/tensorboard-1.8.0-py3-none-any.whl (3.1MB) 100% |################################| 3.1MB 45kB/s Requirement already satisfied (use --upgrade to upgrade): wheel>=0.26 in ./.local/lib/python3.5/site-packages (from tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): six>=1.10.0 in /usr/local/lib/python3.5/dist-packages (from tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): astor>=0.6.0 in /usr/local/lib/python3.5/dist-packages (from tensorflow==1.8.0) Collecting absl-py>=0.1.6 (from tensorflow==1.8.0) Downloading https://files.pythonhosted.org/packages/57/8d/6664518f9b6ced0aa41cf50b989740909261d4c212557400c48e5cda0804/absl-py-0.2.2.tar.gz (82kB) 100% |################################| 92kB 1.1MB/s Collecting numpy>=1.13.3 (from tensorflow==1.8.0) Downloading https://files.pythonhosted.org/packages/d5/6e/f00492653d0fdf6497a181a1c1d46bbea5a2383e7faf4c8ca6d6f3d2581d/numpy-1.14.5.zip (4.9MB) 24% |####### | 1.2MB 3.4MB/s eta 0:00:02debug2: channel 0: window 999389 sent adjust 49187 100% |################################| 4.9MB 29kB/s Requirement already satisfied (use --upgrade to upgrade): termcolor>=1.1.0 in /usr/local/lib/python3.5/dist-packages (from tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): protobuf>=3.4.0 in /usr/local/lib/python3.5/dist-packages (from tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): html5lib==0.9999999 in /usr/local/lib/python3.5/dist-packages (from tensorboard<1.9.0,>=1.8.0->tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): bleach==1.5.0 in /usr/local/lib/python3.5/dist-packages (from tensorboard<1.9.0,>=1.8.0->tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): markdown>=2.6.8 in /usr/local/lib/python3.5/dist-packages (from tensorboard<1.9.0,>=1.8.0->tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): werkzeug>=0.11.10 in /usr/local/lib/python3.5/dist-packages (from tensorboard<1.9.0,>=1.8.0->tensorflow==1.8.0) Requirement already satisfied (use --upgrade to upgrade): setuptools in ./.local/lib/python3.5/site-packages (from protobuf>=3.4.0->tensorflow==1.8.0) Installing collected packages: grpcio, numpy, tensorboard, absl-py, tensorflow Found existing installation: numpy 1.11.0 Not uninstalling numpy at /usr/lib/python3/dist-packages, outside environment /usr Running setup.py install for numpy ... /

Then stalls.

njsmith commented 6 years ago

Are you sure it's stalled, as compared to just slow? I don't believe numpy ever prompts for interactive input, and also the problem with interactive input causing hangs was already solved in recent pip versions.

Try running adding -v to the pip command to see the build logs, and if it still seems to hang then file a bug on the numpy tracker and we'll take a look.