Ошибка установки scikits.audiolab при использовании python setup.py egg_info

Я пытаюсь установить scikits.audiolab с помощью инструмента pip. Пип запускает команду python setup.py egg_info из исходного каталога scikits.audiolab. Когда это происходит, я получаю эту ошибку:

Andrews-MacBook-Pro-2:scikits.audiolab-0.11.0 andrewhannigan$ pip install scikits.audiolab
Collecting scikits.audiolab
  Using cached scikits.audiolab-0.11.0.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "/private/var/folders/xb/qwlsm44s1wxfr82kytrgjtl80000gn/T/pip-build-vSZaU8/scikits.audiolab/setup.py", line 32, in <module>
        from numpy.distutils.core import setup
    ImportError: No module named numpy.distutils.core

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/xb/qwlsm44s1wxfr82kytrgjtl80000gn/T/pip-build-vSZaU8/scikits.audiolab

Проблема явно в том, что он не может импортировать numpy.distutils.core. Глядя на сценарий setup.py, этот импорт происходит на ранней стадии (в нижней части фрагмента ниже):

#! /usr/bin/env python
# Last Change: Fri Mar 27 05:00 PM 2009 J

# Copyright (C) 2006-2007 Cournapeau David <[email protected]>
#
# This library is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 2.1 of the License, or (at your option) any
# later version.
#
# This library is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with this library; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

# TODO:
#   - check how to handle cmd line build options with distutils and use
#   it in the building process

from os.path import join
import os
import sys

# The following is more or less random copy/paste from numpy.distutils ...
import setuptools

from distutils.errors import DistutilsError
from numpy.distutils.core import setup

Странная часть заключается в том, что если я просто запускаю приведенный выше фрагмент сценария setup.py через python setup.py, я не получаю ошибку импорта. Как аргумент командной строки egg_info влияет на способ запуска setup.py и почему он внезапно делает python неспособным импортировать из numpy.distutils.core?


person andrew    schedule 03.07.2015    source источник
comment
Кажется маловероятным, что это команда egg_info, скорее, pip каким-то образом меняет среду... Использует ли pip правильную среду? Вы можете проверить это с помощью pip -V   -  person Peter Brittain    schedule 11.07.2015
comment
возможно, это связано с вашей проблемой: github.com/scipy /scipy/blob/v0.13.0b1/setup.py#L203   -  person denfromufa    schedule 13.07.2015
comment
если numpy установлен так, то он может работать: pip install numpy --user   -  person denfromufa    schedule 13.07.2015
comment
Спасибо за помощь. После проверки скрипта pip, сам pip использовал неправильную версию Python, поэтому ранее установленные модули были недоступны в среде pip. Изменение верхней строки pip на #!/usr/bin/env python устранило проблему.   -  person andrew    schedule 13.07.2015
comment
@andrew Был ли мой комментарий полезен при отладке этого, и поэтому его стоит написать в качестве ответа?   -  person Peter Brittain    schedule 14.07.2015
comment
pip -V на самом деле не раскрыл ничего, чего бы я, честно говоря, не знал. Он вернул правильное расположение пакетов сайта, которое я ожидал. Только когда я посмотрел на код самого скрипта pip, я увидел, что он использует неправильную версию Python.   -  person andrew    schedule 14.07.2015
comment
Итак, вы успешно установили audiolab?   -  person James Tobin    schedule 15.07.2015
comment
Да уже установил   -  person andrew    schedule 16.07.2015


Ответы (1)


Проблема в файле setup.py пользователя scikits.audiolab. Взгляните на https://github.com/cournape/audiolab/blob/master/setup.py:

import os

# The following is more or less random copy/paste from numpy.distutils ...
import setuptools

from numpy.distutils.core import setup

Самое первое, что он делает, это импорт из numpy. Если numpy не установлен, это гарантированно приведет к ошибке импорта, которой вы поделились.

Я подозреваю, что между неудачной попыткой установки и успешной установкой вы установили numpy вручную с помощью pip install numpy. Маловероятно, что egg_info имел к этому какое-то отношение.

Вот демонстрация того, как обойти эту проблему, взятая из проекта scipy setup.py:

def setup_package():
    ...
    build_requires = []
    try:
        import numpy
    except:
        build_requires = ['numpy']

    metadata = dict(
        ...
        setup_requires = build_requires,
        install_requires = build_requires,
    )
person knite    schedule 16.07.2015