<p>instalação numpy através de problema de diretiva install_requires (Trac # 1841)</p>

Criado em 20 out. 2012  ·  39Comentários  ·  Fonte: numpy/numpy

_Tíquete original http://projects.scipy.org/numpy/ticket/1841 em 25/05/2011 pelo usuário trac ohe, atribuído a desconhecido._

Olá,

Em um virtualenv, com python v2.7.1, não consigo instalar o numpy através da diretiva install_requires de setuptools / distrib.

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

A python setup.py install me dá o seguinte traceback:

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

Não tenho problemas para instalar o numpy com pip install numpy ou easy_install numpy dentro ou fora de qualquer virtualenv.

SO: Mac OS 10.6.7

00 - Bug Other

Comentários muito úteis

Como um FYI para qualquer pessoa com esse problema, com a versão mais recente de setuptools , uma solução alternativa é adicionar NumPy a setup_requires . Eu ainda o mantive em install_requires , então meu setup.py parece com:

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

Isso funciona, e só instala o NumPy uma vez, no Mac OS X e no Linux (não testado no Windows).

Quanto ao porquê, não tenho ideia.

Todos 39 comentários

_ @ rgommers escreveu em

Não sei exatamente qual é o problema, mas você pode contorná-lo executando um script de instalação que primeiro instala o numpy e depois o seu pacote? Contar com esses recursos de ferramentas de configuração mal documentados não é uma boa ideia se você puder evitá-lo.

Se eu tivesse que adivinhar, diria que chamar setuptools.setup () pela primeira vez invoca um monte de magia que estraga algo para numpy.distutils, portanto:

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

Esse aviso vem de distutils / misc_util.py.

_trac usuário ijstokes escreveu em 2011/06/08_

Acabei de ter esse mesmo erro e para mim parece que é causado por alguns problemas de dependência. Se eu tentar novamente o easy_install com os outros módulos, eles funcionarão pela segunda vez. Meu melhor palpite é que alguma dependência só é "visível" após o término da sessão easy_install.

Ian

É possível consertar isso em algum ponto? Isso causa soluções alternativas onde não deve haver IHMO. Eu realmente gostaria de chegar a um ponto em que numpy possa ser especificado na opção install_requires de um setup.py.

É possível, claro, se alguém investir tempo para realmente entender o problema e enviar uma correção limpa. Não é um prio para mim pessoalmente - install_requires deve ser evitado imho (pelo menos até que pip e easy_install parem de atualizar dependências ao atualizar um pacote, pelo menos).

Você pode confirmar que o mesmo problema ainda ocorre com distutils / setuptools / pip modernos?

É verdade.

Enviado do meu iPad

Em 29 de novembro de 2013, às 7:22, njsmith [email protected] escreveu:

Você pode confirmar que o mesmo problema ainda ocorre com os modernos
distutils / setuptools / pip?

-
Responda a este e-mail diretamente ou visualize-o no
Gi tHubhttps: //github.com/numpy/numpy/issues/2434#issuecomment -29485806
.

Acabei de encontrar esse problema para confirmar que está lá. A opção install_requires deve ser preferida em vez de escrever um script de instalação personalizado quando não for realmente necessário.

SO: Mac 10.8.3

Acertando esse problema para. Não foi um show interrompido, mas definitivamente irritante. Especialmente porque não é de forma alguma óbvio que seja um bug em vez de algum problema de usuário / env.

Acabei de tentar reproduzir isso instalando o pandas (que usa install_requires ) em um virtualenv 2.7 criado como:

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

Se alguém puder dar uma maneira fácil de reproduzir isso, isso ajudaria.

Eu também tenho esse problema em um ambiente virtual 2.7. OS ubuntu wheezy

@zethraeus você poderia fornecer um conjunto de comandos para reproduzir isso (como em meu comentário acima)? É difícil consertar se não conseguirmos reproduzir o problema.

Oi! Desculpe a demora, mas aqui está um reprodutor.

Veja: https://gist.github.com/kejbaly2/71517b08536776399198

Obrigado pelo exemplo @ kejbaly2 , posso reproduzi-lo agora.

Tendo um problema muito semelhante ao tentar usar install_requires e numpy

Aqui está como posso reproduzir o erro no Red Hat 6.5
https://gist.github.com/necrolyte2/530e9b39dcb0259b69d4

Como um FYI para qualquer pessoa com esse problema, com a versão mais recente de setuptools , uma solução alternativa é adicionar NumPy a setup_requires . Eu ainda o mantive em install_requires , então meu setup.py parece com:

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

Isso funciona, e só instala o NumPy uma vez, no Mac OS X e no Linux (não testado no Windows).

Quanto ao porquê, não tenho ideia.

Tenho tentado rastrear um problema semelhante que pode ocorrer às vezes quando a construção do Numpy está sendo executada por meio de setup_requires=['Numpy'] no Astropy, quando o próprio Astropy está sendo instalado como setup_requires de outro pacote (Eu chamo isso de 'setupception').

Eu rastreei esse código antigo (mas em princípio ainda relevante, pelo menos um pouco?): Https://github.com/numpy/numpy/blob/9fc077332b34a7b2a90126f5ae6cc50d57162db5/numpy/distutils/core.py#L92

Na maioria dos casos, ao executar o setup.py do Numpy, ele coloca uma função chamada configuration nos kwargs de numpy.distutils.core.setup . numpy.distutils.core.setup por sua vez tira a tecla 'configuration' dos kwargs de configuração, em seguida, configura algumas variáveis ​​globais "mágicas" em distutils.core , e então chama _self_ recursivamente . O propósito desta chamada recursiva é usar o mecanismo distutils para verificar se há erros nos argumentos da linha de comando / - help.

Em seguida, chama a função configuration que inicia o processo de configuração de todos os subpacotes Numpy, antes de chamar novamente a função distutils setup() com todos os pacotes agora totalmente configurados.

Onde tudo isso dá errado é que o gerente de Configuration ocasionalmente precisa chamar o utilitário get_distribution para anexar coisas ao objeto Distribution . A necessidade disso é discutível. Na verdade, embora existam algumas partes do código em Configuration que acham que deveriam ser capazes de fazer isso, há outras partes que pensam que se já houver uma instância Distribution anexada a distutils.core._setup_distribution então algo provavelmente está errado (portanto, a "distribuição distutils foi inicializada, pode ser tarde demais para adicionar um subpacote" avisos que algumas pessoas relataram neste tópico).

Para recuar um pouco e esperançosamente esclarecer - ao executar a função setup() de distutils (ou setuptools), ele inicializa um objeto Distribution de setup() kwargs e, em seguida, atribui o resultando Distribution para a variável global distutils.core._setup_distribution . Em nenhum momento ele realmente limpa essa variável porque assume que é a _única_ configuração que será executada no interpretador Python atual. Não foi projetado para setupception. (o pip contorna esse e outros problemas semelhantes ao instalar vários pacotes, instalando cada pacote de seu próprio subprocesso). No entanto, em outros casos, como setup_requires , já pode haver uma instância Distribution do pacote raiz em distutils.core._setup_distribution . Assim, quando a classe Configuration do Numpy tenta anexar coisas ao objeto Distribution para o _Numpy propriamente dito_, pode acabar bagunçando o Distribution errado em alguns casos. Isso resulta em uma construção mutilada do Numpy, pois alguns bits estão faltando.

Há uma série de soluções alternativas possíveis para isso, tanto da extremidade do setuptools quanto / ou do Numpy. Ainda não decidi qual seria a melhor abordagem, mas a coisa toda está definitivamente uma bagunça :)

Pelo que vale a pena, uma possível solução alternativa do final do setuptools seria setuptools.sandbox.run_setup , a função que o setuptools usa para alcançar o setupception, para salvar / restaurar todas as distutils.core variáveis ​​globais antes / depois de executar o setup script em questão.

Por acaso, acredito que a versão atual do setuptools já pode corrigir isso ocultando o distutils.core (removendo-o de sys.modules ) antes de chamar o script filho setup.py. Eu deveria cuidar disso. Mas eu não verifiquei isso duas vezes.

Atualização: confirmado, o problema que descrevi acima foi contornado (um tanto por acaso) em setuptools> = 10.0.

@embray é um bom trabalho de detetive! (e isso dói um pouco a minha cabeça :))

Você está certo ao dizer que easy_install - e portanto get_distribution() eu suponho - ainda é relevante o suficiente para que não devêssemos quebrá-lo.

@rgommers Acontece que essa solução alternativa para easy_install foi adicionada há muito tempo e não acredito que seja totalmente necessária (não apenas pelo fato de que o próprio easy_install está efetivamente obsoleto, embora eu saiba que ainda há um um punhado de boas razões para as pessoas usá-lo). Vou ver se consigo encontrar um patch que trate do problema original e não seja um problema em outros contextos.

@embray soa bem. Se você preparar um patch e ele não for revisado em cerca de 2 semanas, chute-me (gentilmente)

setup_requires = ["numpy"] não funcionou para mim. Recebi esta mensagem de erro:

AttributeError: o objeto 'módulo' não tem atributo 'get_include'.

Mas executar "python setup.py install" uma segunda vez resolveu o problema. Consulte também http://stackoverflow.com/questions/21605927/why-doesnt-setup-requires-work-properly-for-numpy

Acabei de encontrar o problema relatado por @asmaier.

Pelo que vale a pena, nunca esqueci minhas idéias para corrigir esse problema, mas apenas tive que me concentrar em outras coisas agora. Se alguém mais quiser tentar, eu fiz algumas recomendações de alto nível sobre onde eles podem procurar, alguns comentários a partir daqui.

então, esse problema é devido ao fato de que __builtins__.__NUMPY_SETUP__ = True está sendo definido
e quando você instala uma dependência que precisa numpy como dependência, o __NUMPY_SETUP__ não está sendo redefinido por ferramentas de instalação.
parece que você está tentando definir __NUMPY_SETUP__ = False aqui
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
mas esse código nunca é alcançado, porque o retorno na linha anterior ...

na verdade, eu acredito que toda a função isbootstrapping está abusando / maltratando __builtins__ aqui, de uma forma que quebra quando você tem numpy como dependência e tem uma dependência que tem numpy como dependência.

@JensTimmerman Suspeito que isso também esteja relacionado a https://github.com/matplotlib/matplotlib/issues/6928 ,

Quaisquer sugestões sobre a maneira adequada de corrigir isso são bem-vindas.

Pensamentos de @rgommers ?

parece que você está tentando definir NUMPY_SETUP = False aqui
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
mas esse código nunca é alcançado, porque o retorno na linha anterior ...

Essa função is_bootstrapping não é usada em nenhum lugar que parece, então é irrelevante.

na verdade, acredito que toda a função isbootstrapping está usando mal / abusando de builtins aqui, de uma forma que quebra quando você tem numpy como dependência e tem uma dependência que tem numpy como dependência.

O único uso de __builtins__ está no principal setup.py aqui .

É feio, mas também é difícil escrever de uma forma mais robusta. Meu palpite no momento é que se houver um problema com isso, ele só aparecerá por setup_requires='numpy' em algumas circunstâncias e não com install_requires . A diferença entre eles é que o primeiro invoca setuptools porque pip ainda não sabe como lidar com isso. No entanto, em Scipy, usamos setup_requires='numpy' e nunca tivemos problemas com isso. Portanto, pode ser isso mais a funkiness nos scripts de configuração do matplotlib.

Lendo novamente em https://github.com/numpy/numpy/issues/2434#issuecomment -77898051, que parece descrever bem a causa do problema, não acho que tenha algo a ver com __NUMPY_SETUP__ .

EDITAR: ou talvez em alguns casos, mas é difícil lidar com isso de outra maneira. Normalmente não há problema aqui porque pip consegue construir / instalar coisas de uma forma bem isolada.

Não deve ser muito difícil provar que esta teoria está certa ou errada, usando del builtins.__NUMPY_SETUP__ no final de setup.py .

tentei isso em gh-7956

Caso a essência em https://github.com/numpy/numpy/issues/2434#issuecomment -49156521 desapareça em algum momento, aqui está uma cópia de como reproduzir esse problema:

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

tendo dificuldade em instalar o pandas em python 2.7.16 usando pip install -R requirements.txt

https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz (11,8 MB)
Resultado completo do comando python setup.py egg_info:
Traceback (última chamada mais recente):
Arquivo "", linha 1, em
Arquivo "/tmp/pip-install-WznqHc/pandas/setup.py", linha 746, em
setuptools_kwargs)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", linha 144, na configuração_install_setup_requires (attrs)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", linha 139, em _install_setup_requiresdist.fetch_build_eggs (dist.setup_requires)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", linha 724, em fetch_build_eggsreplace_conflicting = True,Arquivo "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", linha 782, em resoluçãoreplace_conflicting = replace_conflictingArquivo "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", linha 1065, em best_matchreturn self.obtain (req, instalador)Arquivo "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py", linha 1077, em obterdevolver o instalador (requisito)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/dist.py", linha 791, em fetch_build_eggreturn cmd.easy_install (req)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", linha 679, em easy_installreturn self.install_item (spec, dist.location, tmpdir, deps)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", linha 705, em install_itemdists = self.install_eggs (spec, download, tmpdir)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", linha 890, em install_eggsreturn self.build_and_install (setup_script, setup_base)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", linha 1158, em build_and_installself.run_setup (setup_script, setup_base, args)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", linha 1144, em run_setuprun_setup (setup_script, args)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 253, em run_setuplevantarArquivo "/usr/local/lib/python2.7/contextlib.py", linha 35, em __exit__self.gen.throw (tipo, valor, traceback)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 195, em setup_contextproduçãoArquivo "/usr/local/lib/python2.7/contextlib.py", linha 35, em __exit__self.gen.throw (tipo, valor, traceback)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 166, em save_modulessave_exc.resume ()Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 141, em resumosix.reraise (type, exc, self._tb)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 154, em save_modulesrendimento economizadoArquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 195, em setup_contextproduçãoArquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 250, em run_setup_execfile (setup_script, ns)Arquivo "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py", linha 45, em _execfileexec (código, globais, locais)** Arquivo "/tmp/easy_install-2M8B7z/numpy-1.17.0rc1/setup.py", linha 31, em

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

Não sei por que procurar numpy-1.17.0rc1, que não é compatível com python2

Qualquer ajuda seria apreciada, obrigado

Por favor, compartilhe seu requirements.txt

O arquivo de requisitos contém:

frasco == 1.0.2
flask-jwt == 0.3.2
flask-script == 2.0.6
flask-scrypt == 0.1.3.6
PyJWT <1.5.0
pisca-pisca == 1,4
números de telefone == 8.9.12
flanker == 0.9.0
bugsnag == 3.4.3
pickledb == 0.7.2
pedidos == 2.19.1
python-dateutil == 2.8.0
gunicorn == 19.9.0
gevent == 1.3.6
webargs == 4.0.0
ply == 3,10
bson == 0,5,7
aipo == 4.2.1
redis == 3.2.1
Hiredis
numpy == 1.16.4

Por fim, faça-o funcionar mantendo o arquivo de requisitos internos numpy e depois instalando o pandas

Execute o comando no docker:

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

No entanto, agora há outro problema na compilação, digamos que você precise instalar o cython para compilar o pandas.

Erro:

Exceção: arquivo gerado pelo Cython 'pandas / io / sas / sas.c' não encontrado.
Cython é necessário para compilar pandas de um branch de desenvolvimento.
Instale o Cython ou baixe um pacote de lançamento do pandas.

Qualquer ideia?

Não conectado a este problema que diz respeito ao uso de install_requires dentro de setup.py . Abra um novo problema. Você realmente precisa instalar o pandas da fonte? Por que não pip install pandas==0.24.2 ?

Sim, vou abrir este problema na biblioteca do pandas. No entanto, o post que mencionei anteriormente está relacionado ao numPy, já que você não pode instalar o pandas diretamente, numPy está instalado corretamente no Python2.7 sob docker env.
Por que não instalar o pandas == 0.24.2? Porque quando eu executo no docker, ele diz.

Exceção: arquivo gerado pelo Cython 'pandas / msgpack.c' não encontrado.
Cython é necessário para compilar pandas de um branch de desenvolvimento.
Instale o Cython ou baixe um pacote de lançamento do pandas.

Portanto, preciso usar a versão de lançamento do pandas a ser instalada a partir do tarball

Fechando. Acho que o mundo python está se afastando de setup_requires e mais para requirements.txt ou pyproject.toml . A solução alternativa está abaixo para aqueles que ainda desejam usar setup_requires .

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

Quanto a @omeryounus tentando instalar o numpy no python2, esse é um problema separado, não conectado a este. Alguns usuários relataram que atualizar o pip e o setuptools para a versão mais recente ajudou com esse problema.

Abra novamente se houver mais coisas para discutir em torno de setup_requires .

Esta página foi útil?
0 / 5 - 0 avaliações