Mac + virtualenv + pip + postgresql = Erro: executável pg_config não encontrado

89

Eu estava tentando instalar o postgres para um tutorial, mas pipme deu um erro:

pip install psycopg

Um recorte de erro que recebo:

Error: pg_config executable not found.

Please add the directory containing pg_config to the PATH

or specify the full executable path with the option:

    python setup.py build_ext --pg-config /path/to/pg_config build ...

or with the pg_config option in 'setup.cfg'.

Onde está pg_configmeu virtualenv? Como configurar isso? Estou usando o virtualenv porque não quero uma instalação do postgres em todo o sistema.

KGo
fonte
Eu sou o único que forneceu uma resposta relevante sobre como lidar com isso usando o virtualenv e não perdendo a bebida, etc. Consulte: stackoverflow.com/questions/20170895/…
andilabs

Respostas:

104

No Mac, se você estiver usando Postgres.app , o arquivo pg_config está em seu /Applications/Postgres.app/Contents/Versions/<current_version>/bindiretório. Isso precisará ser adicionado ao caminho do sistema para corrigir este erro, como este:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/<current_version>/bin

Então, por exemplo, se a versão atual do Postgres.app for 9.5, esta linha de exportação seria:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.5/bin

Com versões mais recentes do Postgres.app (> 9.5?), Você pode simplesmente adicionar "mais recente" no lugar do número da versão, assim:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
bkev
fonte
5
observe que a versão mudará com o tempo; agora é9.4
andilabs
1
esteja ciente de que para que seja aplicado sempre ao shell atual, é necessário adicionar esta linha se .bash_profileestiver usando o bash padrão do Terminal. SE usar zshanexe esta linha ao .zshrcarquivo. Tudo isso você encontrará em seu diretório inicial. (apenas ls -la)
andilabs
2
Isso era cerca de um milhão de vezes mais fácil do que usar cerveja.
Nate
agora é a versão 9.5! considera editar a resposta para dizer a versão atual?
AZhao
6
você pode substituir <current_version>por latestqual aponta para a versão mais recente do Postgres instalado. Minha pasta se parece com: ls /Applications/Postgres.app/Contents/Versions/e dá9.5/ latest/
Raymond
95

No Mac, a solução é instalar postgresql:

brew install postgresql

No CentOS, a solução é instalar postgresql-devel:

sudo yum install postgresql-devel

pg_configestá no postgresql-develpacote

Mingyu
fonte
11
A questão começa com uma configuração "virtualenv". Não acredito que cerveja seja apropriada neste caso. Parece que deve ser uma solução pura pip.
john hight,
psycopg é uma ligação à biblioteca C, portanto, você precisará ter a biblioteca C instalada. Não é possível (AFAIK) instalar bibliotecas C nativas no virtualenvs.
Penguin Brian de
Depois de instalar as bibliotecas C postgresql, você pode executar novamente o comando pip install com falha (isso não ficou claro na resposta acima).
Penguin Brian de
32

Eu concordo totalmente com john hight que a maioria das respostas postadas são totalmente offtopic, assumindo que o OP precisa exatamente de usar o virtualenv .

Para mim, a resposta foi executar o seguinte comando no prompt ao ativar o virtualenv:

export PATH="/Applications/Postgres.app/Contents/Versions/9.4/bin:$PATH"

(observe que a parte 9.4 significa versão e pode variar)

ou se você quiser usar a versão mais recente instalada do Postgres:

export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH" 

e depois:

pip install psycopg2

vai supondo que você instalou o postgres com sucesso. E se não, lembre-se que a melhor e recomendada solução é usar: Postgres.app

andilabs
fonte
2
Esta é a melhor resposta para esta pergunta.
Vinod Sharma
3
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"se você quiser usar a última versão instalada do Postgres
jaynp
19

Não se esqueça de que sua variável $ PATH no ambiente virtual! = Sua variável $ PATH global. Você pode confirmar isso com 'echo $ PATH' em seu virtualenv e também em um novo shell. Então, a menos que você queira instalar o PostgreSQL como uma instância única dentro de seu ambiente virtual (algo que não valha a pena fazer, imo), você precisará modificar a variável $ PATH dentro do virtualenv para incluir o caminho para sua instalação global (que irá resolver seu erro de falta de pg_config).

Aqui estão as etapas:

1.) Em um novo shell, digite 'which pg_config'. Isso retornará o caminho. Copie. No meu caso, o caminho era assim: /Applications/Postgres.app/Contents/Versions/9.3/bin

2.) De volta ao seu shell virtualenv, digite 'export PATH = / your-path-to-pg_config: $ PATH'

3.) Então, ainda dentro do virtualenv, 'pip install psycopg2'

Se tudo correr de acordo com o planejado, o psycopg2 será instalado no ambiente virtual, mas a instalação se referirá à sua instalação Global do PostgreSQL. No meu caso, esta instalação global foi instalada via Postgres.App, daí o caminho. Prefiro esse método de trabalho com psycopg2, pois significa que posso usar o banco de dados facilmente em qualquer virtualenv, em vez de apenas no ambiente virtual definido.

Espero que isso ajude quem chega aqui. Para o Google juice, aqui está a linguagem de erro explícita (e vaga) retornada quando você se depara com este problema:
Command python setup.py egg_info falhou com o código de erro 1

Kevin Dalias
fonte
2
Ainda assim, acho que a questão implica uma "instância única dentro" do virtualenv. Ainda estou procurando uma solução que seja instalada no virtualenv.
john hight,
Você é o verdadeiro campeão e salvou meu dia.
Hafiz Siddiq
10

Veja como consegui resolver esse problema no meu Mac (OSX 10.9):

brew update
brew install --force ossp-uuid
brew install postgresql
pip install psycopg

Recebi um erro CLANG quando tentei pip install psycopg(um problema do LLVM 5.1 ), então tive que instalar o psycopg com este comando:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install psycopg

É semelhante à solução de Mingyu , mas existem diferenças suficientes que achei que valeria a pena compartilhar.

mrgnw
fonte
2
+1 funcionou para mim. Não acredito que tenho que especificar um sinalizador personalizado para um compilador C para configurar um ambiente de desenvolvimento postgres + python no MacOS ...
Andomar
1
A questão começa com uma configuração "virtualenv". Não acredito que cerveja seja apropriada neste caso. Parece que deveria ser uma solução pura de pip.
john hight,
5

Este erro é causado quando as ferramentas de construção não conseguem encontrar as bibliotecas Postgresql.

Freqüentemente, é necessário instruir o psycopg2 sobre como encontrar o binário pg_config, você pode:

  1. adicione o caminho para pg_config em seu caminho de shell (/ usr / local / pgsql / bin /)

  2. ou edite o arquivo setup.cfg na pasta de origem psycopg2 e forneça o caminho completo para pg_config na linha que começa com pg_config =

pg_config = / usr / local / pgsql / bin / pg_config

  • o exemplo acima é um exemplo que você pode fazer locate pg_configpara descobrir onde ele reside, ou simplesmente digitar which pg_confige ele deve indicar o caminho.

Com menos frequência, o erro vem de não ter o postgresql instalado em seu sistema. Em caso afirmativo, baixe e crie postgres ou baixe um binário psycopg2 pré-compilado para OS X.

eu vou
fonte
1
Claro ... mas como fazer isso dentro de um virtualenv, e não ser dependente de uma instalação do pg em todo o sistema?
john hight,
4

Para OS X El Capitan (10.11.6)+ brew+ virtualenv+PostgreSQL 9.5 :

Depois de instalar PostgreSQL 9.5:

brew install postgresql@9.5

Em seguida, abra seu terminal e execute:

export PATH=$PATH:/usr/local/opt/postgresql\@9.5/bin/
pip install psycopg2
valex
fonte
3

você deve configurar o caminho postgresql:

export PATH=$PATH:/Library/PostgreSQL/11/bin

depois, você deve instalar os requisitos:

pip3 install -r requirements
Diego Santa Cruz Mendezú
fonte
2

virtualenv é para pacotes python. Eu não acho que você será capaz de conter o postgres dentro de um virtualenv. A mensagem de erro que você está vendo é provavelmente porque você ainda não instalou o postgres. O script de instalação psycopg2 está procurando por arquivos postgres (neste caso pg_config) e não os encontra porque não está instalado. postgres não pode ser instalado usando pip ou virtualenv.

Cavala sagrada
fonte
1
é possível instalar o postgresql em um virtualenv e frequentemente esse erro é um problema de caminho, independentemente do postgresql estar instalado.
l'L'l
1
@HolyMackerel, obrigado pela resposta mais relevante. Quaisquer detalhes a oferecer sobre por que você não pode instalar psycopg2 / pg dentro do virtualenv?
john hight,
1
postgres não tem nada a ver com python. Eles correm separadamente, mas falam um com o outro.
Bioto
1

Além das respostas fornecidas por @bkev e @andi, de acordo com a documentação em Postgres.app, você deve adicionar o seguinte ao seu bash_profile no Mac:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin

Observe que não há número de versão codificado. Eu queria adicionar isso como um comentário às respostas acima, mas não tenho representantes suficientes para isso.

Turgut Sarıçam
fonte
1

Se você estiver usando o postgresql 9.4, o arquivo está localizado em

/usr/pgsql-9.4/bin/pg_config

O nome do pacote é

postgresql94-9.4.9-1PGDG.rhel6.x86_64

para adicionar pg_config ao seu PATH, faça o seguinte

PATH=$PATH:/usr/pgsql-9.4/bin/
Ahmed
fonte
1

Se você não precisar usar o psycopgdriver especificamente, mude para o pg8000driver. É Python puro e menos enjoado.

Chris Johnson
fonte
0

No Ubuntu, eu só precisava do pacote dev postgres:

sudo apt-get install postgresql-server-dev-all
Marcanuy
fonte
0

O meu estava localizado em /Library/PostgreSQL/9.4/bin

export PATH=$PATH:/Library/PostgreSQL/9.4/bin
InternetFett
fonte