<p>установка numpy с помощью директивы install_requires (Trac # 1841)</p>

Созданный на 20 окт. 2012  ·  39Комментарии  ·  Источник: numpy/numpy

_Оригинальный билет http://projects.scipy.org/numpy/ticket/1841 от 25 мая 2011 г. пользователем trac ohe, назначен unknown._

Привет,

В virtualenv с python v2.7.1 я не могу установить numpy через директиву install_requires в setuptools / distribute.

from setuptools import setup
setup(...
      install_requires=['numpy'],
      ...)

python setup.py install дает мне следующую трассировку:

running install
running bdist_egg
running egg_info
writing requirements to UNKNOWN.egg-info/requires.txt
writing UNKNOWN.egg-info/PKG-INFO
writing top-level names to UNKNOWN.egg-info/top_level.txt
writing dependency_links to UNKNOWN.egg-info/dependency_links.txt
reading manifest file 'UNKNOWN.egg-info/SOURCES.txt'
writing manifest file 'UNKNOWN.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.6-intel/egg
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install

creating build/bdist.macosx-10.6-intel
creating build/bdist.macosx-10.6-intel/egg
creating build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/PKG-INFO -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/SOURCES.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/dependency_links.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/requires.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/top_level.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/UNKNOWN-0.0.0-py2.7.egg' and adding 'build/bdist.macosx-10.6-intel/egg' to it
removing 'build/bdist.macosx-10.6-intel/egg' (and everything under it)
Processing UNKNOWN-0.0.0-py2.7.egg
Copying UNKNOWN-0.0.0-py2.7.egg to /Users/olivier/tc/karmatest/lib/python2.7/site-packages
Adding UNKNOWN 0.0.0 to easy-install.pth file

Installed /Users/olivier/tc/karmatest/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg
Processing dependencies for UNKNOWN==0.0.0
Searching for numpy
Reading http://pypi.python.org/simple/numpy/
Reading http://numpy.scipy.org
Reading http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103
Reading http://numeric.scipy.org
Best match: numpy 1.6.0
Downloading http://sourceforge.net/projects/numpy/files/NumPy/1.6.0/numpy-1.6.0.tar.gz/download
Processing download
Running numpy-1.6.0/setup.py -q bdist_egg --dist-dir /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/egg-dist-tmp-Zr2lMr
Running from numpy source directory.Warning: distutils distribution has been initialized, it may be too late to add a subpackage commandWarning: distutils distribution has been initialized, it may be too late to add a subpackage fcompilernon-existing path in '/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils': 'site.cfg'
Warning: distutils distribution has been initialized, it may be too late to add a subpackage distutilsWarning: distutils distribution has been initialized, it may be too late to add a subpackage testingWarning: distutils distribution has been initialized, it may be too late to add a subpackage f2pyWarning: distutils distribution has been initialized, it may be too late to add an extension _sortWarning: distutils distribution has been initialized, it may be too late to add an extension multiarrayWarning: distutils distribution has been initialized, it may be too late to add an extension umathWarning: distutils distribution has been initialized, it may be too late to add an extension scalarmathWarning: distutils distribution has been initialized, it may be too late to add an extension _dotblasWarning: distutils distribution has been initialized, it may be too late to add an extension umath_testsWarning: distutils distribution has been initialized, it may be too late to add an extension multiarray_testsWarning: distutils distribution has been initialized, it may be too late to add a subpackage coreWarning: distutils distribution has been initialized, it may be too late to add an extension _compiled_baseWarning: distutils distribution has been initialized, it may be too late to add a subpackage libWarning: distutils distribution has been initialized, it may be too late to add a subpackage oldnumericWarning: distutils distribution has been initialized, it may be too late to add an extension _capiWarning: distutils distribution has been initialized, it may be too late to add a subpackage numarrayWarning: distutils distribution has been initialized, it may be too late to add an extension fftpack_liteWarning: distutils distribution has been initialized, it may be too late to add a subpackage fftWarning: distutils distribution has been initialized, it may be too late to add an extension lapack_liteWarning: distutils distribution has been initialized, it may be too late to add a subpackage linalgWarning: distutils distribution has been initialized, it may be too late to add an extension mtrandWarning: distutils distribution has been initialized, it may be too late to add a subpackage randomWarning: distutils distribution has been initialized, it may be too late to add a subpackage maWarning: distutils distribution has been initialized, it may be too late to add a subpackage matrixlibWarning: distutils distribution has been initialized, it may be too late to add a subpackage compatWarning: distutils distribution has been initialized, it may be too late to add a subpackage polynomialWarning: distutils distribution has been initialized, it may be too late to add a subpackage docWarning: distutils distribution has been initialized, it may be too late to add a subpackage numpyCould not locate executable f95
Could not locate executable f90
Could not locate executable f77
Could not locate executable xlf90
Could not locate executable xlf
Could not locate executable ifort
Could not locate executable ifc
Could not locate executable g77
Found executable /usr/local/bin/gfortran
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-//ccLgEqLk.out
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-//ccLgEqLk.out
Traceback (most recent call last):
  File "setup.py", line 4, in <module>
    install_requires=['numpy']
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/install.py", line 76, in run
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/install.py", line 104, in do_egg_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 211, in run
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 427, in easy_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 478, in install_item
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 519, in process_distribution
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 563, in resolve
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 799, in best_match
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 811, in obtain
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 446, in easy_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 476, in install_item
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 655, in install_eggs
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 930, in build_and_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 919, in run_setup
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 62, in run_setup
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 105, in run
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 64, in <lambda>
  File "setup.py", line 196, in <module>

  File "setup.py", line 189, in setup_package

  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/core.py", line 186, in setup
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/bdist_egg.py", line 167, in run
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/egg_info.py", line 8, in run
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 152, in run
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 169, in build_sources
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 328, in build_extension_sources
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 385, in generate_sources
  File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 410, in generate_config_h

  File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 41, in check_types

  File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 271, in check_types

SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py:251: RuntimeWarning: Parent module 'numpy.distutils' not found while handling absolute import
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py", line 251, in clean_up_temporary_directory
ImportError: No module named numpy.distutils
Error in sys.exitfunc:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py", line 251, in clean_up_temporary_directory
ImportError: No module named numpy.distutils

У меня нет проблем с установкой numpy с pip install numpy или easy_install numpy внутри или вне любого virtualenv.

ОС: Mac OS 10.6.7

00 - Bug Other

Самый полезный комментарий

К сведению всех, кто сталкивается с этой проблемой, с последней версией setuptools обходным путем является добавление NumPy в setup_requires . Я все еще хранил его в install_requires , поэтому мой setup.py выглядит так:

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

Это работает и устанавливает NumPy только один раз как в Mac OS X, так и в Linux (не тестировалось в Windows).

Что касается того, почему я понятия не имею.

Все 39 Комментарий

_ @ rgommers написал (а) 2011-05-27_

Я не совсем уверен, в чем проблема, но можно ли ее обойти, просто запустив сценарий установки, который сначала устанавливает numpy, а затем ваш пакет? Полагаться на эти плохо документированные функции setuptools - не лучшая идея, если вы можете этого избежать.

Если бы мне пришлось угадывать, я бы сказал, что вызов setuptools.setup () в первый раз вызывает кучу магии, которая что-то портит для numpy.distutils, следовательно:

Running from numpy source directory.Warning: distutils distribution has been
initialized, it may be too late to add a subpackage commandWarning: distutils
distribution has been initialized, it may be too late to add a subpackage

Это предупреждение исходит от distutils / misc_util.py.

Пользователь _trac ijstokes написал (а) 2011-06-08_

У меня была такая же ошибка, и мне кажется, что она вызвана некоторыми проблемами с зависимостями. Если я снова попробую easy_install с другими модулями, они сработают во второй раз. Я предполагаю, что некоторая зависимость "видна" только после завершения сеанса easy_install.

Ян

Можно ли когда-нибудь это исправить? Это вызывает обходные пути там, где не должно быть IHMO. Я действительно хотел бы добраться до момента, когда numpy можно указать в параметре install_requires файла setup.py.

Конечно, это возможно, если кто-то потратит время, чтобы по-настоящему разобраться в проблеме и отправить чистое исправление. Лично для меня это не приоритет - следует избегать install_requires imho (по крайней мере, пока pip и easy_install не перестанут обновлять зависимости при обновлении пакета по крайней мере).

Можете ли вы подтвердить, что та же проблема все еще возникает с современными distutils / setuptools / pip?

Оно делает.

отправлено с моего айпада

29 ноября 2013 года в 7:22 njsmith [email protected] написал:

Можете ли вы подтвердить, что та же проблема все еще возникает с современными
distutils / setuptools / pip?

-
Ответьте на это письмо напрямую или просмотрите его на
Gi tHub https://github.com/numpy/numpy/issues/2434#issuecomment -29485806
.

Просто столкнулся с этой проблемой, поэтому могу подтвердить, что она есть. Вариант install_requires должен быть предпочтительнее написания специального сценария установки, когда он действительно не нужен.

ОС: Mac 10.8.3

Удар по этой проблеме в. Шоу не прекращалось, но определенно раздражало. Тем более, что никоим образом не очевидно, что это ошибка, а не проблема пользователя / среды.

Я только что попытался воспроизвести это, установив pandas (который использует install_requires ) в виртуальном сервере 2.7, созданном как:

$ virtualenv --no-site-packages nonumpy
$ source nonumpy/bin/activate
$ cd $PANDAS_DIR
$ pip install cython # needed for pandas
$ python setup.py install

Если кто-то может дать простой способ воспроизвести это, это поможет.

У меня также есть эта проблема в виртуальном окружении 2.7. ОС Ubuntu хриплый

@zethraeus, не могли бы вы предоставить набор команд для воспроизведения этого (как в моем комментарии выше)? Это сложно исправить, если мы не можем воспроизвести проблему.

Привет! Извините, это заняло так много времени, но вот репродуктор.

См. Https://gist.github.com/kejbaly2/71517b08536776399198

Спасибо за пример @ kejbaly2 , сейчас я могу воспроизвести его.

Та же проблема с SO:
http://stackoverflow.com/questions/20356725/error-installing-numpy-via-setup-tools-in-virtualenv-on-ubuntu
http://stackoverflow.com/questions/19904957/installing-numpy-as-a-dependency-in-setup-py

И в системе отслеживания ошибок Red Hat: https://bugzilla.redhat.com/show_bug.cgi?id=1019924

Есть еще кое-что, что pip делает правильно, но setuptools не относится к install_requires : https://bitbucket.org/pypa/setuptools/issue/209/setup_requires-and-install_requires- не

Имея очень похожую проблему с попыткой использовать install_requires и numpy

Вот как я могу воспроизвести ошибку в Red Hat 6.5
https://gist.github.com/necrolyte2/530e9b39dcb0259b69d4

К сведению всех, кто сталкивается с этой проблемой, с последней версией setuptools обходным путем является добавление NumPy в setup_requires . Я все еще хранил его в install_requires , поэтому мой setup.py выглядит так:

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

Это работает и устанавливает NumPy только один раз как в Mac OS X, так и в Linux (не тестировалось в Windows).

Что касается того, почему я понятия не имею.

Я пытался отследить аналогичную проблему, которая может иногда возникать, когда сборка Numpy запускается с помощью setup_requires=['Numpy'] в Astropy, когда сама Astropy устанавливается как setup_requires другого пакета (Я называю это «установкой»).

Я отследил это до этого древнего (но в принципе все еще актуального, хотя бы немного?) Фрагмента кода: https://github.com/numpy/numpy/blob/9fc077332b34a7b2a90126f5ae6cc50d57162db5/numpy/distutils/core.py#L92

В большинстве случаев при запуске setup.py Numpy он помещает функцию с именем configuration в kwargs для numpy.distutils.core.setup . numpy.distutils.core.setup в свою очередь, выталкивает кнопку 'configuration' из настройки kwargs, затем устанавливает некоторые «волшебные» глобальные переменные в distutils.core , а затем рекурсивно вызывает _itself_ . Цель этого рекурсивного вызова - использовать механизм distutils для проверки аргументов командной строки на наличие ошибок / - help.

Затем он вызывает функцию configuration которая запускает процесс настройки всех подпакетов Numpy, прежде чем снова вызвать функцию distutils setup() со всеми полностью настроенными пакетами.

Все это противоречит тому, что менеджеру Configuration иногда необходимо вызывать служебную программу get_distribution , чтобы прикрепить данные к объекту Distribution . Необходимость этого спорна. Фактически, хотя есть некоторые части кода в Configuration которые думают, что он должен это делать, есть другие части, которые думают, что если уже есть экземпляр Distribution прикрепленный к distutils.core._setup_distribution то, вероятно, что-то не так (следовательно, «дистрибутив distutils был инициализирован, может быть слишком поздно добавлять подпакет», предупреждения, о которых некоторые люди сообщили в этой ветке).

Чтобы сделать небольшую резервную копию и, надеюсь, уточнить - при запуске функции setup() из distutils (или setuptools) она инициализирует объект Distribution из setup() kwargs, а затем назначает в результате Distribution в глобальную переменную distutils.core._setup_distribution . На самом деле он ни в коем случае не очищает эту переменную, поскольку предполагает, что это _only_ настройка, которая будет запускаться в текущем интерпретаторе Python. Он не был разработан для настройки. (pip обходит эту и подобные проблемы при установке нескольких пакетов, устанавливая каждый пакет из своего собственного подпроцесса). Однако в других случаях, таких как setup_requires , в distutils.core._setup_distribution уже может быть экземпляр Distribution из корневого пакета. Поэтому, когда класс Configuration Numpy пытается прикрепить что-то к объекту Distribution для самого _Numpy_, в некоторых случаях он может в конечном итоге возиться с неправильным Distribution . Это приводит к искаженной сборке Numpy, поскольку некоторые биты отсутствуют.

Есть несколько возможных обходных путей, как с конца setuptools, так и с конца Numpy. Я не решил, какой будет лучший подход, но все это определенно беспорядок :)

Что бы это ни стоило, одним из возможных обходных путей с конца setuptools будет setuptools.sandbox.run_setup , функция, которую setuptools использует для достижения setupception, для сохранения / восстановления всех distutils.core глобальных переменных до / после запуска установки. рассматриваемый сценарий.

Как это бывает, я считаю, что текущая версия setuptools уже может исправить это, скрыв исходный distutils.core (удалив его из sys.modules ) перед вызовом дочернего скрипта setup.py. Это _ должно_ позаботиться об этом. Но я не проверял это дважды.

Обновление: подтверждено, проблема, которую я описал выше, решена (несколько случайно) в setuptools> = 10.0.

@embray , это хорошая детективная работа! (и немного болит голова :))

Вы правы в том, что easy_install - и, следовательно, get_distribution() я полагаю, - все еще достаточно актуален, чтобы мы не нарушали его.

@rgommers Дело в том, что обходной путь для easy_install был добавлен очень давно, и я не считаю, что он больше необходим (не только из-за того, что сама easy_install устарела, хотя я знаю, что все еще есть несколько веских причин, по которым люди должны его использовать). Я посмотрю, смогу ли я придумать патч, который решает исходную проблему, но не является проблемой в других контекстах.

@embray звучит хорошо. Если у вас есть готовый патч, но он не будет рассмотрен в течение ~ 2 недель, пожалуйста, пните меня (осторожно)

setup_requires = ["numpy"] у меня не сработало. Я получил это сообщение об ошибке:

AttributeError: объект 'модуль' не имеет атрибута 'get_include'.

Но повторный запуск "python setup.py install" устранил проблему. См. Также http://stackoverflow.com/questions/21605927/why-doesnt-setup-requires-work-properly-for-numpy

Я только что столкнулся с проблемой, о которой сообщил @asmaier.

Как бы то ни было, я никогда не забывал свои идеи по устранению этой проблемы, но прямо сейчас мне пришлось сосредоточиться на других вещах. Если кто-то еще захочет нанести удар, я дал несколько общих рекомендаций относительно того, куда они могли бы пойти искать, несколько комментариев отсюда.

Итак, эта проблема связана с тем, что устанавливается __builtins__.__NUMPY_SETUP__ = True
и когда вы устанавливаете зависимость, которая требует numpy в качестве зависимости, __NUMPY_SETUP__ не сбрасывается с помощью setuptools.
похоже, вы пытаетесь установить здесь __NUMPY_SETUP__ = False
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
но этот код никогда не достигается, потому что возврат на предыдущую строку ...

на самом деле, я считаю, что вся функция isbootstrapping неправильно использует / злоупотребляет здесь __builtins__ , что ломается, когда у вас есть numpy в качестве зависимости и есть зависимость, которая имеет numpy в качестве зависимости.

@JensTimmerman Я подозреваю, что это тоже связано с https://github.com/matplotlib/matplotlib/issues/6928 ,

Любые предложения о том, как это исправить, приветствуются.

@rgommers Мысли?

похоже, вы пытаетесь установить здесь NUMPY_SETUP = False
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
но этот код никогда не достигается, потому что возврат на предыдущую строку ...

Эта функция is_bootstrapping нигде не используется, поэтому не имеет значения.

на самом деле, я считаю, что вся функция isbootstrapping неправильно использует / злоупотребляет встроенными функциями, что ломается, когда у вас есть numpy в качестве зависимости, и есть зависимость, которая имеет numpy в качестве зависимости.

Единственное использование __builtins__ в основной setup.py здесь .

Это некрасиво, но также трудно написать это более надежно. На данный момент я предполагаю, что если с этим возникнет проблема, то при некоторых обстоятельствах он будет отображаться только для setup_requires='numpy' а не для install_requires . Разница между ними в том, что первый вызывает setuptools потому что pip еще не знает, как с этим справиться. В Scipy мы действительно используем setup_requires='numpy' , и никогда не сталкивались с этим. Так что, возможно, это плюс фанк в сценариях установки matplotlib.

Повторное чтение через https://github.com/numpy/numpy/issues/2434#issuecomment -77898051, который, кажется, хорошо описывает причину проблемы, я не думаю, что это имеет какое-либо отношение к __NUMPY_SETUP__ .

РЕДАКТИРОВАТЬ: или, может быть, в некоторых случаях, но с этим трудно справиться по-другому. Обычно здесь нет проблем, потому что pip умеет собирать / устанавливать вещи хорошо изолированным способом.

Не должно быть слишком сложно доказать, что эта теория верна или неверна, используя del builtins.__NUMPY_SETUP__ в конце setup.py .

попробовал в gh-7956

На всякий случай, если суть https://github.com/numpy/numpy/issues/2434#issuecomment -49156521 в какой-то момент исчезнет, ​​вот копия того, как воспроизвести эту проблему:

cd /tmp

cat > ./setup.py <<DELIM
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: "Chris Ward" <[email protected]>

from setuptools import setup

default_setup = dict(
    name='numpy_install_test',
    description='https://github.com/numpy/numpy/issues/2434',
    provides=['numpy_install_test'],
    install_requires=['pandas'],
    requires=['pandas'],
    license='GPLv3',
    author='Chris Ward',
    author_email='[email protected]',
)   

setup(**default_setup)

DELIM


virtualenv --no-site-packages ~/virtenvs/nonumpy
source ~/virtenvs/nonumpy/bin/activate
python setup.py install

трудно установить pandas в python2.7.16 с помощью pip install -R requirements.txt

https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz (11,8 МБ)
Полный вывод команды python setup.py egg_info:
Отслеживание (последний вызов последний):
Файл "", строка 1, в
Файл "/tmp/pip-install-WznqHc/pandas/setup.py", строка 746, в
setuptools_kwargs)Файл "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", строка 144, в настройке_install_setup_requires (attrs)Файл "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", строка 139, в _install_setup_requiresdist.fetch_build_eggs (dist.setup_requires)Файл "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", строка 724, в fetch_build_eggsreplace_conflicting = Верно,Файл "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", строка 782, в разрешенииreplace_conflicting = replace_conflictingФайл "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", строка 1065, в best_matchвернуть self.obtain (req, installer)Файл "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", строка 1077, при получениивозврат установщика (требование)Файл "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", строка 791, в fetch_build_eggвернуть cmd.easy_install (req)Файл "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", строка 679, в easy_installвернуть self.install_item (spec, dist.location, tmpdir, deps)Файл "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", строка 705, в install_itemdists = self.install_eggs (спецификация, загрузка, tmpdir)Файл "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", строка 890, в install_eggsвернуть self.build_and_install (setup_script, setup_base)Файл "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", строка 1158, в build_and_installself.run_setup (setup_script, setup_base, args)Файл "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", строка 1144, в run_setuprun_setup (сценарий_установки, аргументы)Файл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 253, в run_setupподнятьФайл "/usr/local/lib/python2.7/contextlib.py", строка 35, в __exit__self.gen.throw (тип, значение, трассировка)Файл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 195, в setup_contextУступатьФайл "/usr/local/lib/python2.7/contextlib.py", строка 35, в __exit__self.gen.throw (тип, значение, трассировка)Файл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 166, в save_modulessave_exc.resume ()Файл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 141, в резюмеsix.reraise (type, exc, self._tb)Файл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 154, в save_modulesдоход сохраненФайл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 195, в setup_contextУступатьФайл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 250, в run_setup_execfile (сценарий_установки, нс)Файл "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", строка 45, в _execfileexec (код, глобальные, локальные)** Файл "/tmp/easy_install-2M8B7z/numpy-1.17.0rc1/setup.py", строка 31, в

**RuntimeError: Python version >= 3.5 required.**

Не уверен, почему он ищет numpy-1.17.0rc1, который не поддерживает python2

Любая помощь будет оценена, спасибо

Пожалуйста, поделитесь своим requirements.txt

Файл требований содержит:

колба == 1.0.2
колба-jwt == 0.3.2
колба-скрипт == 2.0.6
колба-scrypt == 0.1.3.6
PyJWT <1.5.0
мигалка == 1.4
телефонные номера == 8.9.12
фланкер == 0.9.0
bugsnag == 3.4.3
маринованныйb == 0.7.2
запросы == 2.19.1
python-dateutil == 2.8.0
Gunicorn == 19.9.0
gevent == 1.3.6
webargs == 4.0.0
слой == 3.10
bson == 0.5.7
сельдерей == 4.2.1
Redis == 3.2.1
наемник
numpy == 1.16.4

Наконец, заставьте его работать, сохраняя numpy внутри файла требований, а затем устанавливая pandas

Запустить команду в докере:

RUN pip install https://github.com/pydata/pandas/releases/download/v0.24.2/pandas-0.24.2.tar.gz

Однако теперь есть еще одна проблема при компиляции: вам нужно установить cython для компиляции панд.

Ошибка:

Исключение: созданный Cython файл pandas / io / sas / sas.c не найден.
Cython требуется для компиляции панд из ветки разработки.
Пожалуйста, установите Cython или загрузите пакет выпуска pandas.

Есть идеи?

Не связан с этой проблемой, которая касается использования install_requires внутри setup.py . Пожалуйста, откройте новый выпуск. Вам действительно нужно устанавливать панды из исходников? Почему не pip install pandas==0.24.2 ?

Да, я открою этот выпуск в библиотеке pandas. Однако сообщение, о котором я упоминал ранее, относится к numPy, поскольку вы не можете установить pandas напрямую, numPy правильно установлен на Python2.7 в docker env.
Почему бы не установить pandas == 0.24.2? Потому что, когда я запускаю его под докером, он говорит.

Исключение: файл pandas / msgpack.c, созданный Cython, не найден.
Cython требуется для компиляции панд из ветки разработки.
Пожалуйста, установите Cython или загрузите пакет выпуска pandas.

Поэтому мне нужно использовать релизную версию pandas для установки из tarball

Закрытие. Я думаю, что мир питонов уходит от setup_requires и других к requirements.txt или pyproject.toml . Ниже приводится обходной путь для тех, кто все еще хочет использовать setup_requires .

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

Что касается @omeryounus, пытающегося установить numpy на python2, это отдельная проблема, не связанная с этим. Некоторые пользователи сообщают, что обновление pip и setuptools до самой последней версии помогло решить эту проблему.

Пожалуйста, откройте снова, если есть еще что обсудить около setup_requires .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги