_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
_ @ 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.
Obrigado pelo exemplo @ kejbaly2 , posso reproduzi-lo agora.
Mesmo problema no 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
E no rastreador de bug do Red Hat: https://bugzilla.redhat.com/show_bug.cgi?id=1019924
Há mais coisas que pip
faz certo, mas setuptools
não em relação a install_requires
: https://bitbucket.org/pypa/setuptools/issue/209/setup_requires-and-install_requires- não
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 "
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
.
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 asetup_requires
. Eu ainda o mantive eminstall_requires
, então meusetup.py
parece com: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.