Qual é a maneira mais compatível de instalar módulos python em um Mac?

125

Estou começando a aprender python e adorando. Eu trabalho principalmente em um Mac, bem como em Linux. Estou descobrindo que no Linux (Ubuntu 9.04 principalmente) quando instalo um módulo python usando o apt-get, ele funciona bem. Eu posso importá-lo sem problemas.

No Mac, estou acostumado a usar o Macports para instalar todas as coisas do Unixy. No entanto, estou descobrindo que a maioria dos módulos python que instalo com ele não está sendo vista pelo python. Passei algum tempo brincando com as configurações PATH e usando python_select. Nada realmente funcionou e, neste momento, eu realmente não estou entendendo, apenas estou bisbilhotando.

Tenho a impressão de que o Macports não é universalmente amado por gerenciar módulos python. Eu gostaria de começar de novo usando uma abordagem mais "aceita" (se essa é a palavra certa).

Então, eu estava pensando, qual é o método que os desenvolvedores de python Mac usam para gerenciar seus módulos?

Perguntas sobre bônus:

Você usa o python da Apple ou alguma outra versão? Você compila tudo da fonte ou existe um gerenciador de pacotes que funciona bem (Fink?).

GloryFish
fonte
Havia um artigo agradável na embalagem aplicações PyQt para Mac OS X no Ars Technica um tempo atrás: arstechnica.com/open-source/guides/2009/03/...
Todd Gamblin
7
MacPorts é perfeito para Python no Mac. NOTA: você precisa instalar os pacotes Python via MacPorts para que eles sejam instalados na instalação do MacPorts Python. Você também pode instalar pacotes sem usar o MacPorts; no entanto, você precisa tornar essa versão do python o padrão via python_select ANTES de instalar o pacote. Se você instalar o pacote e usar python_select, não fará diferença, pois ele será instalado na versão do Python que era o padrão no momento da instalação.
Michael Aaron Safyan

Respostas:

144

A maneira mais popular de gerenciar pacotes python (se você não estiver usando o gerenciador de pacotes do sistema) é usar setuptools e easy_install. Provavelmente já está instalado no seu sistema. Use-o assim:

easy_install django

easy_install usa o Índice de Pacotes Python que é um recurso incrível para desenvolvedores de python. Dê uma olhada ao redor para ver quais pacotes estão disponíveis.

Uma opção melhor é o pip , que está ganhando força, pois tenta corrigir muitos dos problemas associados ao easy_install. O Pip usa o mesmo repositório de pacotes que o easy_install, ele funciona melhor. Realmente, o único momento em que você precisa usar o easy_install é para este comando:

easy_install pip

Depois disso, use:

pip install django

Em algum momento, você provavelmente desejará aprender um pouco sobre o virtualenv . Se você faz muito desenvolvimento python em projetos com requisitos de pacotes conflitantes, o virtualenv é uma dádiva de Deus. Ele permitirá que você tenha versões completamente diferentes de vários pacotes e alterne entre eles facilmente, dependendo de suas necessidades.

Em relação a qual python usar, ficar com o python da Apple causará menos dores de cabeça, mas se você precisar de uma versão mais recente (o Leopard é 2.5.1, eu acredito), eu usaria o macports python 2.6.

sexto equipamento
fonte
5
Recentemente reconstruí minha máquina e passei a usar apenas Homebrew e PIP, de repente todos os problemas de construção que eu estava tendo desapareceram.
GloryFish
42

Sua pergunta já tem três anos e há alguns detalhes não abordados em outras respostas:

A maioria das pessoas que eu conheço usa o HomeBrew ou o MacPorts , eu prefiro o MacPorts por causa do seu corte limpo do ambiente padrão do Mac OS X e da minha configuração de desenvolvimento. Apenas mova sua pasta / opt e teste seus pacotes com um ambiente Python de usuário normal

O MacPorts é apenas portátil no Mac, mas com o easy_install ou o pip, você aprenderá como configurar seu ambiente em qualquer plataforma (Win / Mac / Linux / Bsd ...). Além disso, será sempre mais atualizado e com mais pacotes

Pessoalmente, deixei o MacPorts manipular meus módulos Python para manter tudo atualizado. Como qualquer outro gerenciador de pacotes de alto nível (ou seja: apt-get), é muito melhor para o levantamento pesado de módulos com muitas dependências binárias. Não há como construir minhas ligações Qt (PySide) com easy_install ou pip. O Qt é enorme e leva muito tempo para compilar. Assim que você desejar um pacote Python que precise de uma biblioteca usada por programas que não sejam Python, tente evitar easy_install ou pip

Em algum momento, você encontrará alguns pacotes ausentes no MacPorts. Não acredito que o MacPorts possa lhe dar toda a CheeseShop . Por exemplo, recentemente precisei do módulo Elixir , mas o MacPorts oferece apenas py25-elixir e py26-elixir, nenhuma versão py27. Em casos como esses, você tem:

instalação do pip-2.7 --useruser elixir

(certifique-se de sempre digitar pip- (versão))

Isso criará uma biblioteca Python extra em seu diretório pessoal. Sim, o Python funcionará com mais de um local da biblioteca: um controlado pelo MacPorts e um local do usuário para tudo que estiver faltando no MacPorts.

Agora observe que eu sou a favor do pip sobre o easy_install. Há um bom motivo para você evitar o setuptools e o easy_install. Aqui está uma boa explicação e eu tento me afastar deles. Um recurso muito útil do pip é fornecer uma lista de todos os módulos (ao longo de suas versões) que você instalou com o MacPorts, easy_install e o próprio pip:

congelamento pip-2.7

Se você já começou a usar o easy_install, não se preocupe, o pip pode reconhecer tudo o que já foi feito pelo easy_install e até atualizar os pacotes instalados com ele.

Se você é um desenvolvedor, fique de olho no virtualenv para controlar diferentes configurações e combinações de versões de módulos. Outras respostas já mencionam, o que não foi mencionado até agora é o módulo Tox , uma ferramenta para testar se o seu pacote instala corretamente com diferentes versões do Python.

Embora eu normalmente não tenha conflitos de versão, gosto de ter o virtualenv para configurar um ambiente limpo e obter uma visão clara das dependências dos meus pacotes. Dessa forma, nunca esqueço nenhuma dependência em meu setup.py

Se você optar pelo MacPorts, esteja ciente de que várias versões do mesmo pacote não são mais selecionadas como o antigo estilo Debian com um pacote python_select extra (ele ainda existe para compatibilidade). Agora você tem o comando select para escolher qual versão do Python será usada (você pode até selecionar as versões instaladas pela Apple):

$  port select python
Available versions for python:
    none
    python25-apple
    python26-apple
    python27 (active)
    python27-apple
    python32

$ port select python python32

Adicione tox em cima disso e seus programas devem ser realmente portáteis

SystematicFrank
fonte
30

Por favor, veja ambiente de desenvolvimento Python OS X . A melhor maneira é usar o MacPorts . Baixe e instale o MacPorts e, em seguida, instale o Python via MacPorts digitando os seguintes comandos no Terminal:

instalação da porta sudo python26 python_select
sudo port select --set python python26

OU

instalação da porta sudo python30 python_select
sudo port select --set python python30

Use o primeiro conjunto de comandos para instalar o Python 2.6 e o ​​segundo conjunto para instalar o Python 3.0. Então use:

porta sudo install py26-packagename

OU

porta sudo install py30-packagename

Nos comandos acima, substitua packagename pelo nome do pacote, por exemplo:

porta sudo install py26-setuptools

Esses comandos instalarão automaticamente o pacote (e suas dependências) para a versão Python fornecida.

Para obter uma lista completa dos pacotes disponíveis para Python, digite:

lista de portas | grep py26-

OU

lista de portas | grep py30-

O comando que você usa depende da versão do Python que você escolheu instalar.

Michael Aaron Safyan
fonte
1
Para o registro, nas versões recentes do MacPorts sudo python_select python30foi substituído por sudo port select --set python python30.
Benjamin Hodgson
7

Eu uso o MacPorts para instalar o Python e quaisquer módulos de terceiros rastreados pelo MacPorts /opt/locale instalo quaisquer módulos instalados manualmente (aqueles que não estão no repositório do MacPorts) /usr/local, e isso nunca causou problemas. Eu acho que você pode estar confuso quanto ao uso de certos scripts e variáveis ​​de ambiente do MacPorts.

O MacPorts python_selecté usado para selecionar a versão "atual" do Python, mas não tem nada a ver com módulos. Isso permite, por exemplo, instalar o Python 2.5 e o Python 2.6 usando o MacPorts e alternar entre as instalações.

As $PATHvariáveis ​​de ambiente não afetam quais módulos Python são carregados. $PYTHONPATHé o que você está procurando. $PYTHONPATHdeve apontar para diretórios que contêm módulos Python que você deseja carregar. No meu caso, minha $PYTHONPATHvariável contém /usr/local/lib/python26/site-packages. Se você usa o Python do MacPorts, ele configura os outros diretórios adequados para você, então você só precisa adicionar caminhos adicionais$PYTHONPATH . Mas, novamente, $PATHnão é usado quando o Python procura por módulos que você instalou.

$PATH é usado para encontrar executáveis, portanto, se você instalar o Python do MacPorts, verifique se /opt/local/binestá no seu $PATH.

mipadi
fonte
6

Não há nada de errado em usar uma instalação MacPorts Python. Se você estiver instalando módulos python do MacPorts, mas não os estiver vendo, isso provavelmente significa que você não está chamando o python do MacPorts no qual instalou. Em um shell de terminal, você pode usar caminhos absolutos para chamar os vários Pythons que podem ser instalados. Por exemplo:

$ /usr/bin/python2.5         # Apple-supplied 2.5 (Leopard)
$ /opt/local/bin/python2.5   # MacPorts 2.5
$ /opt/local/bin/python2.6   # MacPorts 2.6
$ /usr/local/bin/python2.6   # python.org (MacPython) 2.6
$ /usr/local/bin/python3.1   # python.org (MacPython) 3.1

Para obter o python correto por padrão, é necessário garantir que seu shell $ PATH esteja definido corretamente para garantir que o executável correto seja encontrado primeiro. Outra solução é definir aliases de shell para os vários pitães.

Uma instalação do python.org (MacPython) também é boa, como outros sugeriram. easy_install pode ajudar, mas, novamente, como cada instância do Python pode ter seu próprio easy_installcomando, verifique se você está chamando o certo easy_install.

Ned Deily
fonte
2
Se ele usa MacPorts, a maneira correta de tornar essa versão do Python o padrão é não mexer com o PATH, mas instalar o "python_select" e permitir que ele alterne automaticamente os links simbólicos necessários para tornar a versão do Python o padrão.
Michael Aaron Safyan
3
O python_select gerencia apenas links simbólicos python em / opt / local / bin e não há garantia de que / opt / local / bin seja anterior a / usr / local / bin ou / usr / bin no seu $ PATH (embora a instalação inicial do MacPorts tente faça isso). O ponto é que, com as várias versões disponíveis, usar apenas "python" ou mesmo "python2.5" é um pouco de crapshoot em geral: você não sabe em qual Python você terminará, a menos que esteja ciente dos $ Armadilhas do CAMINHO e / ou usam caminhos absolutos.
Ned Deily
6

Se você usa o Python do MacPorts, ele possui seu próprio easy_install localizado em: /opt/local/bin/easy_install-2.6 (para py26, é isso). Não é o mesmo que simplesmente chamar easy_install diretamente, mesmo se você usou python_select para alterar seu comando python padrão.

tudor
fonte
1
Mesmo para pip. Com a minha configuração do MacPorts, eu executo o pip-2.6 (que está em / opt / local / bin /) para instalar módulos python que funcionam bem com o python do MacPorts. Você pode sudo port install py2.6-pipobter pip.
zlovelady
4

Você já olhou para o easy_install ? Ele não sincroniza seus macports ou algo assim, mas baixa automaticamente o pacote mais recente e todas as dependências necessárias, como por exemplo

easy_install nose

para o pacote de testes da unidade nasal, ou

easy_install trac

para o tracrastreador de erros.

Também há um pouco mais de informações na página do EasyInstall .

Mark Rushakoff
fonte
1
easy_install está bom. Lembre-se de que, assim como você pode ter várias versões do python instaladas, é fácil ter várias versões do easy_install instaladas, cada uma associada a uma instalação / versão diferente do python. Você só precisa ter certeza de entender qual deles está invocando (qual (1) pode ser útil).
Ned Deily
2

Quando você instala módulos com o MacPorts, ele não entra na versão do Python da Apple. Em vez disso, esses módulos são instalados na versão MacPorts do Python selecionada.

Você pode alterar qual versão do Python é usada por padrão usando uma porta mac chamada python_select . instruções aqui .

Além disso, há o easy_install . O qual usará o python para instalar os módulos python.

Jon W
fonte
python_selectagora está obsoleto, veja as respostas mais recentes.
askewchan
2

Você já pode ter pip3pré-instalado, então tente!

Shayan Amani
fonte
-1

Eu uso o easy_install com o Python da Apple e funciona como um encanto.

las3rjock
fonte
-1

Instale diretamente um dos pacotes fink (Django 1.6 a partir de 2013-novembro)

fink install django-py27
fink install django-py33

Ou crie um virtualenv:

fink install virtualenv-py27
virtualenv django-env
source django-env/bin/activate
pip install django
deactivate # when you are done

Ou use o fink django mais quaisquer outros pacotes instalados do pip em um virtualenv

fink install django-py27
fink install virtualenv-py27
virtualenv django-env --system-site-packages
source django-env/bin/activate
# django already installed
pip install django-analytical # or anything else you might want
deactivate # back to your normally scheduled programming
Kurt Schwehr
fonte