Python setup.py develop vs install

336

Duas opções em setup.py develope installestão me confundindo. De acordo com este site , usar developcria um link especial para o diretório de pacotes de sites.

As pessoas sugeriram que eu o usasse python setup.py installpara uma instalação nova e python setup.py developdepois que quaisquer alterações fossem feitas no arquivo de instalação.

Alguém pode lançar alguma luz sobre o uso desses comandos?

Netro
fonte

Respostas:

468

python setup.py install é usado para instalar pacotes (normalmente de terceiros) que você não vai desenvolver / modificar / depurar.

Para seu próprio material, primeiro você deseja instalar o pacote e, em seguida, editar o código com frequência, sem precisar reinstalá-lo todas as vezes - e é exatamente python setup.py developisso que faz: ele instala o pacote (normalmente apenas uma pasta de origem) de uma forma que permita editar convenientemente seu código após a instalação no ambiente (virtual) e fazer com que as alterações entrem em vigor imediatamente.

Observe que é altamente recomendável usar pip install .(instalar) e pip install -e .(instalação do desenvolvedor) para instalar pacotes, pois a chamada setup.pydireta fará coisas erradas para muitas dependências, como pré-lançamentos de versões anteriores e versões de pacotes incompatíveis, ou dificultará a desinstalação do pacote pip.

Erik Kaplun
fonte
81
Erik está certo. Também é útil saber que ele setup.py developvem com uma --uninstallopção para quando você terminar de invadir.
philadams
5
Último pensamento aqui é que uma outra opção para setup.py developquando hackers em um pacote de python é usar "simples (mas explícito) modificação caminho para resolver o pacote corretamente" re Kenneth Reitz
philadams
4
Encontrei problemas python setup.py developao tentar configurar o Ceilometer para desenvolvimento local. Acabei usando pip install -e PATH(dentro de um virtualenv) para evitar problemas que surgiram viaeasy_install .
Joe D'Andrea
1
não tenho certeza se isso importa, mas se eu estiver usando python 3 etc, é preciso executar de maneira python setup.py developdiferente?
Charlie Parker
1
Funciona com python3, mas não se esqueça de remover qualquer instalação atual de pip que você possa ter, pois elas se chocam (aconteceu comigo no momento).
Léo Germond
124

A partir da documentação . O developnão instalará o pacote, mas criará um .egg-linkno diretório de implantação de volta ao diretório de código-fonte do projeto.

Portanto, é como instalar, mas em vez de copiar para o site-packagesarquivo, ele adiciona um link simbólico (que .egg-linkatua como um link simbólico multiplataforma).

Dessa forma, você pode editar o código-fonte e ver as alterações diretamente, sem precisar reinstalá-lo sempre que fizer uma pequena alteração. Isso é útil quando você é o desenvolvedor desse projeto, daí o nome develop. Se você está apenas instalando o pacote de outra pessoa, deve usarinstall

RubenLaguna
fonte
24

Outra coisa que as pessoas podem achar úteis ao usar o developmétodo é a --useropção de instalar sem o sudo. Ex:

python setup.py develop --user

ao invés de

sudo python setup.py develop
Taylor
fonte
11
Como você nunca deve estar setup.py developem seu sistema, isso só faz sentido em um ambiente virtual.
dividebyzero
2
@dividebyzero Quer dizer que sempre se deve usar python setup.py develop --user, se entendi corretamente? Além disso, você poderia me dizer onde o pacote está instalado usando python setup.py develop --user? Obrigado!
ROBOT AI
2
Acho que o --userinstalará em um diretório na sua conta pessoal e não afetará outros usuários no seu sistema. O developfará links para o diretório de origem do projeto em vez de realmente copiar tudo. develop --userdeve estar OK, e developem um virtualenv também. Apenas developo sistema real é estranho, porque você pode ter outros usuários usando algo que aponta para o projeto em sua cópia pessoal do código-fonte do projeto.
Div #
4
Muitos (a maioria?) As pessoas não estão em execução em sistemas multi-utilizador embora
patstew
1
@boatcoder, Mac e Linux (e Windows) podem ser sistemas com capacidade para vários usuários , mas provavelmente o desenvolvedor é a única conta de usuário (real) de sua área de trabalho, e acredito que é isso que pastew significava.
MestreLion 5/11