• Kirill Smelkov's avatar
    setup: Propagate only setuptools, not whole sys.path · 8f624957
    Kirill Smelkov authored
    This updates and fixes 487e5226 (setup: specify setuptools location
    explicitly when calling make.) to use @kazuhiko original idea to
    propagate only setuptools location. The reason is - when propagating
    whole sys.path things break under tox tests:
    
    ---- 8< ----
    ========================================================================== test session starts ===========================================================================
    platform linux2 -- Python 2.7.12, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
    rootdir: /home/kirr/src/wendelin/release/wendelin.core, inifile:
    collected 33 items
    
    bigarray/tests/test_arrayzodb.py .......
    bigarray/tests/test_basic.py ........
    bigfile/tests/test_basic.py ....
    bigfile/tests/test_filefile.py .
    bigfile/tests/test_filezodb.py ........
    bigfile/tests/test_thread.py ....
    lib/tests/test_calc.py .
    
    ======================================================================= 33 passed in 14.14 seconds =======================================================================
    x86_64-linux-gnu-gcc -pthread -g -Wall -D_GNU_SOURCE -std=gnu99 -fplan9-extensions -Wno-declaration-after-statement -Wno-error=declaration-after-statement  -Iinclude -I3rdparty/ccan -I3rdparty/include   bigfile/tests/tfault.c lib/bug.c lib/utils.c 3rdparty/ccan/ccan/tap/tap.c  -o bigfile/tests/tfault.t
    t/tfault-run bigfile/tests/tfault.t faultr on_pagefault
    ok 1 - !pagefault_init()
    Fatal Python error: Py_Initialize: Unable to get the locale encoding
      File ".../wendelin.core/.tox/py27-ZODB3-zblk0-fs-numpy110/lib/python2.7/encodings/__init__.py", line 123
        raise CodecRegistryError,\
                                ^
    SyntaxError: invalid syntax
    
    Current thread 0x00007f9b80024780 (most recent call first):
    t/tfault-run: line 28: 21521 Аварийный останов         (core dumped) gdb -q -batch $tfault core > core.info
    E: can't gdb(core)
    Makefile:189: ошибка выполнения рецепта для цели «faultr.tfault»
    make: *** [faultr.tfault] Ошибка 1
    rm bigfile/tests/test_virtmem.t bigfile/tests/test_ram.t bigfile/tests/tfault.t bigfile/tests/test_pagemap.t
    error: Failed to execute `make test`
    ERROR: InvocationError: '.../wendelin.core/.tox/py27-ZODB3-zblk0-fs-numpy110/bin/python setup.py test'
    ________________________________________________________________________________ summary _________________________________________________________________________________
    ERROR:   py27-ZODB3-zblk0-fs-numpy110: commands failed
    ---- 8< ----
    
    What happens here is:
    
    - gdb is used in automated tests
    - gdb is linked with libpython3.5
    - tox is currently running tests with python27
    - setup.py sets PYTHONPATH to whole path from python27
    - gdb, upon starting, initializes python runtime, which tries to load
      py27 modules under py35 -> oops.
    
    So propagating only setuptools location practically solves the issue for
    now, but still there is potential risk that in future, there will be
    other modules put in the same location as setuptools (location is parent
    dir of a module/package) which python tries to load on startup and which
    might be incompatible between 2 & 3.
    
    Thus not setting PYTHONPATH at all - e.g. creating environments
    virtualenv way - would be better, but buildout fundamentally works the
    other way. We can not also use -c 'buildout sys.path hack' in $PYTHON
    itself, as $PYTHON is used in general way inside Makefile.
    
    So let the hack with setuptools location in PYTHONPATH stay there until
    it practically works.
    8f624957
setup.py 10.2 KB