Am Fr 21 Sep 2012 22:37:13 CEST schrieb Benjamin Root:
On Fri, Sep 21, 2012 at 4:19 PM, Travis Oliphant <travis@continuum.io <mailto:travis@continuum.io>> wrote:
On Sep 21, 2012, at 3:13 PM, Ralf Gommers wrote:
Hi,
An issue I keep running into is that packages use: install_requires = ["numpy"] or install_requires = ['numpy >= 1.6']
in their setup.py. This simply doesn't work a lot of the time. I actually filed a bug against patsy for that (https://github.com/pydata/patsy/issues/5), but Nathaniel is right that it would be better to bring it up on this list.
The problem is that if you use pip, it doesn't detect numpy (may work better if you had installed numpy with setuptools) and tries to automatically install or upgrade numpy. That won't work if users don't have the right compiler. Just as bad would be that it does work, and the user didn't want to upgrade for whatever reason.
This isn't just my problem; at Wes' pandas tutorial at EuroScipy I saw other people have the exact same problem. My recommendation would be to not use install_requires for numpy, but simply do something like this in setup.py:
try: import numpy except ImportError: raise ImportError("my_package requires numpy")
or
try: from numpy.version import short_version as npversion except ImportError: raise ImportError("my_package requires numpy") if npversion < '1.6': raise ImportError("Numpy version is %s; required is version >= 1.6" % npversion)
Any objections, better ideas? Is there a good place to put it in the numpy docs somewhere?
I agree. I would recommend against using install requires.
-Travis
Why? I have personally never had an issue with this. The only way I could imagine that this wouldn't work is if numpy was installed via some other means and there wasn't an entry in the easy-install.pth (or whatever equivalent pip uses). If pip is having a problem detecting numpy, then that is a bug that needs fixing somewhere.
As for packages getting updated unintentionally, easy_install and pip both require an argument to upgrade any existing packages (I think -U), so I am not sure how you are running into such a situation.
Quite easily, actually. I ran into pip wanting to upgrade numpy when I was installing/upgrading a package depending on numpy. Problem is, -U upgrades both the package you explicitly select *and* its dependencies. I know there's some way around this, but it's not obvious -- at least not for users. Cheers, Andreas.