
Hi, On Thu, Oct 4, 2012 at 7:35 AM, Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Thu, Oct 4, 2012 at 12:14 AM, Matthew Brett <matthew.brett@gmail.com> wrote:
Hi,
On Wed, Oct 3, 2012 at 10:51 PM, Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Wed, Oct 3, 2012 at 11:29 PM, Matthew Brett <matthew.brett@gmail.com> wrote:
Hi,
On Wed, Oct 3, 2012 at 10:17 PM, Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Mon, Oct 1, 2012 at 10:47 PM, Matthew Brett <matthew.brett@gmail.com> wrote:
Hi,
On Mon, Oct 1, 2012 at 9:42 PM, Matthew Brett <matthew.brett@gmail.com> wrote: > Hi, > > One of our kind users pointed out an error when using easy_install > to > install our package nipy. I've reproduced it now on a bare > package > using numpy distutils and having a trivial extension: > > https://github.com/matthew-brett/apkg > > To reproduce: > > git clone git://github.com/mathew-brett/apkg.git > > easy_install apkg > > You should get something like this: > > Processing apkg > Running setup.py -q bdist_egg --dist-dir > /home/mb312/tmp/apkg/egg-dist-tmp-T5yjuB > Appending apkg configuration to > Ignoring attempt to set 'name' (from '' to 'apkg') > zip_safe flag not set; analyzing archive contents... > Adding apkg 0.1 to easy-install.pth file > > Installed > > > /home/mb312/.virtualenvs/np-1.6.2/lib/python2.6/site-packages/apkg-0.1-py2.6-linux-i686.egg > Processing dependencies for apkg==0.1 > Finished processing dependencies for apkg==0.1 > > > > /home/mb312/.virtualenvs/np-1.6.2/lib/python2.6/site-packages/numpy/distutils/misc_util.py:252: > RuntimeWarning: Parent module 'numpy.distutils' not found while > handling absolute import > from numpy.distutils import log > > Note the last error.
Sorry, correcting myself - it's (obviously) a Warning rather than an error, but still distracting, and it would be good to avoid it if possible...
The combination of two or all of atexit.register, easy_install and virtualenv seems to be causing this. Unless someone feels like digging into that (I certainly don't), there are two easy solutions: 1. Silence the warning.
Sorry - I am not sure what you mean. The problem here is the user who assumes that something bad happened when running easy_install - which is what happened in the case of nipy. Is there some way of silencing this (specific) warning from within setup.py?
2. Remove the offending import and the logging. This will only remove the line "removing: _configtest.c _configtest.o" from the build log (x20).
Which import did you mean? I think I need all the imports I'm using in the example minimal package. I'm not explicitly importing logging for example.
The import that's indicated in the warning, on line 252 of numpy/distutils/misc_util.py. Relevant code:
_temporary_directory = None def clean_up_temporary_directory(): from numpy.distutils import log # CAUSES RUNTIME WARNING global _temporary_directory if not _temporary_directory: return log.debug('removing %s', _temporary_directory) try: shutil.rmtree(_temporary_directory) except OSError: pass _temporary_directory = None
def make_temp_file(suffix='', prefix='', text=True): global _temporary_directory if not _temporary_directory: _temporary_directory = tempfile.mkdtemp() atexit.register(clean_up_temporary_directory)
Sorry - I still don't understand. You mean I should (in my package - say nipy or 'apkg') monkey-patch numpy distutils.misc_util ?
No, I was proposing to fix this in numpy.distutils.misc_util directly. Sorry for not being clear.
Another option would be to move the import outside the callback function thus:
Should work too I guess, but since I don't understand why the import is where it is now I'm not 100% sure. Removing the import on line 252 and the log.debug call would be the safest fix.
The import is in the function because the following outside the function (at the top of misc_util): from numpy.distutils import log leads to the following on `python setup.py install`: Running from numpy source directory. Traceback (most recent call last): File "setup.py", line 214, in <module> setup_package() File "setup.py", line 191, in setup_package from numpy.distutils.core import setup File "/home/mb312/dev_trees/numpy/numpy/distutils/__init__.py", line 7, in <module> import ccompiler File "/home/mb312/dev_trees/numpy/numpy/distutils/ccompiler.py", line 14, in <module> from numpy.distutils import log File "/home/mb312/dev_trees/numpy/numpy/distutils/log.py", line 9, in <module> from misc_util import red_text, default_text, cyan_text, green_text, is_sequence, is_string File "/home/mb312/dev_trees/numpy/numpy/distutils/misc_util.py", line 21, in <module> from numpy.distutils import log ImportError: cannot import name log I'm guessing this is a problem of circular imports, because in numpy.distutils.log we see that numpy distutils is importing misc_util. It so happens that: from numpy.distutils.log import debug as log_debug works in this situation, I don't understand why. I suppose also that it may rely on something complex and / or undocumented in the details of python's import mechanism, and so might be better avoided. So, is the 'remove log call in function' reasonable for a patch to trunk? For the upcoming release? Cheers, Matthew