O que “erro: opção - única versão gerenciada externamente não reconhecida” indica?

102

Parece que de repente comecei a encontrar o erro error: option --single-version-externally-managed not recognizedao pip installing pacotes de varions (incluindo PyObjCe astropy). Nunca vi esse erro antes, mas agora também está aparecendo em construções travis-ci para as quais nada mudou.

Este erro indica uma distribuição desatualizada? Ou alguma opção especificada incorretamente em setup.py? Ou algo totalmente diferente?

Keflavich
fonte

Respostas:

84

Nova atualização:

Instale a versão mais recente do setuptools. Se você ainda receber o erro, instale wheeltambém.

pip install -U setuptools
pip install -U wheel

Resposta original / mais detalhes:

--single-version-externally-managed é uma opção usada para pacotes Python instruindo o módulo setuptools a criar um pacote Python que pode ser facilmente gerenciado pelo gerenciador de pacotes do host, se necessário, como Yum ou Apt.

Se estiver vendo esta mensagem, você pode ter uma versão antiga do setuptools ou do Python. Tente usar Distribute, que é uma versão mais recente do setuptools e é compatível com versões anteriores. Esses pacotes podem esperar que você já o tenha.

https://pypi.python.org/pypi/distribute

Editar: neste ponto, distribuir foi mesclado com o setuptoolsprojeto principal . Basta instalar a versão mais recente do setuptools. Como @wynemo indicou, você pode querer usar a --eggopção em vez disso, pois é mais apropriada para aqueles que fazem instalações manuais, onde você não pretende criar um pacote de sistema para distribuição.

Kelketek
fonte
1
Você pode adicionar em qual versão apareceu? Estou usando o setuptools 0.6 e o ​​pip não conhece uma versão mais recente. distributeparece certo, mas não consigo importá-lo ...
keflavich
Você não import distribute. Distribuir é um substituto imediato e tem o mesmo nome de módulo. import setuptoolsé necessário para isso também.
Kelketek
A coisa a fazer, então, é ter certeza que setuptools não está substituindo distrib, se você tiver ambos instalados. Você deve instalar o distrib com pip e, em seguida, remover as ferramentas de instalação. Eu imagino que deve funcionar.
Kelketek
17
Deve ser adicionado: Não use mais distribuir. Distribute foi incorporado de volta ao projeto setuptools, então agora há apenas um setuptoolspara controlar todos eles.
Iguananaut
1
@johntex, essa resposta foi dada há mais de um ano, quando o distribute e o setuptools ainda não haviam sido mesclados (ou, se tivessem, eu nunca tinha ouvido falar). Eu atualizei agora.
Kelketek
136

Adicionar --eggopção

pip install --egg SCons

Eu uso a pipversão 1.4.1

Wynemo
fonte
10
Essa foi a única solução que realmente ajudou. Pip e setuptools recentes já foram instalados, no entanto, considero esse erro.
Michael
Eu tive esse problema com o pyenv e isso resolveu.
glaucon
13
Alguém pode explicar em detalhes o que essa opção significa e por que funciona?
kawing-chiu
4
Embora tenha funcionado para mim, também recebi o erro: "DESCONTINUAÇÃO: --egg foi descontinuado e será removido no futuro. Este sinalizador é mutuamente exclusivo com grandes partes do pip e, na verdade, usá-lo invalida a capacidade do pip de gerenciar o processo de instalação. "
natersoz
2
no such option: --eggno pip 18.1
gdw2
45

A instalação wheelresolveu esse problema com o recente pip(usei 8.1.2):

pip install wheel
Seth Difley
fonte
Você pode reverter para editar se quiser, sem problemas. Se você souber a versão exata pipe wheelonde foi corrigido, pode valer a pena mencioná-lo caso ele seja quebrado novamente. E também, a resposta não explica o que está acontecendo de qualquer maneira.
anatoly techtonik
Essa resposta de @sparrowt corrigiu meu problema
David Poxon
7

Tente atualizar ferramentas de configuração como esta:

pip install --upgrade setuptools

pardal
fonte
5

Eu estava tendo esse problema. Acontece que era um problema com as permissões de arquivo no cache do meu pip.

Se você vir uma mensagem no início da saída do pip, como

The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

você pode ter o mesmo problema. Você pode resolvê-lo garantindo que você tenha as permissões de arquivo adequadas no cache do pip (algo como chown -R $(whoami) /home/ubuntu/.cache/pip) ou, se estiver em um UNIX, pode definir o local do cache do pip com XDG_CACHE_HOMEenv var para alguma pasta de sua propriedade.

sans
fonte
Surpreendentemente, funcionou para mim também (se você usar sudopara instalar o pacote, certifique-se de adicionar o -Hsinalizador)! Eu realmente não vejo qual é a conexão entre o cache e o erro de opção de comando, mas deixa para lá.
Delgan
1

Tentei as soluções acima. No entanto, só posso resolver o problema até fazer:

sudo pip3 install -U pip (para python3)

Karim
fonte
0

Eu tenho esse problema no meu macbook também quando tento atualizar um pacote Python. Eu verifico a versão do pip no OS X, é muito antiga: 1.1. Eu uso follow cmd para atualizar o pip para 1.5.6

easy_install -U pip

Então, esse erro foi corrigido.

NewPtone
fonte